1、-1- 限位数理论与运 算器设计 姜咏江 对外经济贸 易大学信 息学院, 北京(100013 ) E-mail: 摘 要:用数 码按照“ 逢 N 进一” 规 则书写的 限位数 ,最高进位 会丢失, 这种看似 缺点的现 象, 恰为机器实 现算术运 算带来了 方便。 数码 书写的 限位数不但 有序, 而且总 数一定, 其 中 和为总数的 两数中, 较大的数 如果代表 较小数的 相反 数,不但能 解决用限 位数表示 正负数 , 而且也能解 决用机器 实现算术 运算的问 题。 限 位数是 计算机产生 和发展的 重要理论 之一, 运 用它来进行 计算机设 计,简单 易行。 关键词:限位 数;补码 ;反码
2、; 运算器; 计算机设 计 中图分类号:TP301 ,TP302 ,TP303 1 引言 无论国内还 是国外的 计算机教 材, 涉 及到运算 器设计 , 都是用二 进制运算 与逻辑 电路的 转换, 直接搭 建了加减 法运算器 1 , 没有能够恰当地 解释机器数 值运算的 道理。 多数 教材提 到了数制理 论, 然而 , 又与 计算机运 算器的实 际设计 思想相差甚 远, 基本 上都从实 数理论对 运算器的电 路设计“ 进行解 释,但不 能应用于 器件设 计 2 ” 。 究竟计算机 运算器的 设计是根 据什么理 论来完成 的? 本文作者 在 2004 年提出了 限位数 的概念和方 法 3 , 将
3、二进制数的机器表示问 题, 提升 到任意进制 数, 从而可 以很好解 释计算 机设计中一 些作法的 合理性, 也可以说 明类似“+0 和-0” 4 概念的错误之处。 将限位数理 论和方法, 用到了计 算机软硬 件设计 中 5 , 不仅思路清 晰, 而且 能够收到 简 单易行的效 果。 2 限位数 数,一般都 由数码记 录。手写 数不考虑 数码有多 少, 而计算机却 有位数的 限定。 2.1 限位数的概念 用数码表示 ,位数一 定的无符 号整数, 叫限位数 。 限位数为了 表示位数 多少,无 效 0 不能 省略。例 如,001,00001 是不同的 限位数。 限位数按无 符号整数 进行运算 ,叫
4、面值 运算。 2.2 限位数特性 (1)限位数 的数量一 定。例如 ,3 位十进制 数只 有 1000 个, 而 8 位二进 制数只 有 256 个。一般来 说,n 位 N 进制 数共有 N n 个。总数 N n 叫 限数。 (2)最大的 限位数是 由最大的 数码组成 的,它 比限 数少 1。例 如,4 位十进制 的 9999 是最大数, 而限数是 10000。 显然限数 是不能用 限位 数表示的最 小正整数 。 (3)限位数 有一一对 称性。 限位数的对 称规则是“ 两数 面值之和 为限数” 。 例如四 位十进制限 位数 ,001 和 999 、002 和 998、499 和 501 ,50
5、0 和 500 是 自身对称 。显 然 000 没有 对称的数 。 限位数的对 称数也叫 补码。 (4)限位数进行面值 算术运算,加 法、乘法,超 过 位数限制的进位会丢 失,不够减 的 http:/ 中国科技论文在线 -2- 运算也不能 进行。因 而面值运 算的变化 一般不能 用“=” 连接。 我们规定,面值运算变化用“” 连接。例如,522321562 ,因为最高位向上进的 167 丢失了。 (5)假定限 位数某一 处有小数 点,小数 点移动 ,不 影响限位数 的特性(1 )(4) 。 3 用限位 数计 算 限位数虽然 运算范围 有限, 但 却是计算 机运算所 必须 依赖的形式 。 如果不
6、 发生减法 运算, 限位数面值 运算的结 果, 发生 了最高位 进位, 就说明 结果超出范 围了。 如 果用限位 数表示正 负数,那么 面值运算 最高位发 生进位, 值可以是 正确 的。 3.1 表示正负数 不用添加正 负号, 用 限位数 就可以表 示正负数 。 这是 利用限位数 的对称性 和正负数 对称 性一致实现 的。 由于 限位数中 , 面值 较小限位 数的补 码在面值较 大的部分 , 而限位 数的相反 数与限位数 的补码一 一对应 。 因而 可以规定 : 比对称 点大的数表示的 是其补码 的相反数 , 否 则表示原数。 例如,3 位十 进制限 位数 502 表示的值 是 498 的相
7、反数-498 。 由于偶进制 的对称点 正好是一 个限位数 , 并且 补码是 自身, 为避 免二义性 , 就规 定其为 负数。如此 偶进制限 位数表达 的正负数 范围负数 比正 数多一个最 小数。 限位数代表 的十进制 有符号数 ,叫这个 限位数的 值。 限位数值相 等,用“=” 号连接 。 3.2 限位数加法可以代替值的加减运算 各进制整数如果可 以用限位数表 示,那么它们的 加 减运算,就可以用限 位数的加法来 完成。 例如,22-12=22+(-12),由 于 2 位 限位数 22 可以表示 值 22,而 88 可 以表示值-12,所 以用 22+8810 限位数的 加法,就 得到 了
8、10 这个限 位数,它表 示的值 是 10,可 见结果 正 确。 3.3 溢出 用限位数面 值加法, 不一定能 够完全代 替十进制 数的 加减法运算 。 例如,十进制的 40+20 ,用限位数面值加法运算表示 ,得到的值是-40 。因为面值运算 的结果虽然 是 60,但 因为 2 位 十进制限 位数表示 正负 数范围是-50 49 ,根据值 的规定, 限 位数 60 的值 是-40 ,可见是 错误的。 限位数面值 运算得到 错误结果 , 这种情 况叫溢 出, 之 所以叫溢出 , 是因为 实际的运 算结 果,不在限 位数表值 的范围之 内。 3.4 消除溢出 限位数面值加法运 算的错误是由 于结
9、果值超出范 围 造成的,因而用扩充 位数的方法, 一定能在更 大的范围 内得到正 确的表示 。 要不 要扩大 限位数的位 数, 关键 在于能 够知道是 否 溢出。 如 何判 断和 消除溢 出? 可以证 明: 限 位 数加 减运 算结果 的值 符号 与第 一个 数值 符号 不 同,一定溢出, 否则不溢 出 6 。 http:/ 中国科技论文在线 -3- 例如,-41-10 用 限位数表 示为 59+9049 。由 于 49 表示的是正 数,而 59 表 示的是负 数, 限位 数 49 与 59 的符号 不同, 则一定溢 出。 实 际 上,-41-10 = -59 , 结果 超出了 2 位十进 制
10、数的表数 范围。 扩大限位数 的位数就 可以消除 溢出。 保值扩充 限位数 的位数, 方 法是: 表示正数 的限位 数前面加数码“0” ,表示负数的限位 数前面加最 大数 码。 例如,-41-10 , 用限位数 表示为 59+90 , 保值扩大 成 3 位是 959990949 = -51 ,它 的值为-51 ,可见不 再溢出 了。 总而言之, 用限位数 加法运算 可以在需 要的范围 内, 替代十进制 数的加减 法运算。 4 机器求 补码 计算机用限 位数加法 , 解决 了数值的 减法运算 , 其关 键是将减法 运算变成 了减数的 补码 表示。 那么如何 求一个数 的补码, 就 成了必须 解决
11、的 问题。 虽然根据 定义, 可以 用总数与 限 位数作减法 得到一个 限位数的 补码,但 这又回到 了减 法运算,故 需另外寻 求方法。 4.1 反码与反码数 用机器求补 码要用到 反码的概 念。 两个数码之 和为最大 数码, 其中一个 叫另一个 的反码 。 一个数的 全部数码 换成其 反码所 成的数,叫 原数的反 码数,有 时也称反 码。 4.2 用反码求补码 显然, 两个 反码数的 和是最 大数码组 成的面值 最大的 限位数。 而 最大数码 组成的 限位数 比总数小 1。 不妨设 a , b 分别是限 位数 c 的反码 和补码, 那 么有 b+c = c+a+1;则 b = a+1 。
12、这就是 说, 一个限位数的补 码等于其 反码加一 。 例如,45108 的反码 是 54891, 而它的补 码是 54891+1=54892 。 4.3 机器求反码的电路 由于机器直 接使用的 是二进制 数, 二进 制的反 码, 用 一个逻辑非 门就可以 求出。 如 果想 控制一位数 是否求反 , 用一个 异或门就 可以控 制, 称 之为反向控 制器。 反 向控制器 的真值表 如表 1 所示 。 表1 反相 控制 器真 值表 a (输 入) k (控 制) a 与 k 的异 或 注释 0 0 0 1 0 1 原码 0 1 1 1 1 0 反码 由表 1 可见 , 控制 端 k=0 , 输出端
13、得到的 是输入端 的 原码; 而 当 k=1 时, 输 出端得到 的 是输入端的 反码。 5 用限位 数设 计运算 器的 例子 二进制全加 器的进位 d 和本位 和的逻辑 表达式是 : d = ab+bc+ac http:/ 中国科技论文在线 -4- s = abc+abc+abc+abc 用二进制全 加器可以 解决两个 一位二进 制数的带 下端 进位的加法 。 如果用 补码, 就可以 完成这两个 数的减法 运算。其 中补码使 用“ 反 码加一” 得到。 图 1 是典型 应用限位 数设计运 算器的例 子, 其 中在 b 端接入一个 反向控制 器, 并 将下进 位与控制线 连在一起 , 就得 到
14、了一 个一位的 加减法运 算器。 当 k=1 时,b 端通过反 向控制器 进入全加器 的是 b 的反码 b , 又由于 c 与 k 同值, 故通过全加 器实现 了 a+b+1 ,即 a 与 b 的补码相加 。 图1 一位 加减 法运 算器 电路 图 1 (a) 是二 进制电 路, 图 1(b) 是十 进制电路。 其实任 何进制的一 位加减法 运算器的 电路 都如图 1(b) 所示 ,只是 全加器和 反相器的 设计要比 二 进制复杂一 些罢了。 图 2 是四位 十进制加 减法运算 器的构造 , 为了 监控限 位数所表示 值的符号 , 在第 一个数 的最高位和 输出的最 高位, 引 出了负数 判断
15、的 符号标 志, 并通过 异或门得 到溢出标 志, 通 过 溢出标志线 来及时处 理溢出。 图2 四位 十进 制加 减法 运算 器 十进制加减 法器输入 输出都是 4 位二进 制数表示 的十 进制数, 进 位线、 控制线和 标志线 都是一位的 二进制变 量。 设计中要 注意, 不论 多少进 制的加法运 算, 单位 1 都 是相同的 , 进 位不会超过 1 。 十进制数的 符号逻辑 是“ 最 高位小于 5 是正数 或零, 否 则是负数” 。 而十进 制反相器 是依 据(0 ,9) 、 (1 ,8) 、 (2 ,7) 、 (3 ,6) 、 (4,5) 的互反 关系设计的 。 十进 制全加器 的进位
16、“1” 是在 a 端、b 端和 下进位端 相加,结 果为 10 至 19 的 情况下得出 的。 十进制加减 法运算器 的各器件 , 也是通 过逻辑 电路搭 建起来的, 虽然与二 进制相比 , 复 杂度较高, 但作为运 算器的部 件,体现 限位数的 方法 是完全一致 的。 6 计算机 的精 确计算 计算机运算 器的位数 是固定的 , 因而它 能够进行 的算 术运算, 一 般都是限 位数面值 运算。 http:/ 中国科技论文在线 -5- 由于限位数 表达数值 的范围有 限, 似乎 一定位 数的计 算机不可能 进行精确 计算。 其 实, 用 限 位数运算的 方法,可 以借助存 储器实现 任何精确
17、的计 算。 6.1 超长数的加减运算 借助于存储 器的运算 问题, 多 半都是软 件的设 计问题 。 对于加减 法运算的 超长数 , 我们 可以用运算 器的位长 来分段存 储,然后 用加减法 运算 器分段计算 。 限位数运算 将数值的 减法运算 变成了加 法。 因 而, 超 长数值计算 的问题, 都变成了 加法 运算的问题 。 限位数 的分段加 法, 主 要是要考 虑“ 带 进 位加法” 和“ 不 带进位加 法”。为 此 ,要 在图 2 的“c” 端连 入进位控 制电路, 还要将每 次运算 的进位,用 一个一位 寄存器保 存起来, 以便供带进 位的加法 使用。 图 3 是带进 位控制的 十进制
18、加 减法运算 器, 可以 设计 相应指令, 完成超长 数加减法 运算。 图中,k 是取反控制 端,yi 是“1” 控制端 ,jw 是带进位 运算控制端 ,L 是寄存器 REG 的前次 运算输入控 制端。各 控制端变 化的真值 表如表 2 所示 。 表2 带进 位运 算控 制真 值表 说明 运算 类型 k (取 反控 制) yi jw (进 位) 不带 进位 加法 0 0 0 超长 数加 法 带进 位加 法 0 0 1 不带 进位 减法 1 1 0 超长 数减 法 带进 位减 法 1 0 1 图3 带进 位控 制的 加减 法运 算器 超长数码记 录的数, 可以按着 限位数分 段存储 , 最高 段
19、位数不够 , 可以按 值是正负 数扩 充的方法, 得到 更长的限 位数。 超长 数分段运 算, 最 右面一段不 带进位, 接下 来的各段 都需 要带进位进 行计算。 6.2 小数的处理 用数码表示 的带小数 ,在一个 具体的问 题中总能 找到 最长的小数 位数,例 如 n 位小数。 这时可以将 所有数的 小数点右 移 n 位, 将参与运 算的 数都变成整 数。 这种 小数点右 移的结果 , 使每个数都 扩大了进 制基数的 n 次方倍 。 使用 超长数 的运算方法 进行整数 计算, 最终将结 果 的小数点再 左移 n 位,就是带 小数运算 的结果。 例如, 3452 - 4.876 , 右移小数
20、点 3 位, 得 3452000 - 4876 , 用 4 位限位数表示, 得 0345_2000 + 9999_5124 ,可分 成两次, 用 4 位限 位数加法 运算器 计算。不带 进位加法 是: http:/ 中国科技论文在线 -6- 20005124 7124 运算产生的 进位是 0 (带着进 位,不用 考虑溢出) ;带 进位的加法 运算是: 0345+9999+0 0344 最终结果是 3447.124 。通过验 证,可以 说明结果 的正 确性。 注意, 分段做限 位数加法 运算, 最高 段运算结 束, 要 判断是否溢 出, 如果溢出, 可再增 加一段限位 数处理。 有了图 3 的
21、基本硬件 结构, 就 可以设计 相应的 指令, 然后通过程 序设计, 最终完成 复杂 的超长限位 数的运算 。 7 结论 限位数的概 念和方法 , 不仅 为计算机 的运算器 设计提 供了切实可 行的理论 支持, 而且也 充分地体现 了, 数学 认识的 有限向无 限转化的 过程。 限位数理论 是计算机 赖以产生 的基础理 论之一。 参考文献 1 David Money Harris,Sarah L.Harris 数 字设 计和 计算 机系 统结 构( 英文 版) 北 京, 机械 工业 出版 社, 2007.10 ,p233-240 2 金兰 计 算机 组织 与结 构 北京 ,高 等教 育出 版社
22、 ,1986.5 ,p80-141 3 姜咏 江 补码 制理 论的 理解 北 京, 计算 机工 程与 应用 , 2004.5 4 张功 萱, 顾一 禾, 邹建 伟( 等) 计 算机 组成 原理 北 京, 清 华大 学出 版社 ,2005.9 ,p25 5 姜咏 江 计算 机原 理综 合课 程设 计 北京 ,清 华大 学出 版社 ,2009.6 ,p75-114 6 姜咏 江 计算 机设 计的 基础 理论 限位 数2009 中国 计算 机大 会论 文集 ,2009.10 ,p362 The Theory of Fixed-Length Number and Design Arithmetical unit Jiang Yongjiang School of Information Technology Base complement;Symmetric digital;Arithmetic device;Computer design 作者简介: 姜咏江 1945 年生 。 中国计算机 学会高级会员 。计 算机设计专家,中嵌 联盟特聘专家 。研 究计算机理 论与设计 。成功设 计了动态 计算机核 PMC362 及多种计算 机核结构 。个人设 计 制作了教学 计算机 PMC110 等。 http:/ 中国科技论文在线