我是程序员的新手,并制作了一个程序,可以从键盘读取值。我为此目的使用了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
答案 0 :(得分:1)
您没有为b
和c1
预留足够的空间。 dw
仅保留一个16位字,但由于您要存储32位双字,因此需要使用dd
。当scanf
将读取值写入c1
时,当前发生的情况是它会覆盖b
(您存储了edx
的值,即您的循环计数器)。
答案 1 :(得分: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