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