如何在彙編器中返回64位值? 我嘗試這樣做:大會64位:如何返回一個雙精度值?
C-程序:
#include <stdio.h>
double result=0;
double a = 10;
extern double func(double a);
int main() {
result = func(a);
printf("result: %f\n", result);
return 0;
}
大會:
section .bss
x: resq 1
section .text
global func
func:
movq qword[x],xmm0
fld qword [x]
fld qword [x]
fadd
movq xmm0,qword[x]
ret
它應該返回20.0而是它始終是10.0 我是怎麼了?
您從不存儲結果。順便說一句,使用SSE而不是x87可能會更簡單。 – ElderBug
Elderbug是正確的。 'fadd'添加st(0)和st(1)將值存儲在'st(0)'中。您不會使用堆棧頂部的值更新[x]中的值。在返回之前,也不要將額外的值從FPU堆棧彈出(如果您調用此函數5次,這會導致FPU堆棧溢出)。正如Elder指出的,除非給定的任務要求你這樣做,否則你可以使用SSE而不是FPU。 –
代碼也可以簡化,但我很好奇你在編譯32位或64位代碼嗎?我假設你得到的結果是,你的可執行文件是64位的。 –