C 函数的返回值到 ASM

发布于 2024-11-10 06:13:05 字数 331 浏览 4 评论 0原文

我正在尝试从 ASM 中调用一个函数。我知道如何调用它,但我无法找到如何获取该函数的返回值。示例如下:

C 代码:

int dummy() {  
    return 5;  
}  

(N)ASM 代码:

dummyFunction:
    call dummy
    ;grab return into eax
    inc eax ; eax should be 6 now
    ret  

有什么想法吗?

I'm trying to call a function from within ASM. I know how to call it, but i'm having trouble finding how to get the return value of this function. An example follows:

C code:

int dummy() {  
    return 5;  
}  

(N)ASM code:

dummyFunction:
    call dummy
    ;grab return into eax
    inc eax ; eax should be 6 now
    ret  

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何必那么矫情 2024-11-17 06:13:05

返回值位于eax中。如果您从 asm 调用了 C 函数,则可以从 eax 读取返回值。如果您尝试从 asm 函数返回到 C,请将预期的返回值存储在 eax 中。

返回浮点值、long long 值或结构会变得更加复杂,因此请询问您是否需要这些,有人(也许是我)会帮助您。

The return value is in eax. If you've called a C function from asm, you can read the return value from eax. If you're trying to return from an asm function to C, store the intended return value in eax.

Things get a little bit more complicated for returning floating point values, long long values, or structures, so ask if you need that and someone (maybe me) will help you.

故事未完 2024-11-17 06:13:05

尽管答案足以回答OP的问题,但以下摘录涵盖了大多数情况 DJGPP 的联机帮助页 以确保完整性:

返回值

  • 整数(最多 32 位的任意大小)和指针在 %eax 寄存器中返回。
  • 浮点值在 387 栈顶寄存器 st(0) 中返回。
  • long long int 类型的返回值在 %edx:%eax 中返回(%edx 中最高有效的单词和最低有效单词)在 %eax 中很重要)。
  • 返回结构很复杂并且很少有用;尽量避免它。 (请注意,这与返回指向结构的指针不同。)

如果您的函数返回void(例如无值),则不会使用这些寄存器的内容。

Although the answers are sufficient to answer the OP's question, here's an extract covering most cases from DJGPP's manpage for completeness:

Return Value

  • Integers (of any size up to 32 bits) and pointers are returned in the %eax register.
  • Floating point values are returned in the 387 top-of-stack register, st(0).
  • Return values of type long long int are returned in %edx:%eax (the most significant word in %edx and the least significant in %eax).
  • Returning a structure is complicated and rarely useful; try to avoid it. (Note that this is different from returning a pointer to a structure.)

If your function returns void (e.g. no value), the contents of these registers are not used.

吻泪 2024-11-17 06:13:05

这取决于平台和调用约定,但通常,如果返回值是基本类型或指针,则应该已经在 eax 中返回,并且在浮点寄存器 st(0)< 中/code> 如果它是浮点类型,我想。

It depends on the platform and the calling convention, but usually, the return value should already be returned in eax if it's a primitive type or pointer and in the floating point register st(0) if it's a floating point type, I think.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文