FLD
装入 浮点 值
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
D9 /0 | FLD m32fp | 有效 | 有效 | 将 m32fp 推到 FPU 寄存器堆栈 。 | |
DD /0 | FLD m64fp | 有效 | 有效 | 将 m64fp 推到 FPU 寄存器堆栈 。 | |
DB /5 | FLD m80fp | 有效 | 有效 | 将 m80fp 推到 FPU 寄存器堆栈 。 | |
D9 C0+i | FLD 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 段限制之外。 |
#NM | CR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误. |
#AC(0) | 如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用. |
#UD | 如果使用 LOCK 前缀 。 |
#NM | CR0.EM[bit 2] 或 CR0.TS[bit 3] = 1. |
#MF | 如果存在待决的x87 FPU例外. |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#GP | 如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外. |
#SS | 如果 内存操作数 的有效地址在 SS 段限制之外。 |
#NM | CR0.EM[bit 2] 或 CR0.TS[bit 3] = 1. |
#UD | 如果使用 LOCK 前缀 。 |
| 与保护模式中的例外相同. |
虚拟 8086 模式
#GP(0) | 如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外. |
#SS(0) | 如果 内存操作数 的有效地址在 SS 段限制之外。 |
#NM | CR0.EM[bit 2]或CR0.TS[bit 3] = 1. #PF(fault-code) 如果发生页面错误. |
#AC(0) | 如果启用对齐检查, 并使用不对齐的内存引用 。 |
#UD | 如果使用 LOCK 前缀 。 |
| 与保护模式中的例外相同. | |
| 与保护模式中的例外相同. |
兼容模式
| 与保护模式中的例外相同. | |
| 与保护模式中的例外相同. |
64 位模式
#SS(0) | 如果引用SS部分的内存地址是非冠状的. |
#GP(0) | 如果内存地址是非冠状的. |
#NM | CR0.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建筑兼容性部分。 |
| 与保护模式中的例外相同. |