12
是否有将XMM寄存器中的压缩双字整数推送到堆栈的方法?然后在需要时弹出回来?
将XMM寄存器推入堆栈
理想我正在寻找像PUSH或POP的通用寄存器,我已经检查了英特尔的手册,但我要么错过了命令,或者没有一个......
否则我将不得不将值解压到通用寄存器然后推送它们?
是否有将XMM寄存器中的压缩双字整数推送到堆栈的方法?然后在需要时弹出回来?
将XMM寄存器推入堆栈
理想我正在寻找像PUSH或POP的通用寄存器,我已经检查了英特尔的手册,但我要么错过了命令,或者没有一个......
否则我将不得不将值解压到通用寄存器然后推送它们?
没有,有没有这样的下一个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
在这种情况下,你也可以用丹尼尔斯的解决方案!
感谢您的回答。基于此(你的解决方案并不完全正常),我想出了一个工作的(见我的问题)。仍然被标记为答案... – 2012-04-15 12:46:08
@Daniel Gruszczyk:是的,你也可以使用ebp,但要确保ebp寄存器设置正确。如果ebp设置不正确,请记住其他推送或调用指令可能会覆盖堆栈上的数据。 – 2012-04-15 13:10:24
可能值得编辑与你最终工作的答案,只是为了帮助看到这个问题的未来用户。 – 2012-04-15 13:13:34