2012-04-15 203 views
12

是否有將XMM寄存器中的壓縮雙字整數推送到堆棧的方法?然後在需要時彈出回來?
將XMM寄存器推入堆棧

理想我正在尋找像PUSH或POP的通用寄存器,我已經檢查了英特爾的手冊,但我要麼錯過了命令,或者沒有一個......

否則我將不得不將值解壓到通用寄存器然後推送它們?

回答

20

沒有,有沒有這樣的下一個x86的指令彙編,但你可以這樣做:

//Push xmm0 
sub  esp, 16 
movdqu dqword [esp], xmm0 

//Pop xmm0 
movdqu xmm0, dqword [esp] 
add  esp, 16 

編輯:

上的代碼示例是直接的推/流行仿真。

在您使用堆棧還有其他的局部變量,比ebp寄存器必須區分首先正確設置,如:

push ebp 
mov ebp, esp 
sub esp, LocaStackVariablesSize 
//... your code 
mov esp, ebp 
pop ebp 
ret 

在這種情況下,你也可以用丹尼爾斯的解決方案!

+0

感謝您的回答。基於此(你的解決方案並不完全正常),我想出了一個工作的(見我的問題)。仍然被標記爲答案... – 2012-04-15 12:46:08

+0

@Daniel Gruszczyk:是的,你也可以使用ebp,但要確保ebp寄存器設置正確。如果ebp設置不正確,請記住其他推送或調用指令可能會覆蓋堆棧上的數據。 – 2012-04-15 13:10:24

+2

可能值得編輯與你最終工作的答案,只是爲了幫助看到這個問題的未來用戶。 – 2012-04-15 13:13:34