XGETBV
获取扩展 控制寄存器 的值
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 01 D0 | XGETBV | ZO | 有效 | 有效 | 将ECX指定的XCR读入EDX:EAX. |
实测开销
正在从 arch-data 加载实测数据...
说明
将ECX登记簿中指定的扩展的控制寄存器(XCR)的内容读入登记簿EDX:EAX. (关于支持英特尔64架构的处理器,RCX的高阶32位被忽略. ) EDX寄存器装入了XCR的高阶32位,EAX寄存器装入了低阶32位. (关于支持Intel 64架构的处理器,RAX和RDX的每个高序32位被清除. ) 如果在正在读取的XCR中执行的比特不到64位,那么返回到EDX:EAX中未执行的比特位置的数值是未定义的.
XCR0在任何支持XGETBV指令的处理器上都得到支持. 如果 CPUID.0DH.01H:EAX.XGETBV1[2] = 1,则执行 XGETBV 与 ECX = 1 返回 EDX:EAX 逻辑-AND的XCR0 和 XINUSE 状态组件位图的当前值. 这允许软件发现XSAVEOPT和XSAVES使用的init优化状态. 参见第13章"管理状态使用XSAVE Feature Set",Intel(R)64和IA-32架构软件开发者手册第1卷.
对ECX使用其他任何值都会导致一般保护(#GP)例外.
行动
EDX:EAX := XCR[ECX];受影响的旗帜
None.
Intel C/C++ 内在编译器
XGETBV unsigned __int64 _xgetbv( unsigned int);异常
保护模式
| #GP(0) 如果一个无效的XCR在ECX中被指定(包括ECX=1如果CPUID.0DH.01H:EAX.XGETBV1[2]=0). | |
#UD | 若CPUID.01H:ECX[26,"XSAVE"]=0. 若CR4.OSXSAVE[bit 18]=0. 若使用LOCK前缀. |
实地址模式
| #GP(0) 如果一个无效的XCR在ECX中被指定(包括ECX=1如果CPUID.0DH.01H:EAX.XGETBV1[2]=0). | |
#UD | 若CPUID.01H:ECX[26,"XSAVE"]=0. 若CR4.OSXSAVE[bit 18]=0. 若使用LOCK前缀. |
虚拟 8086 模式
| 与保护模式中的例外相同. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
| 与保护模式中的例外相同. |