FCMOVcc

浮点 有条件移动

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
DA C0+iFCMOVB ST(0), ST(i)有效有效如果在下面移动( CF=1) 。
DA C8+iFCMOVE ST(0), ST(i)有效有效如果等于( ZF=1) 则移动 。
DA D0+iFCMOVBE ST(0), ST(i)有效有效如果下方或等值(CF=1或ZF=1),则移动.
DA D8+iFCMOVU ST(0), ST(i)有效有效未按顺序移动( PF = 1) 。
DB C0+iFCMOVNB ST(0), ST(i)有效有效如不低于(CF=0)则移动。
DB C8+iFCMOVNE ST(0), ST(i)有效有效移动( ZF = 0) 。
DB D0+iFCMOVNBE ST(0), ST(i)有效有效如果不低于或等于(CF=0和ZF=0),则移动。
DB D8+iFCMOVNU ST(0), ST(i)有效有效如果不是无序移动( PF=0) 。

实测开销

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

说明

测试EFLAGS寄存器中的状态标志,如果给定的测试条件属实,则将源操作数(第二次操作数)移动至目标操作数(第一次操作数). 上文描述栏和英特尔(R)64和IA-32架构软件开发者手册第1卷第8章给出的每个mnemonic os的条件. 源操作数总是在ST(i)注册,目标操作数总是ST(0).

FCMOVcc指令对优化IF小构件很有用. 它们还有助于消除IF业务的分支间接费用,以及处理器可能出现分支误测。

处理器可能不支持FCMOVcc指令. 软件可以通过使用CPUID指令(参见"COMISS-Compare 标量 Ordered 单精度浮点 values and Set EFLAGS")检查处理器的特性信息是否支持FCMOVcc指令. 如果同时设置了CMOV和FPU的特征位,则支持FCMOVcc指令.

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

IA-32 架构兼容性

FCMOVcc指令被引入到P6家庭处理器的IA-32架构中,在早期的IA-32处理器中并不存在.

行动

IF condition TRUE
    THEN ST(0) := ST(i);

FI;

FPU Flags Affected

C1                        Set to 0 if stack underflow occurred.

C0, C2, C3                Undefined.

浮点 例外

#IS                       Stack underflow occurred.

整数旗影响无.

异常

保护模式
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#UD如果使用 LOCK 前缀 。
实地址模式
与保护模式中的例外相同.
虚拟 8086 模式
与保护模式中的例外相同.
兼容模式
与保护模式中的例外相同.
64 位模式
与保护模式中的例外相同.

来源