浮点处理与指令编码全解析
1. 浮点除法指令
在浮点运算中,除法操作是常见的操作之一。例如下面的代码展示了如何进行浮点除法:
dblTwo REAL8 10.0
dblQuot REAL8 ?
.code
fld dblOne ; load into ST(0)
fdiv dblTwo ; divide ST(0) by dblTwo
fstp dblQuot ; store ST(0) to dblQuot
这里需要注意的是,如果源操作数为零,会产生除零异常。当操作数为正无穷、负无穷、零或 NaN 时,除法运算会有一些特殊情况。
FIDIV 指令会将整数源操作数转换为双扩展精度浮点格式,然后再进行除法运算。其语法如下:
FIDIV m16int
FIDIV m32int
2. 比较浮点值
不能使用 CMP 指令来比较浮点值,因为 CMP 指令使用整数减法进行比较。而应该使用 FCOM 指令。执行 FCOM 指令后,在逻辑 IF 语句中使用条件跳转指令(如 JA、JB、JE 等)之前,需要采取特殊步骤。由于所有浮点值都是隐式有符号的,FCOM 执行有符号比较。
FCOM、FCOMP 和 FCOMPP 指令的具体情况如下:
| 指令 | 描述 |
| ---- | ---- |
| FCOM | 比较 ST(0) 和 ST(1) |
| FCOM m32fp | 比较 ST(0) 和
超级会员免费看
订阅专栏 解锁全文
10万+

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



