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

ddr*_*er1 7 x86 assembly intel

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

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

mov eax, 4
Run Code Online (Sandbox Code Playgroud)

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

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

Jas*_*ers 10

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


Pon*_*gge 5

您所描述的是至少 Microsoft 编译器使用的约定eax本身没有什么特别的。如果您的汇编语言函数是由使用正常调用约定之一编译的 C/C++ 代码调用的,它将期望将结果传入eax.

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

  • @先生。Shickadance:虽然不完全是传统的(你不能从用户代码中调用它们),但一些 Delphi 编译器助手使用 ZF 返回一个布尔结果。 (2认同)