2

我是组装新手,并制作了一个从键盘读取值的程序。我为此使用了 scanf 函数。我在循环中调用 scanf 函数,以便我可以输入多个值。但问题是我无法限制键盘输入的值。下面是代码

现在我想从 scanf 输入四个值,但它继续询问用户的值。

  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 位双字,因此您需要使用dd. 当前scanf将读取值写入时发生的情况c1是它会覆盖b(您存储的值edx,即您的循环计数器)。

于 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 回答