FICOM, FICOMP

比较整数

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
DE /2FICOM m16int有效有效比较ST(0)与m16int.
DA /2FICOM m32int有效有效比较ST(0)与m32int.
DE /3FICOMP m16int有效有效比较 ST( 0) 与 m16int 和 pop stack 寄存器 。
DA /3FICOMP m32int有效有效比较 ST( 0) 与 m32int 和 pop stack 寄存器 。

实测开销

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

说明

将ST(0)中的值与整数源操作数相比较,并根据结果设置条件代号C0,C2和FPU状态词中的C3(见下表). 整数值在比较前转换成双倍扩展精度浮点格式.

FICOM/FICOMP 结果

条件C3C2C0
> SRC000
< SRC001
= SRC100
无序111

行动

CASE (relation of operands) OF

    ST(0) > SRC:  C3, C2, C0 := 000;

    ST(0) < SRC:  C3, C2, C0 := 001;

    ST(0) = SRC:  C3, C2, C0 := 100;

    Unordered:    C3, C2, C0 := 111;

ESAC;

IF Instruction = FICOMP

    THEN

          PopRegisterStack;

FI;

FPU Flags Affected

C1                  Set to 0.

C0, C2, C3          See table on previous page.

浮点 例外

#IS                 Stack underflow occurred.
#IA                 One or both operands are NaN values or have unsupported formats.
#D                  One or both operands are denormal values.

异常

保护模式
#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 前缀 。

来源