18、高级算术运算全面解析

高级算术运算全面解析

在处理数据时,我们常常会遇到比 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(带借位减法)。其语法如下:

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值