assembly - 将 XMM 寄存器压入堆栈

标签 assembly x86 simd sse

有没有办法将压缩双字整数从 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 解决方案!

关于assembly - 将 XMM 寄存器压入堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161911/

相关文章:

linux - 如何禁用浮点单元 (FPU)?

hash - 如果我散列一堆散列,散列冲突的可能性有多大?

linux - basic linux x86 assembly minimum number 返回不正确

c# - 使用 OllyDebug 破解 C# 应用程序

c - 为什么会发生字节溢出以及它们的作用是什么?

assembly - 该汇编语言代码是什么意思?

无法执行系统调用 "execve"

c - 缓冲区溢出 : EIP and jump correctly set but segfault

当我使用 AVX 功能时崩溃

c++ - 如何使用线性代数的C++模板库Eigen?