【问题标题】:Calling ASM x64 function from C (double), GAS从 C (double)、GAS 调用 ASM x64 函数
【发布时间】:2016-04-24 10:24:02
【问题描述】:

我在 ASM 和 C 中得到了这个非常简单的函数。我想从 C 代码中调用 ASM 函数以获得双精度。我认为 ASM 的返回值应该存储在 XMM0 中,但实际上我的返回值是从 rax 获取的,或者如果 rax 没有设置,我得到 1。

C 代码:

#include <stdio.h>

int main() {
double a = 3.14;
double b = add(a);
printf("%lf\n", b);

return 0;
}

ASM 功能:

.type add, @function

.globl add
add:

#movq $1, %rax
addsd %XMM0, %XMM0

ret

它有什么问题?感谢所有提示。

【问题讨论】:

    标签: c function assembly 64-bit call


    【解决方案1】:

    你还没有告诉编译器函数接收或返回什么。隐式声明将使其假定返回值为 int。

    编译器应该对此发出警告。如果没有,请打开警告。

    你应该添加

    extern double add(double val);
    

    所以编译器知道发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多