Assembly 调用子例程时的程序集堆栈

Assembly 调用子例程时的程序集堆栈,assembly,x86,Assembly,X86,所以如果我想要这样的东西 rout: pop eax pop ecx add ecx,2 push ecx ret 那就 push 3 call rout 我注意到,第一次弹出不会像我想的那样给我值3,而是在第一次弹出后得到它 我的问题是,调用堆栈时最后推送到堆栈的值是什么?(在本例中的register eax中)假设您使用的是80x86体系结构: 它是进程的返回地址(如果是临近调用)。如果是近距离呼叫,则下一个POP将为您提供值(3),如果是远距离呼叫,则返回地址的段将为您提供值 检查站点

所以如果我想要这样的东西

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

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


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

假设您使用的是80x86体系结构:

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

检查站点,了解发出呼叫时实际发生的情况的伪代码