将XMM寄存器推入堆栈

Dan*_*zyk 13 x86 assembly sse simd

有没有办法将打包的双字整数从XMM寄存器推送到堆栈?然后在需要时弹出它?

理想情况下,我正在寻找像PUSH或POP这样的通用寄存器,我已经检查了英特尔手册,但我要么错过了命令,要么没有一个...

或者我是否必须将值解压缩到通用寄存器然后推送它们?

GJ.*_*GJ. 21

不,在x86下没有这样的asm指令,但你可以这样做:

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

//Pop xmm0
movdqu  xmm0, dqword [esp]
add     esp, 16
Run Code Online (Sandbox Code Playgroud)

编辑:

高级代码示例是直接推送/弹出仿真.

如果您在堆栈上使用其他局部变量,则ebp必须首先正确设置寄存器,如:

push ebp
mov  ebp, esp
sub  esp, LocaStackVariablesSize
//... your code
mov  esp, ebp
pop  ebp  
ret
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您还可以使用Daniels解决方案!

  • 可能值得编辑你最终工作的答案,只是为了帮助看到这个问题的未来用户. (2认同)