我在Linux 64位上将我的汇编函数与GCC相关联。我使用的库是math.h中的TAN。我用它链接;
gcc -s prog.o -o prog -lm
程序有效,但返回值为0.0000000(3.4弧度)。我在汇编代码中使用extrn;
extrn tan
extrn printf
我使用xmm0将参数(以弧度为单位)传递给TAN函数。现在我不确定哪个寄存器用于从TAN返回值。是xmm0,st0还是RAX?我找不到合适的参考资料。
答案 0 :(得分:0)
对于我的gcc,它是xmm0。
这是一个C程序:
#include <stdio.h>
#include <math.h>
int main () {
double x = tan(M_PI/4.0);
// RESULT: x=1.000000
printf ("x=%f\n", x);
return 0;
}
这里有相应的&#34; gcc -S&#34;:
.Ltext0:
.section .rodata
.LC1:
.string "x=%f\n"
.text
.globl main
.type main, @function
main:
.LFB0:
.file 1 "x.cpp"
.loc 1 4 0
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
.LBB2:
.loc 1 6 0
movabsq $4607182418800017407, %rax
movq %rax, -8(%rbp)
.loc 1 8 0
movq -8(%rbp), %rax
movq %rax, -24(%rbp)
movsd -24(%rbp), %xmm0
movl $.LC1, %edi
movl $1, %eax
call printf
.loc 1 9 0
movl $0, %eax
.LBE2:
.loc 1 10 0
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc