【发布时间】:2014-04-02 01:12:48
【问题描述】:
我是一名 CS 学生,正在编写 Intel x86-64 程序集,使用 nasm 进行编译,并在以 Ubuntu 12.04 作为客户操作系统的 Core i7 处理器上运行。有没有人有一个如何使用XSAVE 和XRSTOR 的例子?我已经多次阅读英特尔架构软件开发人员手册中关于XSAVE 的部分。我尝试在 C++ 中实现xsave,然后反汇编二进制文件以了解它在做什么。当然,我已经在 Internet 上搜索了示例。如有任何建议,我们将不胜感激。
【问题讨论】:
-
您是在问
XSAVE和XRSTOR是做什么的,或者如何使用它们? -
嗨杰森,感谢您的询问。我对实现更感兴趣。我和我的同学已经厌倦了 100 行左右的代码来备份注册表并在每个作业中恢复它们。更不用说 XSAVE 可能比挑选要备份的注册表更有效。
-
该实现是特定于硬件的,但通常它在 fpu 和 simd 寄存器中获取值,并将它们的值存储/恢复到内存中。您必须阅读 cpuid 信息以了解有关您的 cpu 存储内容和位置的详细信息。它主要用于操作系统以支持进程的快速上下文切换。这有帮助吗?
-
谢谢。我了解基于 CPUID 标志检查 XSAVE 支持的过程,但我不知道如何实现 XSAVE。
-
你的意思是执行指令吗?您要在内存中保存/恢复哪些寄存器?你的代码是用户空间还是内核空间?我不确定您所说的 implement 是什么意思。这些指令已经在硬件中实现。