2014-03-28 25 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)指令返回。

相關問題