这个问题与以下内容相关:
Intel x86-64 XSAVE/XRSTOR
这个问题是关于如何使用XSAVE和XRSTOR。不幸的是,由于这个网站上非常奇怪的声望系统,我不能简单地在那个帖子上问我的问题,我必须提出一个新的问题。有一个人回答了这个问题,但没有使用Intel x86命令XSAVE和XRSTOR。所以,实际上,这个问题没有得到解答。
有没有办法提供一个单独的示例,说明如何使用XSAVE和XRSTOR,以便我们不必逐个将每个寄存器复制到内存中以保存它。
现在我们必须:
所以,我应该能够(例如)在.data段中仅保留内存,如下所示:
并让它保存它可以保存的所有寄存器。
不幸的是,这样做行不通。该代码无法汇编,并显示以下错误:
“error: invalid combination of opcode and operands”
有没有办法提供一个单独的示例,说明如何使用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
并让它保存它可以保存的所有寄存器。
不幸的是,这样做行不通。该代码无法汇编,并显示以下错误:
“error: invalid combination of opcode and operands”
__asm__ __volatile__(".byte " REX_PREFIX "0x0f,0xae,0x27"
- osgxxsave [something]
,任意加载edx
和eax
- harold