这个问题是指:

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/

10-11 18:16