下面的代码,for循环不会停止循环字符串。它会永远持续下去。但是应该只持续用户输入数字的时间。
segment .data
integer1: times 4 db 0
heeder: db "%d", 0
strin: db "Enter the number: ", 0
segment .bss
SECTION .text
global _main
extern _scanf
extern _printf
_main:
push integer1 ; address of integer1 (second parameter)
push heeder ; arguments are right to left (first parameter)
call _scanf
add esp, 8
mov eax, 0
mov eax, [integer1]
mov ecx, eax
loop:
cmp eax, ecx
jbe for
jmp end
for:
push strin
call _printf
add esp, 4
inc eax
jmp loop
end:
你能解决代码有什么问题吗?
答案 0 :(得分:3)
致电printf()
后,eax
中的值是printf
函数的返回值 - eax
未被呼叫保留。
请注意,即使解决了这个问题,至少还有一个其他错误 - eax
和ecx
启动具有相同值的循环 - 看起来您希望将`eax1设置为0 ,但你太快就这样做了。