推送参数的递归函数不正确

时间:2014-11-19 19:14:23

标签: assembly x86

我有递归功能的乐趣。当我推送东西时,我的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仍然可以正常工作。

1 个答案:

答案 0 :(得分:1)

您希望保留edxecx,但它们当然会被下一次递归覆盖。

你可能想尝试这样的事情:

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

当然,您需要添加停止递归的代码;)