我有递归功能的乐趣。当我推送东西时,我的eax工作不正常。值不正确。我必须推edx,因为我需要递归函数的参数。
fun:
mov edx, [esp+4]
sub edx, 2
push edx
call fun
add esp, 4 ; not work ok
mov ecx,eax
sub edx,1
push edx
call fun
pop edx ;this too not work ok
add eax,ecx
ret
当我推送东西时,eax无法正常工作。我怎么能解决这个问题,如果我想推送edx和eax仍然可以正常工作。
答案 0 :(得分:1)
您希望保留edx
和ecx
,但它们当然会被下一次递归覆盖。
你可能想尝试这样的事情:
fun:
mov edx, [esp+4]
sub edx, 2
push edx
call fun
add esp, 4
mov edx, [esp+4] ; reload argument
sub edx,1
push eax ; save current result
push edx
call fun
add eax, [esp+4] ; add saved result
add esp, 8 ; remove argument and saved result
ret
当然,您需要添加停止递归的代码;)