按XMM寄存器堆栈(Push XMM register to the stack)

2019-07-28 23:42发布

有没有推到堆栈从XMM寄存器打包双整数的方法吗? 并在需要时再后来就突然回来?

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

或者将我必须解压值通用寄存器,然后把他们?

Answer 1:

没有,有没有这样的下一个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

在这种情况下,你也可以用丹尼尔斯的解决方案!



Answer 2:

我建议使用一个单独的16位对齐栈为了这个目的,所以你可以使用的,而不是MOVDQA MOVDQU。 有一个在执行时间这两个指令之间细微的差别!



文章来源: Push XMM register to the stack