0

以下のコードでは、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:

コードの何が問題なのかわかりますか?

4

1 に答える 1

3

printf()値を呼び出した後は、関数eaxの戻り値であり、呼び出しによって保持されません。printfeax

その問題を修正した後でも、少なくとも 1 つの他のバグがあり、同じ値でループを開始することに注意してくださいeax。`eax1ecxを 0 に設定したいように見えますが、それは早すぎます。

于 2013-10-27T04:47:31.130 に答える