我在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
它出什么问题了?欣赏所有提示。
您尚未告诉编译器函数接受或返回的内容。隐式声明将使其假定为int的返回值。
编译器应对此发出警告。如果不是,请打开警告。
您应该添加
extern double add(double val);
所以编译器知道发生了什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句