X86提供了一个叫FCOM的指令用以进行浮点数的比较:
0x30001084 fcomp qword [0x30003068]
上面的指令将ST(0)寄存器的值与一个全局变量进行比较,并设置浮点标志寄存器:
这里的C3,C2,C0是FPU状态寄存器的3个比特位:
紧接着使用一条FSTSW指令将FPU状态寄存器赋给AX
最后就可以用test命令进行比较和跳转了。
一个完整的指令序列:
0x30001080 fld qword [esp + 4]
0x30001084 fcomp qword [0x30003068]
0x3000108A fnstsw ax
0x3000108C test ah, 1
0x3000108F je 0x3000109a
其C++代码就是:
If([esp+4] < [0x30003068])
{
……
}