Intel 手册指出,需要检查 CPUID.01:EDX[5] 以查看 RDMSR 和 WRMSR 指令是否可用。如果我使用 CPUID 已经发现某个 MSR(在我的情况下是 IA32_EFER.NXE)的特定位受支持,这是否自动意味着 RDMSR 和 WRMSR 也受支持。从逻辑上讲,应该是这样,但我没有看到明确说明。
Intel 手册指出,需要检查 CPUID.01:EDX[5] 以查看 RDMSR 和 WRMSR 指令是否可用。如果我使用 CPUID 已经发现某个 MSR(在我的情况下是 IA32_EFER.NXE)的特定位受支持,这是否自动意味着 RDMSR 和 WRMSR 也受支持。从逻辑上讲,应该是这样,但我没有看到明确说明。
我认为可以安全地假设 MSR 存在特征位暗示
rdmsr
了wrmsr
这些指令的 CPUID 特征位。我只能想象模拟的 Deathstation 9000 x86 CPU 会故意设置这样的陷阱,但这种情况不会偶然发生。支持 NX 的真实 CPU 也足够新,可以拥有 MSR。在真实 CPU 上,您甚至可以做出假设,例如 SSE4.1 暗示 SSSE3,因为英特尔编号的 SIMD 扩展已经是增量的。(我说“编号”是为了排除 AVX-512 VP2INTERSECT 之类的东西,它不建立在任何其他东西之上,实际上已经从具有一些较新的 AVX-512 功能的某些 CPU 中消失了。)
没有任何 MSR 的 CPU 不会为该功能设置 CPUID 功能位,因为如果没有 MSR,该功能实际上什么也不做。