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

问题描述 投票:6回答:2

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

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

mov eax, 4

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

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

assembly x86 intel ia-32
2个回答
9
投票

结果存储在eax的原因是惯例;您可以决定将其存储在您喜欢的任何寄存器中。但是,函数的调用者可能会假设返回值的内容存储在eax中。这也意味着你在调用ret时不需要做任何额外的工作。


4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.