2

私はアセンブリが初めてで、キーボードから値を読み取るプログラムを作成しました。この目的で scanf 関数を使用しました。複数の値を入力できるように、ループで scanf 関数を呼び出しています。しかし、問題は、キーボードで入力した値を制限できないことです。以下はコードです

今、scanfから4つの値を入力したかったのですが、ユーザーに値を尋ね続けています。

  section .bss
  c1 dd
  b dd
  section .data
  x db "%d",10,0
  y db "number is =%d",10,0
  section .text
global main
extern printf
extern scanf


main:
mov edx,0
loop_done:
mov [b],edx
lea ebx ,[c1]
push ebx
push x
call scanf
mov edx,[b]
push dword [c1]
cmp edx,3
inc edx
jnz loop_done
push y
call printf


add esp,16

ret
4

2 に答える 2

1

bとに十分なスペースを予約していませんc1dwは 16 ビットのワードのみを予約しますが、32 ビットの dword を格納しているため、使用する必要がありますddscanfが読み取り値を に書き込むときに現在起こっていることは、(ループ カウンターの値を格納した場所) をc1上書きすることです。bedx

于 2013-06-28T12:14:13.580 に答える
0

これは、コードがうまく機能するように変更する方法です。コードの下で何かが起こっている場合は、修正してください。

section .bss
c1 dd
b dd
section .data
x db "%d",10,0
y db "number is =%d",10,0
section .text
global main
extern printf
extern scanf


main:
mov edx,1
loop_done:
push edx
;mov [b],edx
lea ebx ,[c1]
push ebx
push x
call scanf
add esp,8
pop edx
;mov edx,[b]


;mov ecx,[c1]
;ush dword [c1]
;mov edx,[b]
 inc edx
 cmp edx,4

 jnz loop_done
 ;add esp,8

  ret
于 2013-06-28T13:55:35.733 に答える