调用子程序时汇编堆栈

时间:2012-09-12 17:07:20

标签: assembly x86

所以,如果我有这样的东西

rout:
pop eax
pop ecx
add ecx,2
push ecx
ret

然后只是

push 3
call rout

我注意到第一次弹出是不会像我想的那样给我3值,而是在第一次弹出后得到它。

我的问题是,在我调用时,推送到堆栈的最后一个值是什么? (在本例中注册eax)

1 个答案:

答案 0 :(得分:1)

假设您正在使用80x86架构:

它是proc的返回地址(如果它是近距离调用)。如果是NEAR呼叫,下一个POP将为您提供值(3),如果是FAR呼叫,则为您提供返回地址的段。

检查this网站是否存在发布CALL时实际发生的伪代码。