浮点处理与指令编码详解
1. 浮点运算中的特殊情况与指令
1.1 除法异常
当源操作数为零时,会产生除零异常。当操作数为正无穷、负无穷、零和 NaN 时,除法会有一些特殊情况。具体细节可参考相关手册。
1.2 FIDIV 指令
FIDIV 指令在将整数源操作数除以 ST(0) 之前,会将其转换为双扩展精度浮点格式。其语法如下:
FIDIV m16int
FIDIV m32int
2. 比较浮点值
2.1 比较指令
不能使用 CMP 指令来比较浮点值,因为 CMP 使用整数减法进行比较,而应使用 FCOM 指令。执行 FCOM 后,在逻辑 IF 语句中使用条件跳转指令(如 JA、JB、JE 等)之前,需要采取特殊步骤。由于所有浮点值都是隐式有符号的,FCOM 执行有符号比较。
2.2 FCOM、FCOMP、FCOMPP 指令
- FCOM :将 ST(0) 与源操作数进行比较,源操作数可以是内存操作数或 FPU 寄存器。
- FCOMP :执行与 FCOM 相同的操作,并在结束时从栈中弹出 ST(0)。
- FCOMPP :与 FCOMP 相同,但会再弹出一次栈。
2.3 条件码
三个 FPU 条件码标志 C3、C2
超级会员免费看
订阅专栏 解锁全文
3

被折叠的 条评论
为什么被折叠?



