[英]Why move 32-bit register to stack then from stack to xmm register?
[英]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.