虽然组件中的循环只有增量打印一次,但无法弄清楚为什么(nasm)

时间:2015-06-23 17:53:01

标签: assembly while-loop counter nasm

我已尝试各种&lt ;,< =命令退出,但它只打印一次消息。试图让它在每次迭代时打印。我已经打开了很多标签并尝试了很多,但是无法想出这个标签。

    mov rax,0
    mov rbx,6
WhileLoop: 
    Cmp rax,rbx         ;loop termination condition (rax<6)
    jge WhileDone       ;if !<6, exit while loop
    mov rdi, message2   ;print message
    mov al, 0           ;print message
    call printf         ;print message
    inc rax             ;rax=rax+1
    jmp WhileLoop       ;next iteration 
WhileDone:

1 个答案:

答案 0 :(得分:0)

程序&#34; printf&#34;正在修改raxrbx。因此,让我们在&#34; printf&#34;之前保留它们,并在&#34; printf&#34;之后恢复它们。 :

    mov rax,0
    mov rbx,6
WhileLoop: 
    Cmp rax,rbx         ;loop termination condition (rax<6)
    jge WhileDone       ;if !<6, exit while loop
    PUSH RAX
    PUSH RBX
    mov rdi, message2   ;print message
    mov al, 0           ;print message
    call printf         ;print message
    POP  RBX
    POP  RAX
    inc rax             ;rax=rax+1
    jmp WhileLoop       ;next iteration 
WhileDone: