更改所有功能(NASM)中的值使用

时间:2014-11-19 15:23:09

标签: assembly x86 nasm

我有累加器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

1 个答案:

答案 0 :(得分:0)

您没有向function传递任何参数,因此可能比较总是错误的,eax保持不变。它的第一次应该是零,从那时起它是printf的返回值,很可能是8。您可能希望将ebx作为参数传递给function,并保留eaxprintf或在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返回01的其他版本:

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