我对如何从汇编语言中的方法返回值感到困惑。据我所知,eax寄存器用于保存要返回的结果。
举个例子,说我的结果是4,我使用:
mov eax, 4
我现在有4个eax,我想要返回这个方法。有什么我需要做的或指令ret
会自动返回结果吗?
问题是我不知道寄存器eax
有什么特别之处,因为当我使用ret
时我会回到调用者,调用者可以自由访问任何寄存器我存储结果,为什么我不能仅使用ebx
或ecx
来存储结果?
答案 0 :(得分:9)
结果存储在eax
中的原因是约定;您可以决定将其存储在您喜欢的任何寄存器中。但是,函数的调用者可能会认为返回值的内容存储在eax
中。这也意味着您在调用ret
时无需进行任何额外的工作。
答案 1 :(得分:4)
您所描述的是至少Microsoft编译器使用的convention。 eax
本身并没有什么特别之处。如果汇编语言函数由使用常规调用约定之一编译的C / C ++代码调用,则期望结果在eax
中传递。
ret
仅将控制权返回到调用函数的位置。没有寄存器受到影响(当然除ESP
和指令指针外)。