簡體   English   中英

將XMM寄存器推入堆棧

[英]Push XMM register to the stack

有沒有辦法將打包的雙字整數從XMM寄存器推送到堆棧? 然后在需要時彈出它?

理想情況下,我正在尋找像PUSH或POP這樣的通用寄存器,我已經檢查了英特爾手冊,但我要么錯過了命令,要么就沒有...

或者我是否必須將值解壓縮到通用寄存器然后推送它們?

不,在x86下沒有這樣的asm指令,但你可以這樣做:

//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

在這種情況下,您還可以使用Daniels解決方案!

我建議為此使用單獨的16位對齊堆棧,因此您可以使用movdqa而不是movdqu。 這兩條指令的執行時間略有不同!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM