gpt4 book ai didi

c++ - 来自 C++ 的 FPU 三角函数调用

转载 作者:行者123 更新时间:2023-11-28 06:01:05 25 4
gpt4 key购买 nike

我正在尝试在 VS2013 (Win10 x64) 下使用 FPU 和 masm 来获取正弦和余弦。标题是:

#pragma once

extern "C" double fpu_sincos(const double a_d_angle, double& a_sin, double& a_cos);

extern "C" double fpu_sin(const double a_d_angle);

extern "C" double fpu_cos(const double a_d_angle);

这些函数从常规 Visual C++ 代码中调用。虽然第一个函数工作正常并且我确实通过引用参数获得了正确的值,但其他两个函数给出了不好的结果。 .asm 文件包含:

    PUBLIC  fpu_sincos
PUBLIC fpu_sin
PUBLIC fpu_cos

_TEXT SEGMENT
a$ = 32
fpu_sincos PROC
movsd QWORD PTR [rsp+8], xmm0
sub rsp, 24
fld QWORD PTR a$[rsp]
fsincos
fstp QWORD PTR [r8]
fstp QWORD PTR [rdx]
add rsp, 24
ret 0
fpu_sincos ENDP
_TEXT ENDS

_TEXT SEGMENT
a$ = 8
fpu_sin PROC
movsd xmm0, QWORD PTR a$[rsp]
fld QWORD PTR a$[rsp]
fsin
fstp QWORD PTR a$[rsp]
movq xmm0, QWORD PTR a$[rsp]
ret 0
fpu_sin ENDP
_TEXT ENDS

_TEXT SEGMENT
a$ = 8
fpu_cos PROC
movsd xmm0, QWORD PTR a$[rsp]
fld QWORD PTR a$[rsp]
fcos
fstp QWORD PTR a$[rsp]
movq xmm0, QWORD PTR a$[rsp]
ret 0
fpu_cos ENDP
_TEXT ENDS

END

我花了一些时间来解决这个问题,但我不熟悉汇编语言,所以我无法获胜:/需要一些帮助!如果有人逐行解释它会很棒。

谢谢。

最佳答案

存储xmm0的操作数顺序错误。

两个都改

movsd   xmm0, QWORD PTR a$[rsp]

movsd   QWORD PTR a$[rsp], xmm0

关于c++ - 来自 C++ 的 FPU 三角函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33276906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com