将结果返回到eax(IA-32汇编语言)

时间:2011-05-05 12:38:12

标签: assembly x86 intel ia-32

我对如何从汇编语言中的方法返回值感到困惑。据我所知,eax寄存器用于保存要返回的结果。

举个例子,说我的结果是4,我使用:

mov eax, 4

我现在有4个eax,我想要返回这个方法。有什么我需要做的或指令ret会自动返回结果吗?

问题是我不知道寄存器eax有什么特别之处,因为当我使用ret时我会回到调用者,调用者可以自由访问任何寄存器我存储结果,为什么我不能仅使用ebxecx来存储结果?

2 个答案:

答案 0 :(得分:9)

结果存储在eax中的原因是约定;您可以决定将其存储在您喜欢的任何寄存器中。但是,函数的调用者可能会认为返回值的内容存储在eax中。这也意味着您在调用ret时无需进行任何额外的工作。

答案 1 :(得分:4)

您所描述的是至少Microsoft编译器使用的conventioneax本身并没有什么特别之处。如果汇编语言函数由使用常规调用约定之一编译的C / C ++代码调用,则期望结果在eax中传递。

ret仅将控制权返回到调用函数的位置。没有寄存器受到影响(当然除ESP和指令指针外)。