这个问题是指:
Intel x86-64 XSAVE/XRSTOR
这个问题是关于如何使用XSAVE和XRSTOR的。不幸的是,由于该站点上的信誉系统非常奇怪,我不能简单地在那个线程上问我一个问题,我必须提出一个新问题。一个人回答了这个问题,但没有使用Intel x86命令XSAVE和XRSTOR。所以,实际上,这个问题没有得到回答。
有没有人可以通过某种方式举一个如何使用XSAVE和XRSTOR的示例,这样我们就不必将每个寄存器都单独复制到内存中来保存它。
现在我们必须:
copy xmm0 to memory, copy xmm1 to memory... and so on
然后:
right shift ymm0 64 bytes, right shift ymm1 64 bytes... and so on
然后:
repeat 3 times.
因此,要保存ymm寄存器,我们需要大约100条命令。
然后还原它们大致相同。
现在,看来Intel x86程序集具有立即执行所有操作的指令。 Intel x86语法中的命令是:
xsave [mem], flag
和
xrstor [mem], flag
因此,我应该能够(例如)仅在.data段中保留内存,如下所示:
regsave times 1024 dq 0
然后说
xsave [regsave], flag
什么是国旗?在庞大的汇编手册(没有示例)中,它指出可以保存的任何寄存器都将与标志进行“与”操作,以确定将保存哪些寄存器。它说标志是32位。所以我应该只能说:
xsave [regsave], 0xFFFFFFFF
并保存所有可以保存的寄存器。
不幸的是,这不起作用。该代码将无法汇编并给出错误:
“错误:操作码和操作数的无效组合”
最佳答案
XSAVE / XRSTOR没有标志的参数,只有内存位置,
规格是:
XSAVE mem
XRSTOR mem
EDX:EAX中的值指定了要保存/恢复到内存的组件。
关于assembly - 使用XSAVE和XRSTOR的Intel x86,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22591724/