XGETBV

获取扩展 控制寄存器 的值

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 01 D0XGETBVZO有效有效将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 位模式
与保护模式中的例外相同.

来源