我可以在屏幕上看到 nums 递减,为什么它不会打破循环?使用 nasm 的 x86 程序集
I can see nums decrementing on the screen display, why won't it break the loop? x86 assembly using nasm
;store number of accounts to add
mov eax, SYS_READ
mov ebx, STDIN
mov ecx, nums
mov edx, 2
int 0x80
_storeLoop:
dec byte [nums]
;display nums
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, nums
mov edx, 1
int 0x80
mov eax, [nums]
cmp eax, 1
jnz _storeLoop
section.bss
nums resb 1
为什么我卡在这个循环里了。我可以看到 nums 最终等于零。我试过使用不同的比较,比如 jg.
正如上面的评论所说,mov eax, [nums]
将从包含 1 字节计数器的内存位置读取 4 字节。如果此循环开始时其他 3 个字节没有恰好全部归零,它将永远不会终止。
;store number of accounts to add
mov eax, SYS_READ
mov ebx, STDIN
mov ecx, nums
mov edx, 2
int 0x80
_storeLoop:
dec byte [nums]
;display nums
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, nums
mov edx, 1
int 0x80
mov eax, [nums]
cmp eax, 1
jnz _storeLoop
section.bss
nums resb 1
为什么我卡在这个循环里了。我可以看到 nums 最终等于零。我试过使用不同的比较,比如 jg.
正如上面的评论所说,mov eax, [nums]
将从包含 1 字节计数器的内存位置读取 4 字节。如果此循环开始时其他 3 个字节没有恰好全部归零,它将永远不会终止。