我在我的64位Linux机器上使用NASM,我只想简单地说:
问题出在我打电话之后
movzx rsi, [array+rcx]
,rcx的值已经改变(我通过使用gdb调试了解到这一点)。这是为什么?
我的代码:
array db "012345678"
fmt db "%d", 10, 0
...
...
; convert chars to integers
mov rcx, 9
L1:
dec rcx
sub [array+rcx], byte "0"
jnz L1
; print as integers
mov rcx, 0
L2:
mov rdi, fmt
movzx rsi, byte [array+rcx] ; rcx changes after this
xor rax, rax
call printf
inc rcx
cmp rcx, 8
jle L2
ret
但它不断地吐出2个。
如果我在堆栈中保留rcx
,或者使用不同的寄存器进行计数,则可以正常工作。 movzx
是否要销毁rcx
?
也是奖金问题,请随意排除,我是否正确地遍历数组?