【发布时间】:2014-03-28 17:46:23
【问题描述】:
我需要编写应该使用 SSE2 将弧度转换为度数的函数。 这是为了分配。我不知道该怎么做。
_180_PI 是等于 180/3.141592 的数字...
我的函数只需要返回return rad * _180_PI
这个函数在 dll 中,它是这样声明的:
__declspec(dllexport) double __stdcall RadToDegAsm(double rad);
我有:
.DATA
_180_PI dq 57.2957795130823208767981548141
.CODE
RadToDegAsm PROC rad: QWORD
movupd xmm0, rad
mulsd xmm0, _180_PI
;I need to somehow return it
RadToDegAsm ENDP
主要问题: 如何返回 xmm0 寄存器的 64 位(双)内容,以便它适用于给定的声明?
【问题讨论】:
-
你应该使用
movsd来加载参数并且你在最后缺少一个ret,除非ENDP把它放在那里。否则应该没问题,请问您遇到了什么问题? -
C 代码是构建为 64 位还是 32 位代码?
-
它是 x86。而且我没有完成那个函数,因为我不知道如何从 asm __stdcall 函数返回 double 。在 eax 中返回正常的 32 位数字。但是双倍(64 位)?
标签: assembly x86 sse masm32 sse2