我制作了一个简单的程序,它将计算前n个数字的总和(存储在varibale c1中)并将它们打印到控制台上。
当我运行它时,工作正常并给我想要的结果。例如,如果我从keyborad输入4,它给我10。
但现在当我手动完成它时,发现当我提供输入为4时它应该给出值9。
代码写得好吗?
section .bss
c1 db
section .data
x db "%d"
section .text
global main
extern printf
extern scanf
main:
mov ebx,1
mov eax,0
lea ecx,[c1]
push ecx
push x
call scanf
add esp,8
well_done:
inc ebx
add eax,ebx
cmp ebx,[c1]
jnz well_done
push eax
push message
call printf
add esp,8
ret
message:
db "sum is =%d",10,0
编辑:
section .text
global main
extern printf
main:
mov ebx,0
mov eax,0
well_done:
inc ebx
add eax,ebx
cmp ebx,4
jnz well_done
push eax
push message
call printf
add esp,8
ret
message:
db "sum is =%d",10,0
上面的代码给出了前4个数字之和的预期结果。
答案 0 :(得分:1)
问题是scanf
会返回eax
中处理的项目数,从而覆盖之前放入的0
。由于您阅读了1个项目,eax
将为1
,这就解释了为什么在运行代码时获得10个项目。您应该将mov eax, 0
向下移至scanf
之后,并从ebx
开始0
。
其他问题:您应该使用dd
作为c1
,因为整数是4个字节,而不是1.您还应该零终止格式字符串并将message
放入.data
{1}}部分也是如此。