Assembly 对于循环isn';不算对

Assembly 对于循环isn';不算对,assembly,for-loop,Assembly,For Loop,在Linux下,我在x86程序集中的for循环中遇到了问题,其中NASM是汇编程序,gcc是链接器。 这是我的密码: SECTION .data msg: dw "working",10, 0 msglen: equ $-msg msgtwo: dw "not",10,0 msgtwolen: equ $-msgtwo SECTION .text global main main: push ebp ; making the sta

在Linux下,我在x86程序集中的for循环中遇到了问题,其中NASM是汇编程序,gcc是链接器。 这是我的密码:

    SECTION .data
    msg: dw "working",10, 0
    msglen: equ $-msg
    msgtwo: dw "not",10,0
    msgtwolen: equ $-msgtwo
SECTION .text
    global main

main:
    push ebp    ; making the stack
    mov ebp, esp    ; -|-
    mov ecx, 0x0    ; counter
    mov ebx, 0xA    ; value that should be reached
    cmp ecx, ebx    ; checkif i < 10
    jne notzero ; jump if i < 10
    je zero ; jump if i == 0
notzero:
    inc ecx         ; ecx++
    mov eax, 4
    mov ebx, 1
    mov ecx, msgtwo
    mov edx, msgtwolen
    int 80h
zero:
    mov eax, 4  ; write sys call
    mov ebx, 1  ; stdout
    mov ecx, msg    ; msg to print
    mov edx, msglen ; msg len
    int 80h     ; interrupt
    mov esp, ebp    ;destroing the stack
    pop ebp      ; -|-

您永远不会跳回循环头,循环头可能是
cmp
指令,但您也会在
ecx
中重击计数器值,因此您也需要处理该问题。

为了创建循环,您需要从循环的底部分支/跳回循环的顶部,而这是您没有的(它正好在
zero
之前)


此外,您不需要在
非零之前使用
jne
:如果
je
失败,它将失败。

这是因为您没有循环-一旦达到
notzero
,您将执行到最后。
not
working