2014-03-28 23 views
1

我需要编写函数,该函数应该使用SSE2将弧度转换为度数。 这是分配。我不知道该怎么做。MASM32函数将两个双精度数字相乘并返回它

_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 

主要问题: 如何返回64位(双)x的内容mm0寄存器,以便它与给定的声明一起工作?

+1

您应该使用'movsd'加载参数,并且最后缺少'ret',除非'ENDP'将它放在那里。否则它应该没问题,你遇到了什么问题? – Jester

+0

将C代码构建为64位或32位代码? – Michael

+0

它是x86。而且我没有完成该功能,因为我不知道如何从asm __stdcall函数返回double。正常的32位数字在eax中返回。但双(64位)? – Hooch

回答

3

得到它的工作:

.DATA 
    _180_PI dq 57.2957795130823208767981548141 
.CODE 

RadToDegAsm PROC rad: QWORD 
    LOCAL returnValue: QWORD 
    movsd xmm0, rad 
    mulsd xmm0, _180_PI 
    movsd returnValue, xmm0 
    fld return 
    ret 
RadToDegAsm ENDP 

双值通过浮点寄存器(FLD)指令返回。

相关问题