我希望获取两个
double
变量,将它们传递给函数,减去它们,返回它们并打印结果。
我的例子:
#include <stdio.h>
extern double dev(double a, double b);
int main() {
double a = 10.2;
double b = 3.6;
double result = dev(a, b);
printf("%.2f", result);
return 0
}
阿斯姆:
section .text
global dev
dev:
movsd xmm0, [rdi]
movsd xmm1, [rsi]
subsd xmm0, xmm1
ret
它可以编译,但是当我尝试运行代码时,我得到一个
Segmentation fault (core dumped)
我相信我已经发现了问题,但我只是不知道如何解决它。
double
是一个 64 位值。而 xmm
是一个 128 位寄存器。我尝试返回 128 位似乎是合乎逻辑的(至少对我来说),但我看不出有什么办法可以做到这一点。我尝试过movsd rax xmm0
但同样的问题
优化
dev:
subsd xmm1, xmm0
movaps xmm0, xmm1
ret
未优化
dev:
push rbp
mov rbp, rsp
movsd QWORD PTR [rbp-8], xmm0
movsd QWORD PTR [rbp-16], xmm1
movsd xmm0, QWORD PTR [rbp-16]
subsd xmm0, QWORD PTR [rbp-8]
pop rbp
ret