FLDENV

装入 x87 FPU 环境

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
D9 /4FLDENV m14/28byte有效有效从m14字节或m28字节装入FPU环境.

实测开销

正在从 arch-data 加载实测数据...

说明

将完整的x87 FPU操作环境从内存装入FPU登记册. 源操作数指定了内存中操作环境数据的第一个字节. 此数据一般通过FSTENV或FNSTENV指令写入指定的内存位置.

FPU操作环境包括FPU控制词,状态词,标记词,指令指针,数据指针,以及最后一个操作码. Intel(R)64和IA-32架构软件开发者手册第1卷中的图8-9至8-12,根据处理器的操作模式(受保护或真实)和目前的操作数大小属性(16位或32位),显示装入环境的内存布局. 在虚拟 8086 模式中,使用真实模式布局.

FLDENV指令应与对应的FSTENV/FNSTENV指令以相同的操作模式执行.

如果在新的 FPU 状态单词中设置了一个或多个未卸载的例外旗帜,则在下个 浮点 指令执行时将生成 浮点 例外(除无等待 浮点 指令外,参见Intel(R)64第8章中题为"软件例外处理"的章节和IA-32架构软件开发者手册第1卷). 为避免在装入新环境时生成例外, 清除正在装入的 FPU 状态词中的所有例外标记 。

如果在执行本指令期间发生页断或限制断层,断层处理者看到的x87 FPU登记册状态可能与从内存中加载的状态不同. 在这种情况下,断层处理者应忽略x87 FPU登记簿的地位,断层的句柄,并返回. FLDENV指令随后将完成x87 FPU登记册的加载,不会导致上下文不一致.

此指令的操作在非64位模式和64位模式中是相同的.

行动

FPUControlWord := SRC[FPUControlWord];
FPUStatusWord := SRC[FPUStatusWord];
FPUTagWord := SRC[FPUTagWord];
FPUDataPointer := SRC[FPUDataPointer];
FPUInstructionPointer := SRC[FPUInstructionPointer];
FPULastInstructionOpcode := SRC[FPULastInstructionOpcode];

FPU Flags Affected

The C0, C1, C2, C3 flags are loaded.

浮点 例外

无;然而,如果在状态单词中装入一个未装模作样的例外,则在下一个"等待"浮点指令执行时生成.

异常

保护模式
#GP(0)如果 内存操作数 有效地址位于 CS,DS,ES,FS 或 GS 区段限制之外,则使用 DS,ES,FS 或 GS 寄存器访问内存,并包含 NULL 段选择子.
#SS(0)如果 内存操作数 的有效地址在 SS 段限制之外。
#NMCR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误.
#AC(0)如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用.
#UD如果使用 LOCK 前缀 。
实地址模式
#GP如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS如果 内存操作数 的有效地址在 SS 段限制之外。
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
#GP(0)如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS(0)如果 内存操作数 的有效地址在 SS 段限制之外。
#NMCR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误.
#AC(0)如果启用对齐检查, 并使用不对齐的内存引用 。
#UD如果使用 LOCK 前缀 。
兼容模式
与保护模式中的例外相同.
64 位模式
#SS(0)如果引用SS部分的内存地址是非冠状的.
#GP(0)如果内存地址是非冠状的.
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#MF如果存在待决的x87 FPU例外. #PF(fault-code) 如果发生 页面错误.
#AC(0)如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用.
#UD如果使用 LOCK 前缀 。

来源