Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将xmm寄存器推入堆栈而不影响标志_Assembly_X86_X86 64 - Fatal编程技术网

Assembly 将xmm寄存器推入堆栈而不影响标志

Assembly 将xmm寄存器推入堆栈而不影响标志,assembly,x86,x86-64,Assembly,X86,X86 64,将xmm寄存器移动到堆栈中可以通过 sub rsp,16 movdqu xmmword [rsp], xmm0 这里的问题是子添加修改rflags push-pop的好处在于它们不会修改RFLAG 如何在不使用昂贵的pushfq-popfq的情况下实现这一点 我希望有一个支持K10/Conroe的解决方案。使用lea-rsp[rsp-16]。也就是说,通常,在到达必须保留标志以避免这种情况的点之前,您会减少堆栈指针。这是问题的实际答案:)请注意,您也可以使用lahf和sahf来仅保存算术标志

将xmm寄存器移动到堆栈中可以通过

sub rsp,16
movdqu  xmmword [rsp], xmm0
这里的问题是
子添加
修改rflags

push-pop
的好处在于它们不会修改RFLAG

如何在不使用昂贵的
pushfq-popfq
的情况下实现这一点


我希望有一个支持K10/Conroe的解决方案。

使用
lea-rsp[rsp-16]
。也就是说,通常,在到达必须保留标志以避免这种情况的点之前,您会减少堆栈指针。这是问题的实际答案:)请注意,您也可以使用
lahf
sahf
来仅保存算术标志,以防使用完整的
pushf
/
popf
组合太多昂贵。使用
learsp[rsp-16]
。也就是说,通常,在到达必须保留标志以避免这种情况的点之前,您会减少堆栈指针。这是问题的实际答案:)请注意,您也可以使用
lahf
sahf
来仅保存算术标志,以防使用完整的
pushf
/
popf
组合太多昂贵的。