高级算术运算全面解析
在处理数据时,我们常常会遇到比 16 位更大的数据、包含小数的数据或者有特殊编码的数据。下面我们将详细介绍双精度数、二进制编码十进制(BCD)数和浮点数的算术运算,以及 8087 数字协处理器的操作。
1. 双精度数
在基于 8086 的计算机中,存储的数字通常为 8 位或 16 位。但 16 位数字的范围有限,无符号数范围是 0 到 65535,有符号数范围是 -32768 到 32767。为了扩展这个范围,常用的技术是为每个数字使用 2 个字,这样的数字被称为双精度数。无符号双精度数的范围是 0 到 2^32 - 1(即 4,294,967,295),有符号双精度数的范围是 -2,147,483,648 到 +2,147,483,647。
双精度数可以占用两个寄存器或两个内存字。例如,一个 32 位数字存储在两个内存字 A 和 A + 2 中,写作 A + 2:A,那么高 16 位在 A + 2 中,低 16 位在 A 中。如果该数字是有符号的,A + 2 的最高位就是符号位,负数用补码形式表示。
由于 8086/8088 只能处理 8 位或 16 位数字,双精度数的运算必须通过软件模拟。不过,8087 协处理器可以用于进行双精度算术运算。
1.1 双精度数的加法、减法和取反
要对两个 32 位数字进行加法或减法,我们先对低 16 位进行操作,然后再对高 16 位进行操作。但如果第一次加法或减法产生了进位或借位,结果就会不正确。
为了解决这个问题,我们可以使用 8086 提供的两条新指令:ADC(带进位加法)和 SBB(带借位减法)。其语法如下:
<
超级会员免费看
订阅专栏 解锁全文
363

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



