我有累加器eax的问题。在主要功能中,我没有获得真正的价值。在集合中,我将eax设置为1.始终累加器为8.仅在设置功能中设置功能更改值。如何在所有功能中使用变化?
function:
mov edx, [esp +4]
cmp edx, 3
je set
ret
set:
mov eax,1
ret
main:
pushad
mov eax,0
mov, ebx,2
loop:
add ebx,1
call function
push eax
push something ; this is string db...
call printf ; always print number 8
add esp,8
cmp ebx, 4
jne loop
popad
ret
答案 0 :(得分:0)
您没有向function
传递任何参数,因此可能比较总是错误的,eax
保持不变。它的第一次应该是零,从那时起它是printf
的返回值,很可能是8
。您可能希望将ebx
作为参数传递给function
,并保留eax
到printf
或在function
中明确归零。例如:
main:
pushad
mov eax,0
mov ebx,2
loop:
add ebx,1
push ebx ; pass as argument
call function
add esp, 4 ; free argument
push eax ; save eax
push eax
push something ; this is string db...
call printf ; always print number 8
add esp,8
pop eax ; restore eax
cmp ebx, 4
jne loop
popad
ret
PS:学习使用调试器来发现自己的错误。
以下是function
返回0
或1
的其他版本:
function:
mov edx, [esp +4]
cmp edx, 3
je set
mov eax, 0
ret
set:
mov eax,1
ret
main:
pushad
mov ebx,2
loop:
add ebx,1
push ebx ; pass as argument
call function
add esp, 4 ; free argument
push eax
push something ; this is string db...
call printf ; always print number 8
add esp,8
cmp ebx, 4
jne loop
popad
ret