2012-04-15 204 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