FLD

装入 浮点 值

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
D9 /0FLD m32fp有效有效将 m32fp 推到 FPU 寄存器堆栈 。
DD /0FLD m64fp有效有效将 m64fp 推到 FPU 寄存器堆栈 。
DB /5FLD m80fp有效有效将 m80fp 推到 FPU 寄存器堆栈 。
D9 C0+iFLD ST(i)有效有效将 ST( i) 推到 FPU 寄存器堆栈 。

实测开销

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

说明

将 源操作数 推向 FPU 寄存器堆栈 。 源操作数可以是单精度,双精度,也可以是双扩展精度的浮点格式. 如果源操作数为单精度或双精度浮点格式,则在被推到堆栈之前,自动转换为双倍扩展精度的浮点格式.

FLD指令也可以将选定的FPU寄存器[ST(i)]中的值推到堆栈上. 在此, 推动寄存器 ST( 0) 重复堆栈顶部 。

NOTE

当FLD指令加载一个异常值,且CW中的DM位不蒙蔽时,会标出一个例外,但该值仍然被推到x87堆栈上.

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

行动

IF SRC is ST(i)
    THEN
          temp := ST(i);

FI;

TOP := TOP - 1;

IF SRC is memory-operand
    THEN
          ST(0) := ConvertToDoubleExtendedPrecisionFP(SRC);
    ELSE (* SRC is ST(i) *)
          ST(0) := temp;

FI;

FPU Flags Affected

C1                  Set to 1 if stack overflow occurred; otherwise, set to 0.

C0, C2, C3          Undefined.

浮点 例外

#IS                 Stack underflow or overflow occurred.
#IA                 Source operand is an SNaN. Does not occur if the source operand is in double extended-preci-

sion 浮点格式(FLD m80fp或FLD ST(i)).

#D                  Source operand is a denormal value. Does not occur if the source operand is in double

扩展精度浮点格式.

说明

在 FPU 寄存器堆栈中,将7个常用常数中的1个(双倍扩展精度浮点格式)推向. 可装入这些指令的常数包括+1.0,+0.0,对数210,对数2e, log102,和对数2. 对于每个常数,一个内部的66位常数被四舍五入(按照RC字段在FPU控制词中的规定),以双倍的扩展精度浮点格式. 不精确结果例外(#P)不是通过四舍五入生成的,如果值被四舍五入,在x87 FPU状态单词中也没有设置C1旗.

见Intel(R)64和IA-32架构软件开发者手册第1卷第8章中题为"Pi的表示"的章节,以说明常数.

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

IA-32 架构兼容性

当RC域被设定为圆到近时,FPU会产生由Intel 8087和Intel 287数学共处理器产生的相同的常数.

行动

TOP := TOP - 1;

ST(0) := CONSTANT;

FPU Flags Affected

C1                  Set to 1 if stack overflow occurred; otherwise, set to 0.

C0, C2, C3          Undefined.

浮点 例外

#IS                 Stack overflow occurred.

异常

保护模式
#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 前缀 。
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#MF如果存在待决的x87 FPU例外.
#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使用前缀。FLD1/FLDL2T/FLDL2E/FLDPI/FLDLG2/FLDLN2/FLDZ- 下降常数操作码* 指令 64-Bit compat/ 描述模式 leg 模式 有效推 + 1.0FPUD9 E8 存储器FLD1有效将日志 210 推到FPU寄存器堆栈。有效将日志2e推到FPUD9 E9 存储器FLDL2T有效推进到FPU寄存器堆栈。有效将 log102 推到FPU寄存器堆栈。 D9 EAFLDL2E有效将登录2 推到FPU寄存器堆栈。有效将+0.0推到FPU寄存器堆栈。 D9 EBFLDPI有效的 D9 欧共体FLDLG2有效的 D9 ED 数据FLDLN2有效的 D9 EEFLDZ有效NOTES* 见下文IA-32建筑兼容性部分。
与保护模式中的例外相同.

来源