因为装配中的循环会永远持续下去

时间:2013-10-27 04:33:29

标签: assembly x86 nasm

下面的代码,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:

你能解决代码有什么问题吗?

1 个答案:

答案 0 :(得分:3)

致电printf()后,eax中的值是printf函数的返回值 - eax未被呼叫保留。

请注意,即使解决了这个问题,至少还有一个其他错误 - eaxecx启动具有相同值的循环 - 看起来您希望将`eax1设置为0 ,但你太快就这样做了。