第一章 概述
?计算机是一种能对数字化信息进行自
动高速运算的通用处理装置。
1,1 计算机的定义和特性
?信息 运算 处理
1.1.1 什么是计算机
1.1.2 计算机的特性
?计算机的特性可以归纳为高速、通用、准确、
智能四大特性。
1,2 计算机的发展历程
1.2.1 电子计算机的诞生
?第一台电子计算机 ENIAC( Electronic Numerical
Integrator and Computer)于 1946年在美国诞生。
① 每秒 5000次加法运算;
②每秒 50次乘法运算;
③平方和立方计算;
④ Sin和 Cos函数数值运算;
⑤其它更复杂的计算。
1.2.2 第一代计算机
( 20世纪 40年代中到 50年代末)
?第一代计算机为电子管计算机,其逻辑元件采用电子
管,存储器件为声延迟线或磁鼓,典型逻辑结构为定
点运算。计算机, 软件, 一词尚未出现,编制程序所

工具为低级语言。1.2.3 第二代计算机( 50年代中后期到 60年代中)
?第二代计算机为晶体管计算机。这一代计算机除了逻
辑元件采用晶体管以外,其内存储器由磁芯构成,磁
鼓与磁带成为外存储器。
?计算机典型逻辑结构实现了浮点运算,
并提出了变址、中断,I/O处理等新概念。
计算机软件也得到了发展,出现了多种
高级语言及其编译程序。
1.2.4 第三代计算机( 60年代中到 70年代中)
?第三代计算机为集成电路计算机,其逻辑元件与存储器
均由集成电路实现,这是微电子与计算机技术相结合的
一大突破。微程序控制、高速缓存、虚拟存储器、流水
线等先进计算机技术开始使用。另一大特点是大型 /巨
型机与小型机同时发展。
1.2.5 第四代计算机( 70年代中期开始 — )
?大规模( LSI)和超大规模( VLSI)集成电路
及微处理器为这一代计算机的典型特征。
?并行处理技术的研究与应用以及众多巨型机的产生也成
为这一时期计算机发展的特点。
?四代机时期的一个重要特点是计算机网络的发展与广泛
应用。
1.2.6 新一代计算机
?新器件和非冯 ·诺依曼结构已成为 新一代计算机的公认
标志。
1,3 计算机的组成与结构
1.3.1 计算机系统的层次结构
图1, 1 计算机系统层次结构
计算机组织与
结构涉及内容
1.3.2 计算机硬件
?计算机硬件是指构成计算机的元器件、
部件、设备、以及它们的设计与实现技术。
?冯 ·诺依曼计算机的主要特点:
1)计算机由 运算器, 存储器, 控制器 和 输入 /输出 五个
部件组成。 存 储 器
运 算 器
控 制 器
输入
输出
图1, 2 计算机基本组成
数 据
地 址
指 令
地 址
本书讨论的范围涉及第 0,1,2共 3层,
主要内容如下:
1,高速的算术、逻辑运算方法及 ALU的
逻辑设计;
2,高速的指令执行过程及指令部件的设计与实现,
是采用组合逻辑技术、或微程序设计技术,还是
PLA技术;是复杂指令集计算机( CISC),还是
精简指令集计算机( RISC);
3,提高存储器容量与速度的方法,以及如何解决
,CPU-Cache-MM-外存, 之间的匹配问题;
4,高效率的输入 /输出方法、组织,以及它们之间的
互联技术;
5,计算机五大部件( 运算器, 控制器, 存储器, 输入
和 输出 )之间的相互作用、高效 接口 ( 总线 );
2)存储器以二进制形式存储指令和数据;
3)存储程序工作方式;
4)五部件以运算器为中心进行组织;
1.3.3 计算机软件
1,软件的作用
?一般来说,计算机的工作总是由 存储程序 来控制的。
?软件的具体作用为:
① 在计算机系统中起着指挥和管理的作用。
② 是计算机用户和硬件的接口界面。
③ 是计算机体系结构设计的主要依据。
2,软件的发展过程
?三个阶段:
1)从第一台计算机上的第一个程序出现到
实用的高级语言出现为第一阶段( 1946-1956年)。
2)从实用的高级程序设计语言出现到软件工程出现
以前为第二阶段( 1956-1968年)。
3)软件工程出现以后迄今一直为第三阶段( 1965— )。
3,软件的分类
① 系统软件, 操作系统、编译程序。
② 支撑软件,数据库,各类 接口软件 和 工具组 。
③ 应用软件:
1,4 计算机的分类与应用
1.4.1 计算机的分类
?按计算机所处理对象的表示形式不同可以
分成模拟计算机与数字计算机两类。
?计算机按其用途来分可以分成专用机和通用机两类。
其中,通用计算机按其规模、性能和价格来分,又
可分为巨型机、大型机、小型机、工作站、微型机
等多种类型。
1.4.2 计算机应用
计算机信息处理技术包括了对各种信息媒体的获取、
表示、加工与表现方法和技术,大致有以下几个方
面内容:
1.语言与文字的处理。
2.计算机图形学与数字图象处理。
3.多媒体技术。
4.计算机辅助技术。
5.计算机信息系统。
6.计算机控制。
?计算机应用技术的发展方向为集成化、网络化、智能化
第 2章 数据的表示
?本章讨论在计算机内部各类基本数据
的表示方法及其相互间的等值转换。
2,1 数据、信息和媒体
?数据 是对事实、概念或指令的一种特殊表达形式,
这种特殊的表达形式可以用人工的方式或者用自动
化的装置进行通信、翻译转换或者进行加工处理 。
?在计算机系统中所指的 数据 均是以二进制编码形式
出现的。
?计算机内部由硬件实现的基本数据区分为 数值型数
据 和 非数值型数据 。
2.1.1 数据
?信息 是对人有用的数据,这些数据可能影响
到人们的行为和决策。
?媒体 又称媒介、媒质,是指承载信息的载体。
2.1.2 信息
?计算机信息处理,实质上就是由计算机进行数据处理
的过程 。
?信息是对数据的解释,数据是信息的载体。
2.1.3 媒体
?与计算机信息处理有关的媒体有 5种:
感觉媒体 表示媒体
存储媒体 表现媒体 传输媒体
文字、图、表、声音,
视频等各种媒体信息
或命题、计算等信息
媒体输
入设备
媒体输
出设备
二进制编码表示的各种数据
用户角度(感觉媒体)
(表现媒体)
程序员角度
( 表示 / 存储 / 传输媒体 )
结构化描述
指令系统能识别
的基本数据类型
系统设计者角度
数值型数据 非数值型数据
图 2.1 计算机外部信息与内部数据的转换
2,2 数字化信息编码
?所谓 编码,就是用少量简单的基本符号,对
大量复杂多样的信息进行一定规律的组合。
?在计算机系统中,凡是要进行处理(包括计算、查找、排序、分类、统计、合并等)、存储和传输的信
息,都是用二进制进行编码的。
?计算机内部采用二进制表示的原因:
1) 二进制只有两种状态, 在数字电路中很容易实现 。
2) 二进制编码, 运算规则非常简单 。
3) 二进制的, 0‖,,1‖与二值逻辑一致, 很容易实现逻辑运算 。
2.3 数值数据的编码表示
?数值数据 是表示数量多少和数值大小的数据。
?在计算机内部,数值数据的表示方法有两大类:第一
种是直接用二进制数表示;另一种是采用二进制编码的
十进制数( Binary Coded Decimal Number,简称 BCD)
表示。
?表示一个数值数据要确定三个要素:进位计数制、
定/浮点表示和数的编码表示。
2.3.1 进位计数制及其各进位制数之间的转换
?在某个数字系统中,若采用 R个基本符号( 0,1,
2,...,R-1)表示各位上的数字,则称其为基 R
数制,或称 R进制数字系统,R被称为该数字系统的基,
采用, 逢 R进一, 的运算规则,对于每一个数位 i,其该
位上的权为 R i。
?在计算机系统中,常用的几种进位计数制
有下列几种:
二进制 R=2,基本符号为 0和 1
八进制 R=8,基本符号为 0,1,2,3,4,5,6,7
十六进制 R=16,基本符号为 0,1,2,3,4,5,6,7,8,9,
A,B,C,D,E,F
十进制 R=10,基本符号为 0,1,2,3,4,5,6,7,8,9
例:十进制数 2585.62代表的实际值是
2x103+5x102+8x101+5x100+6x10-1+2x10-2
例:二进制数 (100101.01)2代表的实际值是:
(100101.01)2 = 1x25 + 0x24+ 0x23 + 1x22 + 0x21 +
1x20+ 0x2-1 + 1x2-2=(37.25)10
1.R进制数转换成十进制数
?任何一个 R进制数转换成十进制数时,只要
,按权展开,即可。
例 1 二进制数转换成十进制数。
(10101.01)2=(1× 24+0× 23+1× 22+0× 21+1× 20+
0× 2-1+1× 2-2)10=(21.25)10
例 2 八进制数转换成十进制数。
(307.6)8=(3× 82+7× 80+6× 8-1) 10=(199.75) 10
例 3 十六进制数转换成十进制数 。
(3A.C)=(3× 161+10× 160+12× 16-1) 10
=(58.75) 10
2,十进制数转换成 R进制数
?任何一个十进制数转换成 R进制数时,要将
整数和小数部分分别进行转换。
( 1)整数部分的转换
?整数部分的转换方法是, 除基取余,上右下左, 。
例 1 将十进制整数 835分别转换成二, 八进制数 。
0
18
138
1048
8358
余数 低位
3
0
5
1
(835) 10=(1503) 8 高位
417
26
2
835
104
208
52
13
2
2
2
2
2
低位 余数
高位
0
0
1
1
0
0
3
6
1
0
2
2
2
2
0
1
1
1
(835) 10=(1101000011) 2
( 2)小数部分的转换
?小数部分的转换方法是
,乘基取整,上左下右,。
例 2 将十进制小数 0.6875分别转换成二、八进制数。
0.6875× 2=1.375 1
整数部分
0.375× 2=0.75 0
0.75× 2=1.5 1
0.5× 2=1.0 1
高位
低位
(0.6875) 10=(0.1011) 2
整数部分 高位
低位
0.6875× 8=5.5 5
0.5× 8=4.0 4
(0.6875) 10=(0.54) 8
例 3 将十进制小数 0.63转换成二进制数。
整数部分 高位
低位
0.63× 2=1.26 1
0.26× 2=0.52 0
0.52× 2=1.04 1
0.04× 2=0.08 0
(0.63) 10=(0.1010) 2 (近似值 )
( 3)含整数、小数部分的数的转换
?只要将整数、小数部分分别进行转换,得
到转换后的整数和小数部分,然后再这两
部分组合起来得到一个完整的数。
例 4 将十进制数 835.6875转换成二, 八进制数 。
(835.6875) 10=(1101000011.1011) 2=(1503.54) 8
3,二, 八, 十六进制数的相互转换
( 1)八进制数转换成二进制数
例 1 将 (13.724) 8转换成二进制数
(13.724) 8=( 001 011, 111 010 100 )2
=(1011.1110101) 2
( 2)十六进制数转换成二进制数
例 2 将十六进制数 2B.5E转换成二进制数
(2B.5E)16 = ( 0010 1011, 0101 1110 ) 2
= (101011.0101111) 2
( 3)二进制数转换成八进制数
(10011.01) 2 = ( 010 011, 010 ) 2 = (23.2) 8
( 4)二进制数转换成十六进制数
(11001.11) 2 = ( 0001 1001, 1100 ) 2
= ( 19.C ) 16
2.3.2 定点与浮点表示
1.定点表示
?所谓 定点 表示是约定计算机中所有数据的小数点
位置是固定不变的。该位置在计算机设计时已被隐含地
规定,因此勿需再用任何硬件设备状态来明显表示小数点。
± 1 0 1 0 1 1 0
小数点位置(隐含约定)
·
± 1 0 1 0 0 0 1
小数点位置(隐含约定)
·
利用定点表示进行计算,须将所有数据之
值按一定比例予以缩小(或放大)后送入
计算机,同时须将计算结果以同一比例增
大(或缩小)后才能得正确结果值。
由于采用定点数表示数的范围较小,因此运算很容易
产生溢出,另外选择适当的比例因子有时也很困难。
2.浮点表示
在计算机中所表示的数,其小数点位置是可变的,这
种数称为 浮点数 。
数符 1 阶符 1 阶 e 尾数 m
对于任意一个二进制数 X,可以表示成
如下形式:
X= ± M× RE
其中,M为 尾数,常用定点纯小数表示; E为 阶,一般
用定点整数表示; R为 基数,隐含为 2,也可以为 2q,
q可取 2,3,4等正整数。
0
上溢区 下溢区 上溢区
负数区 ( 机器零 ) 正数区
Nmax = (1-2-m) × 2(2e-1) Nmin = 2-m × 2-(2e-1)
?浮点表示法的最大特点是它可以表示
很大的数据范围以及较高的数据精度。
2.3.3 编码系统
?确定一个数值数据的三要素是:进位计数制、
定点 /浮点表示和编码表示。它们分别用来解决数值
数据的基本表示符号、小数点位置和数的正负号表示。
?符号数字化,0表示正号,1表示负号。
机器数,数值数据在计算机内部编码表示的数。
真值,机器数真正的值(即:原来带有正负号的数)。
?机器数 X的真值为:
XT = ± X1′Xn–2′… X1′X0′
( 当 X为定点整数时 )
XT = ± 0, X–1′X– 2′… X–(n –1)′X – n′
( 当 X为定点小数时 )
数字化编码 后的机器数 X表示为:
X = Xn X n -1 X n -2 … X 1 X 0
?常用的编码表示方式有三种,原码, 补码 和 反码 。
对于这三种编码:正数的所有编码表示都是相同的 。
其结果总是:符号位取值为 0,数值部分保持不变 。
负数的所有编码表示, 其符号位总是为 1,而数值
部分对于不同的编码则有不同的取值 。
1.原码表示法
?原码 表示的机器数由符号位后直接跟上
真值的数值构成。
定点小数,
x
[x]原 =
1-x 10 ??? x
01 ?? x
[+0]=0.00 0???
[-0]=1.00 0???
定点整数,
x 当 2n-1
[x]原 =
2n-1-x 当 -2n-1
0?? x
?? x0
例:
[+1101]原 =01101
[-1101]原 =11101
原码表示的优点是与真值的对应关系直观、方便,
因此与真值的转换简单,并且用原码实现乘除运算
比较简便,但其加 /减法运算规则复杂。
2.补码表示法
(1) 模运算
?―对一个多于 n位的数丢弃高位而保留低 n位数,
这样一种处理,实际上等价于, 将这个多于 n位的数去
除以 2n,然后丢去商保留其余数, 的操作。这样一种操
作运算就是, 模运算, 。?在模运算中, 若 A,B,M满足下列关系,A=B+KM
( K为整数 ), 则记为:
A≡B ( mod M)。
即,A,B各除以 M后的余数相同,故称 B和A为模M同
余。
?假定现在钟表时针指向 10点,要将它拨向
6点,则有两种拨法:
① 倒拨 4格,10-4=6
② 顺拨 8格,10+8≡18≡6 ( mod 12)
?所以在模 12系统中,10-4≡10+8 (mod 12) 即:
-4≡ 8 (mod 12) 我们称 8是 -4对模 12的补码。同样有
-3≡ 9( mod 12); -5≡ 7( mod 12)等等。
结论:, 对于某一确定的模,某数减去小于模的另一
数,总可以用该数加上模与另一数绝对值之差来代替, 。
因此,补码可以用加法实现减法运算 。
例 1., 钟表, 模运算系统
10-4≡10+(12-4) ≡10+8≡6 ( mod 12)
例 2., 4位十进制数, 模运算系统 ( 相当于只
有四档的算盘 )
9828-1928≡9828+(104-1928)
≡9828+8072
≡7900 ( mod 104 )
( 2)补码的定义
定点小数:
x
[x]补 =
2+x 10 ??? x
01 ?? x
x 当 2n-1
[x]补 =
2n+x 当 -2n-1
0?? x
?? x0
定点整数:
补码 0的表示是唯一的:
[+0]补 =0 0...0
[-0]补 = 2 n -0=1 00...0=0 0...0 (mod 2 n)
对于整数补码有,[-1]补 = 2 n –1=11...1 (n个 1)
对于小数补码有,[-1]补 =2-1=1.00...0 (n-1个 0)
例, 设补码的位数为 6,求负数 -0.10110
的补码表示 。
[-0.10110]补 =2-0.10110
=10.00000-0.10110
=1.01010
?求负数补码的简单方法:, 符号位固定为 1,其余各位
由真值中相应各位取反后,末尾加 1所得。,
?由补码求真值的简便方法:, 若符号位为 1,则真值的符
号为负,其数值部分的各位由补码中相应各位取反后,
末尾加 1所得。,
?求一个补码, 取负, 后的补码表示方法:
,只要对该已知补码各位取反,末尾加 1即可。,
?由 [x]求 [ x]的方法:将 [x]n的符号位和数值位
一起向右移动一位,符号位移走后还保持原来的值不变。 2
1
例 1,已知,XT =-0.1011010,求 [XT]补 。
[XT]补 =1,0100101+0,0000001
=1,0100110
例 2,已知,[XT]补 = 1 011010,求 XT 。
XT = -100101+1= -100110
例 3,已知,[XT]补 =1 011010,求 [-XT]补
[-XT]补 =0 100101+1=0 100110
例 4.设 [x]补 =1.0101000,则
][ 21 x
补 =1.1010100
][ 81 x
补 =1.1110101
][ 41 x
补 =1.1101010
第 3章 运算器与运算方法
● 运算器部件是计算机中的执行部件,它可以对二进
制数据进行各种算术和逻辑运算;
?运算器也是计算机内部数据信息的重要通路。
● 本章重点介绍运算器的核心部件 ——算术逻辑运算
单元 ALU的组成与工作原理,以及数据在运算器的
基本运算方法。
3.1 基本组成
1,算术逻辑运算单元 ALU
▲ 运算器实现了对计算机中数据的加工处理;包括数
值数据的算术运算和逻辑数据的逻辑操作。
▲ 运算器中完成数据算术与逻辑运算的部件称之为算
术与逻辑运算单元( Arithmetic and Logic Unit,简
称 ALU)。 ALU是运算器的核心。
▲ ALU通常表示为两个输入端口,一个输出端口和多
个功能控制信号端的这样的一个逻辑符号。
图 3.1 ALU的逻辑符号表示与多路开关
2,通用寄存器组
▲ 运算器内设有若干通用寄存器,构成通用寄存器组;
用于暂时存放参加运算的数据和某些中间结果。
▲ 在运算器中用来提供一个操作数并存放运算结果的
通用寄存器称作为累加器。
?通用寄存器的数量越多,对提高运算器性能和程序
执行速度越有利。
?通用寄存器组是对用户开放的,用户可以通过指令
去使用这些寄存器。
?如,ADD A,Rj
3.专用寄存器
▲ 运算器需要记录下指令执行过程中的重要状态标记,
以及提供运算前后数据的暂存缓冲等,这通过在运
算器中设置若干专用寄存器来实现。
?循环计数器对程序员是透明的。
?程序状态字 PSW(Program Status Word),它存放着
指令执行结果的某些状态;如是否溢出、是否为零、
是否有进位 /借位、是否为负等。它对程序员是开放
的。
?堆栈指针 SP(Stack Pointer),它指示了堆栈的使用情
况。
4,附加的控制线路
▲ 在运算器中附加一些控制线路;以达到运算
速度快,运算精度高的目的,。
?如:运算器中的乘除运算和某些逻辑运算是通过移
位操作来实现的。在 ALU的输出端设置移位线路来
实现左移、右移和直送。
?移位线路是一个多路
选择器。
?图 3.2 实现移位功能的多
路选择器
3.2 算术与逻辑单元
3.2.1 半加器与全加器
◆ 运算器中各种运算都是分解成加法运算进行的,因
此加法器是计算机中最基本的运算单元。
1.半加器
▲ 两个一位二进制数相加 (不考虑低位的进位 ),称为半
加。实现半加操作的电路,称为半加器。
Xi Yi Hi Ci
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
表 3.1 半加运算的真值表
HA
??
Xi Yi Xi Yi
Hi Ci Hi Ci
图 3.3 (a) 逻辑图 (b) 符号表示
▲ 表 3.1 是两个一位二
进制数 Xi,Yi相加的
真值表,Hi和 Ci的逻
辑表达式如下:
iiiii YXYXH ?? iii YXC ?
2,全加器
▲ 考虑低位进位的加法运算就是全加运算,实现全加
运算的电路称为全加器。
▲ 根据真值表表 3.2
可写出 Fi和 Ci的逻
辑表达式:
11111 ????? ??????? iiiiiiiiiiiiiiii CYXCYXCYXCYXCYXF
iiiiiiiiiiiiiiiiii YXCYXCYXCYXCYXCYXC ??????? ????? 11111 )(
表 3.2 全加运算的真值表
图 3.4 全加器的逻辑图和符号表示
▲ 实现逻辑表达式的全加器逻辑图和全加器的符号表示
3.2.2 串行进位与并行进位
◆ n个全加器相连可得 n位的加法器;图 3.5是串行进位
或行波进位加法器。
图 3.5 n位加法器
◆ 先行进位或并行进位加法器
?预先形成各位进位,将进位信号同时送到各位全加
器的进位输入端。
▲ 就 4位加法器,讨论一下其进位 C1,C2,C3和 C4的产
生条件:
① 下述条件中任一条满足就可生成 C1=1:
1) X1,Y1均为, 1‖;
2) X1,Y1任一个为, 1‖,且进位 C0为, 1‖。
?可得 C1的表达式为:
C1=X1Y1+( X1+Y1) C0
② 下述条件中任一条满足,就可生成 C2=1。
1) X2,Y2均为,1‖;
2) X2,Y2任一个为,1‖,且进位 C1为,1‖。
?可得 C2的表达式为:
C2=X2Y2+(X2+Y2)C1
=X2Y2+(X2+Y2)X1Y1+(X2+Y2)(X1+Y1)C0
③ 同理,可得 C3的表达式为:
C3=X3Y3+(X3+Y3)C2
=X3Y3+(X3+Y3)[X2Y2+(X2+Y2)X1Y1+
(X2+Y2)(X1+Y1)C0]
= X3Y3+(X3+Y3)X2Y2+(X3+Y3) (X2+Y2)X1Y1+
(X3+Y3) (X2+Y2)(X1+Y1)C0
④ 同理,可得 C4的表达式为:
C4=X4Y4+(X4+Y4)C3
=X4Y4+(X4+Y4)[X3Y3+(X3+Y3)X2Y2+
(X3+Y3)(X2+Y2)X1Y1+(X3+Y3) (X2+Y2)(X1+Y1)C0]
=X4Y4+(X4+Y4)X3Y3+(X4+Y4)(X3+Y3)X2Y2+
(X4+Y4)(X3+Y3)(X2+Y2)X1Y1+
(X4+Y4) (X3+Y3) (X2+Y2)(X1+Y1)C0
▲ 定义两个辅助函数:
Pi= Xi+Yi
Gi= XiYi
? Pi表示 进位传递函数,当 Xi,Yi中有一个为,1‖时,
若有低位进位输入,则本位向高位传送进位。
? Gi表示 进位产生函数,当 Xi,Yi均为,1‖时,不管有
无低位进位输入,本位一定向高位产生进位输出。
▲ 将 Pi,Gi代入前面的 C1~C4式,可得:
C1=G1+P1C0
C2=G2+P2 G1+ P2P1C0
C3=G3+P3 G2+ P3 P2 G1+ P3 P2P1C0
C4=G4+P4 G3+ P4P3 G2+ P4P3 P2 G1 +P4P3 P2P1C0
▲ ―先行进位产生电路” (图 3.6 (a))及,4位先行进
位加法器”的逻辑图(图 3.6 (b))
图 3.6 (a) 先行进位产生电路
图 3.6 (b) 4位先行进位加法器
▲ 四个 4位先行进位加法器串接起来构成 16位加法器
?在各加法单元之间,进位信号是串行传送的,而在
加法单元内,进位信号是并行传送的。
图 3.7 组间为串行进位构成的 16位加法器
▲ 并行进位的概念可用于 16位加法器;进一步提高 16
位加法器的运算速度。
? Cm表示 4位加法器的进位输出,Pm表示 4位加法器的
进位传递输出,Gm表示 4位加法器的进位产生输出。
? Cm=Gm+PmC0
? Pm 和 Gm分别为:
Pm= P4P3P2P1
Gm= G4 +P4 G3 + P4P3G2 +P4P3P2G1
?应用于四个 4位先行进位加法器,则有,
Cm1=Gm1+Pm1C0
Cm2=Gm2+Pm2Cm1
= Gm2+ Pm2Gm1 + Pm2 Pm1C0
Cm3=Gm3+Pm3Cm2
= Gm3+ Pm3Gm2 + Pm3Pm2Gm1+ Pm3 Pm2 Pm1C0
Cm4=Gm4+Pm4Cm3
= Gm4+ Pm4Gm3 + Pm4Pm3Gm2+
Pm4Pm3Pm2 Gm1+ Pm4Pm3Pm2P m1C0
图 3.8 组间由先行进位链构成的 16位加法器
▲ 可将并行进位的概念用于更大位数的加法器上,随
着加法器位数的增加,加法电路变得越来越复杂。
3,3 定点加、减法运算
■ 计算机的一个重要特点是它只能用有限的
数码位数来表示操作数和操作结果。
?制定用来表示正、负数的各种码制;通过数据编码
来简化数据的运算,特别是补码,把加法和减法巧妙
地结合起来。
?定点加、减法运算只有在遵守模运算规则的限制条
件下其结果才是正确的,否则就会出现结果“溢出”。
3.3.1 补码定点加、减法
◆ 补码制的加、减法运算公式:
[X+Y]补 = ([X]补 +[Y] 补 ) MOD 2n
[X-Y]补 = ([X]补 +[-Y] 补 ) MOD 2n
?在补码制方法下,无论 X,Y是正数还是负数,加、
减法运算统一采用加法来处理;
? [X]补 和 [Y]补 的符号位和数值位一起参与求和运算,加、
减运算结果的符号位也在求和运算中直接得出。
◆ 例 1:已知 [X]补 =01001,[Y]补 =11100 ;
求 [X+Y]补, [X-Y]补 。
?则 [-Y]补 =00100
?[X+Y]补 = ([X]补 +[Y]补 ) MOD 2 5
=(01001+11100) MOD 2 5
=00101
?[X-Y]补 = ([X]补 +[-Y]补 ) MOD 2 5
=(01001+00100) MOD 2 5
=01101
?若结果超过了允许表示的最小负数时,产生的溢出称
为下溢。
◆ 当算术运算的结果超出了数码位数
允许的数据范围时,就产生溢出。
?对于 n位的二进制码表示的补码整数(符号位占一
位),它可表示的数据范围为 -2n-1~2n-1-1。
?若结果超过了允许表示的最大正数时,产生的溢出称
为上溢;
?在运算器中应设有溢出判别线路和溢出标志位。
◆ 例 2:已知 [X]补 =01010,[Y]补 =01010
[X+Y]补 =(01010+01010) MOD 2 5 = 10100 溢出
◆ 例 3:已知 [X]补 =10010,[Y]补 =00100
[X-Y]补 =(10010+11100) MOD 2 5 = 01110 溢出
?[10]10 + [10]10= [20]10>15 产生上溢
?[-14]10 - [4]10= [-18]10<-16 产生下溢
◆ 溢出常用的判别方法,
① 两个补码数实现加、减运算时,若最高数值位向
符号位的进位值 Cn-1与符号位产生的进位输出值
Cn不相同,表明加减运算产生了溢出 OVR;
?可以表示为:
OVR= Cn-1?Cn
OVR=1表示结果有溢出,OVR=0表示结果正确。
在例 1中,求 [X+Y]补 时,OVR= Cn-1?Cn =1?1=0,结果正确。
在例 2中,求 [X+Y]补 时,OVR= Cn-1?Cn =1?0=1,结果溢出。
在例 3中,求 [X -Y]补 时,OVR= Cn-1?Cn =0?1=1,结果溢出。
② 常用双符号位方法来判别加、减法运算是
否有溢出,正数的双符号位是 00,负数的
双符号位是 11。
?两个正数双符号位的运算为 00+00=00时,结果不溢出;
?两个正数双符号位的运算为 00+00+1=01时,结果上溢。
?两个负数的双符号位运算为( 11+11+1) MOD 4 =11
时,结果不溢出;
?两个负数的双符号位的运算为( 11+11) MOD 4=10
时,结果下溢。
▲ 采用模 4补码运算,其运算结果的 两个符号位不一致
时,产生溢出。
◆ 实现补码加、减法运算的逻辑电路 (图 3.15)
图 3.15 实现补码加减法运算的逻辑电路
▲ 它的核心部件是二进制并行加法器 F,它接收来自寄
存器 X和寄存器 Y的两个操作数。
▲ 用图 3.15 来实现加法 [X+Y]补 的逻辑操作步骤
如下:
① [X]补 ?寄存器 X,[Y]补 ?寄存器 Y。
② 给出控制信号,X ?F=1,Y?F=1,且 1?F =0 。
[X]补 和 [Y]补 送入加法器 F的两个输入端。
③ 并行加法器 F接收 [X]补 和 [Y]补,完成 [X]补 +[Y]补 的
加法过程,输出 [X+Y]补,并置溢出、进位等信号到
标志寄存器。
④ 给出控制信号,F?X=1,加法器 F的输出结果送入
寄存器 X。加法运算结束。
▲ 用图 3.15 来实现减法 [X-Y]补 的逻辑操作步骤如下:
① [X]补 ?寄存器 X,[Y]补 ?寄存器 Y。
② 给出控制信号,X?F=1,Y?F=1。 [X]补 和 [Y]补
=yn-1yn-2?? y0送入加法器 F的两个输入端。
③ 给出控制信号,1?F=1,并行加法器 F接收 [X]补,
[Y] 补 和进位信号 1,完成 [X]补 + yn-1yn-2 ……y 0+1=
[X]补 +[-Y] 补 的加法过程,输出 [X-Y]补,并置溢出、
进位等信号到标志寄存器。
④ 给出控制信号,F?X=1,加法器 F的输出结果
[X-Y]补 送入寄存器 X。减法运算结束。
▲ 当寄存器 X或寄存器 Y的内容送到加
法器 F时,将符号位等值扩充一位,
形成双符号位;双符号位只在加法
器中执行加法运算时是必要的。
▲ 寄存器 X、寄存器 Y和加法器 F的二进制位数对运算
数据和运算结果的大小 有限制作用,当超过了这些
运算结构所能表示的数据范围时,就产生溢出。
▲ 以加法器和通用寄存器的二进制位数定义为计算机
的 字长 。计算机的字长通常是 8的整数倍。
3.4 定点乘法运算
◆ 常规的乘法运算方法(定点小数)
?笔 ---纸乘法方法,
?原码乘法,
?带符号位运算的补码乘法,
◆ 用组合逻辑线路构成的阵列乘法器。
3.4.1 原码一位乘法
◆ 用原码实现乘法运算时,符号
位与数值位是分开计算的;
◆ 原码乘法运算分为二步;
?第二步是计算乘积的数值位;乘积的数值部分为两数
的绝对值之积。
?第一步是计算乘积的符号位;乘积的符号为相乘二数
符号的异或值。
◆ 用数学表达式描述原码乘法运算
?设,[X]原 =x0x1?? xn,[Y]原 =
y0y1?? yn (其中 x0, y0分别为它们的符
号位 )
?若 [X*Y]原 =z0z1?? z2n (其中 z0 为结果之符号位 )
则 z0= x0? y0
? z1?? z2n= (x1?? xn ) *(y1?? yn)
◆ 笔 ---纸乘法方法
▲ 例 1,X=0.1011,Y=0.1101,X*Y的笔 ---纸乘法过程:
0.1011 被乘数 X=0.x1x2x3x4=0.1011
* 0.1101 乘数 Y=0.y1y2y3y4=0.1101
1011 X* y4*2– 4
0000 X* y3*2– 3
1011 X* y2*2– 2
1011 X* y1*2– 1
0.10001111
?
?
? ??
4
1
1 0 0 0 1 1 1 1.0)2**(*
i
i
iYXYX
?因此 X*Y=0.10001111
◆ X*Y的笔 ---纸乘法过程中,计
算两个正数的乘法特点:
① 用乘数 Y的每一位依次去乘以被乘数,得 X*yi,i=4、
3,2,1。若 yi=0,得 0。若 yi=1,得 X。
② 把 ① 中求得的各项结果 X*yi在空间上向左错位排列,
即逐次左移,可以表示为 X* yi*2-i 。
③ 对 ② 中求得的结果求和,,这也就是两
个正数的乘积。 ??
?
4
1
)2**(
i
i
iYX
◆ 就笔 ---纸乘法方法,为提高效率
而采取的改进措施
① 每将乘数 Y 的一位乘以被乘数得 X*yi后,就将该结
果与前面所得的结果累加,而得到 P i,称之为部分
积;这减少了保存每次相乘结果 X*yi的开销。
② 将部分积 P i右移一位与 X*yi相加。加法运算始终对
部分积中的高 n位进行;因此,只需用 n位的加法器
就可实现二个 n位数的相乘。
③ 对乘数中,1‖的位执行加法和右移运算,对,0‖的
位只执行右移运算,而不执行加法运算。可以节省
部分积的生成时间。
▲ 已知两正小数 X和 Y,Y=0.y1y2?? yn,则:
? X*Y=X*(0.y1y2?? yn)
= X* y1*2-1 +X* y2*2-2 +X* y3*2-3 +------- +X* yn*2-n
◆ 部分积迭代法
=2-1 {2-1 [2-1------2-1 (2-1 (0 + X* yn)+ X* yn-1)+ ------+
X* y2]+ X* y1}
n个 2-1
?设 P0=0
P1= 2-1 (P0+ X* yn)
P2= 2-1 (P1+ X* yn-1)
Pi+1= 2-1 (Pi+ X* yn-i) ( i=0,1,2,3,?? n-1 )
Pn= 2-1 (Pn-1+ X* y1)
▲ 上述乘法运算可以归结为循环
地计算下列算式:
?显然,X*Y= Pn
▲ 迭代过程可以归结为:
?若 Yn-i的值为,1‖,将上一步迭代的
部分积 Pi 与 X相加。
?若 Yn-i的值为,0‖,什么也不做。再右移一位,产生
本次的迭代部分积 Pi+1。
?整个迭代过程以乘数最低位 yn和 P0=0开始,经过 n次
“判断 ——加法 ——右移”循环直到求出 Pn为止。
?Pn就为乘法结果。
▲ 实现这种方法的二个定点小数
乘法的逻辑电路框图
图 3.16 实现定点乘法运算的逻辑电路
C,P ? 0
X ? 被乘数
Y ? 乘数
C
n
? n
C,P ? P + X
结束
开始
C, P 和 Y 同时右移一位
C
n
? C
n
-1
C
n
=0
y
n
=1
图 3.17 两个定点小数的乘
法操作流程
▲ 例 1,已知 [X]原 =01101,[Y]原 = 01011,
? z1?? z8=1101*1011的计算采用上述乘法流程,实现
的具体过程如下:
?若 [X*Y]原 =z0z1?? z8
则 z0= 0? 0=0
C P Y 说明
0 0000 1011 开始,设 P0=0
+1101 y4=1,+X
0 1101 C,P 和 Y同时右移一位
0 0110 1 101 得 P1
+1101 y3=1,+X
1 0011 C,P 和 Y同时右移一位
0 1001 11 10 得 P2
y2=0,不作加法
C,P 和 Y同时右移一位
0 0100 111 1 得 P3
+1101 y1=1,+X
1 0001 C,P 和 Y同时右移一位
0 1000 1111 得 P4
? z1?? z8=10001111
? [X*Y]原 =z0z1?? z8=010001111
0 0110 1 101 得 P1
3.4.2 原码二位乘法
?为提高乘法的速度,可以对乘数的每两位取值情况进
行判断,一步求出对应于该两位的部分积。
◆ 在乘法中,乘数的每两位有四种可能的组合,每种
组合对应于以下操作:
◆ 原码二位乘法的思想
?采用原码二位乘法,只需增加少量的逻辑线路,就可
以将乘法的速度提高一倍。
00 ———Pi+1=2-2Pi
01 ———Pi+1=2-2(Pi +X)
10 ———Pi+1=2-2(Pi +2X)
11 ———Pi+1=2-2(Pi +3X)
? 实现 +3X有两种方法:
① 分 +X再 +2X来进行,次法速度较低。
② 以 4X-X来代替 3X运算,在本次运算中只执行 -X,
而 +4X则归并到下一拍执行。
Pi+1=2-2(Pi +3X)= 2-2(Pi -X+4X)= 2-2(Pi -X) +X。
◆ 用 yi-1,yi和 T三位来控制乘法操作
?触发器 T用来记录是否欠下 +X,若是,则 1?T
y
i - 1
y
i
T 操作 迭代公式
0 0 0 0 ? T 2
-2
(P
i
)
0 0 1 +X 0 ? T 2
-2
(P
i
+X )
0 1 0 +X 0 ? T 2
-2
(P
i
+X )
0 1 1 + 2 X 0 ? T 2
-2
(P
i
+2 X )
1 0 0 + 2 X 0 ? T 2
-2
(P
i
+2 X )
1 0 1 -X 1 ? T 2
-2
(P
i
-X )
1 1 0 -X 1 ? T 2
-2
(P
i
-X )
1 1 1 1 ? T 2
-2
(P
i
)
◆ 原码两位乘法运算规则
表 3.3 原码两位乘法运算规则
◆ 原码两位乘法运算过程举例
例 1,已知 [X]原 =0111001,[Y]原 = 0100111,
[|X|]补 =0111001, [-|X|]补 =1000111 ;
?若 [X*Y]原 =z0z1?? z12
则 z0= 0? 0=0
? z1?? z12=111001*100111 具体过程:
P Y T 说明
000 000000 100111 0 开始, P0=0,T=0
+111 000111 y5y6T=110, -X,T=1
111 000111 P和 Y同时右移 2位
111 000111 P和 Y同时右移 2位
111 110001 11 1001 1 得 P1
+001 110010 y3y4T=011, +2X,T=0
001 100011 P和 Y同时右移 2位
000 011000 1111 10 0 得 P2
+001 110010 y1y2T=100, +2X,T=0
010 001010 P和 Y同时右移 2位
000 100010 101111 0 得 P3
? z1?? z12=100010101111
?因此 [X*Y]原 =0100010101111
3.4.3 补码一位乘法
◆ 考查两个补码乘法运算的例子
例 1,已知 X=0.1011,Y=0.0001
[X]补 =01011,[Y]补 = 00001
[X*Y]补 =000001011
[X]补 *[Y]补 =000001011
?显然,[X*Y]补 =[X]补 *[Y]补
例 2,已知 X=0.1011,Y= - 0.0001
[X]补 =01011,[Y]补 = 11111
[X*Y]补 =111110101
[X]补 *[Y]补 =101010101
?显然,[X*Y]补 ?[X]补 *[Y]补
▲ 对两个正数来说,它们补码的乘积等于它们乘积的
补码。若乘数是负数时,这种情况就不成立了。
?若 [X]补 =x0x1 …… xn,[Y]补 = y0y1 …… yn 。
◆ 考查两个补码乘法运算的一般情况
?根据补码定义,可得出其真值,
Y= - y0+? yi2-i
i=1
n
? [X*Y]补 = [X*(-y0+? yi2-i)] 补
= [ ? X *yi2-i-X*y0]补
= ? [X *yi2-i]补 +[-X*y0]补
n
i=1
i=1
n
n
i=1
◆ Booth(布斯)乘法
?相乘二数用补码表示,它们的符号位与数值位一起
参与乘法运算过程,直接得出用补码表示的乘法结果,
且 正数和负数同等对待 。
▲ A.D.Booth算法思想:
▲ Booth算法推导:
?已知 [X]补 =x0x1 …… xn,[Y]补 = y0y1 …… yn ;根据补码
定义,可得出,
?根据补码定义,可得出其真值,
Y= - y0+? yi2-i
i=1
n
= - y0+y12-1+y22-2+y32-3+ …… +yn2-n
= - y0+(y1-y12-1)+ (y22-1-y22-2)+ …… + (yn2-(n-1)-yn2-n)
= (y1-y0)+ (y2-y1)2-1+ (y3-y2)2-2+ …… +
(yn-yn-1 )2-(n-1) +(0-yn )2-n
= ? (yi+1-yi)2-in
i=1
?设 yn+1=0(称为辅助位);有:
[X*Y]补 =[X*? (yi+1-yi)2-i]补n
i=1
={(y1-y0)X+ 2-1[( y2-y1)X + 2-1(( y3-y2)X + … +2-1((yn-i+1-yn-i)X+
… +2-1((yn-yn-1)X+2-1(yn+1-yn) X) … ) … ) ]}补
?得到如下递推公式:
[Pi+1]补 = [2-1(Pi + (yn-i+1-yn-i)X)]补 ( i= 0,1,2 … n )
?上式中 Pi为上次部分积,Pi+ 1为本次部分积。
令 [P0]补 = 0,有:
[P1]补 =[2-1(yn+1-yn)*X]补 (i= 0)
[P2]补 =[2-1(P1 + (yn-yn-1)*X)]补 (i= 1)
[Pn]补 =[2-1(Pn-1 + (y2-y1)*X)]补 (i= n-1)
[Pn+1]补 =[Pn + (y1-y0)*X]补
?经过比较可得
[X*Y]补 =[Pn+1]补 = [Pn + (y1-y0)*X]补
= [Pn ]补 + [ (y1-y0)*X]补
?对乘数的连续两位 yn-i和 yn-i+1进行判断
若 yn-i yn-i+1=01,则 [Pi+1]补 =[2-1(Pi + X)]补
若 yn-i yn-i+1=10,则 [Pi+1]补 =[2-1(Pi - X)]补
若 yn-i yn-i+1=00或 11,则 [Pi+1]补 =[2-1Pi ]补
?一个补码数据的右移是连同符号位右移,且最高位补
充符号位的值。
▲ 补码乘法运算规则:
① 乘数最低位增加一辅助位 yn+1= 0;
② 判断 yn-i yn-i+1的值,决定是,+X‖或,-X‖,或仅右
移一位,得部分积;
③ 重复第②步,直到最高位参加操作 (y1-y0)*X,但不
作移位,结果得 [X*Y]补 。
?图 3.18 是实现布斯乘法的算法流程图

是是

否否

3.
18









开始
yn+1,P?0
X?补码制的被乘数
Y?补码制的乘数
Cn?n
yn yn+1
P? P+X
Cn=0
P和 Y同时右移一位
Cn? Cn-1
yn yn+1
P? P-X
结束
▲ 例 3,已知 [X]补 =01101,[Y]补 = 10110,
[-X]补 =10011。
?用布斯乘法计算 [X*Y]补 的过程如下
P Y yn+1 说明
00 0000 10110 0 开始,设 y5=0,[P0]补 =0
y4 y5 =00,P,Y同时右移一位
00 0000 0 1011 0 得 [P1]补
+11 0011 y3 y4 =10,+[-X]补
11 0011 P,Y同时右移一位
11 1001 10 101 1 得 [P2]补
y2 y3 =11,P,Y同时右移一位
11 1100 110 10 1 得 [P3]补
11 1100 110 10 1 得 [P3]补
+00 1101 y1y2 =01,+[X]补
00 1001 P,Y同时右移一位
00 0100 1110 1 0 得 [P4]补
+11 0011 y0 y1 =10,+[-X]补
11 0111 1110 1 最后一次不右移
?因此,[X * Y]补 =101111110
▲ 布斯乘法的算法过程为 n+1次的“判断 —加减 —右移”
的循环,判断的次数为 n+1次,右移的次数为 n次。
▲ 在布斯乘法中,遇到连续的,1‖或连续的,0‖时,
是跳过加法运算,直接实现右移操作的,运算效率
高。
3.4.4 补码二位乘法
◆ 补码二位一乘的方法可以用布斯
乘法过程来推导
?[Pi+1]补 =2-1{[Pi]补 + (yn-i+1-yn-i)* [X] 补
?[Pi+2]补 =2-1{[Pi+1]补 + (yn-i-yn-i-1)* [X] 补
?[Pi+2 ]补 =2-2{[Pi ] 补 + (yn-i+1 +yn-i -2yn-i-1)* [X] 补
▲ 根据乘数的两位代码 yn-i-1和 yn-i以及右邻位 yn-i+1的值
的组合作为判断依据,跳过 [Pi+1]补 步,即从 [Pi]补 直
接求得 [Pi+2]补 。
乘数代码对 右邻位 加减判断规则 [Pi+2]补
yn-i-1 yn-i yn-i+1
表 3.4 乘数 3位代码组合构成的判断规则
0 0 0 0 2-2[Pi]补
0 0 1 +[X]补 2-2{[Pi]补 +[X]补 }
0 1 0 +[X]补 2-2{[Pi]补 +[X]补 }
0 1 1 +2[X]补 2-2{[Pi]补 +2[X]补 }
1 0 0 +2[-X]补 2-2{[Pi]补 +2[-X]补 }
1 0 1 +[-X]补 2-2{[Pi]补 +[-X]补 }
1 1 0 +[-X]补 2-2{[Pi]补 +[-X]补 }
1 1 1 0 2-2[Pi]补
◆ 设乘数 [Y]补 = y0y1 …… yn,导出
补码二位乘法中的计算量。
(1) 当 n为偶数时,乘法运算过程中的总循环次数为
n/2+1。
(2) 当 n为奇数时,乘法运算过程中的总循环次数
为( n+1) /2。
◆ 例 4:已知 [X]补 =00011,[Y]补 = 11010 ; [-X]补 =11101
。用补码二位乘法计算 [X * Y]补 的过程。
P Y yn+1 说明
000 0000 11010 0 开始,设 y5=0,[P0]补 =0
+111 1010 y3 y4 y5 =100,+2[-X]补
111 1010 P和 Y同时右移二位
111 1110 10 110 1 得 [P1]补
+111 1101 y1 y2 y3 =101,+[-X]补
111 1011 P和 Y同时右移二位
111 1110 1110 1 1 得 [P2]补
y0 y0 y1 =111,不做加法
最后一次不右移
? [X * Y]补 =111101110
3.4.5 阵列乘法器
◆ 实现上述执行过程的 阵列结构 的乘法器,
称为 阵列乘法器 (Array Multiplier)
◆ 图 3.19中实现了 X*Y的乘法运算,其中 X=x1x2 x3 x4,
Y= y1y2y3y4 。 X和 Y都是无符号的小数部分。
4 4 4
X * Y= ? X * y j 2 -j = ? ( ? x i *y j 2 -i )2 -j
j=1 j=1 i=1
▲ 上式中一位乘积 xi*yj用一个两输入端的“与”门实现;
?每一次加法操作用一个全加器实现;
? 2-i和 2-j 的因子所蕴含的移位是由全加器的空间错位来
实现。
部分积入 x
i
被乘数 X
y
I
y
i
0 x
1
0 x
2
0 x
3
0 x
4
y
4
进位出 进位入 0
P
1
y
3
0
部分积出 P
2
y
2
0 乘数 Y
P
3
y
1
0
1 2 3 4 5 6 7 8
乘积 X *Y =P
4
全加器
图 3.19 直接实现定点数绝对值相乘
的阵列乘法器
? Booth算法的乘法运算也可以用阵列乘法器的方法实
现,但要求的单元更复杂。
?阵列乘法器的组织结构规则性强,
标准化程度高。适合用超大规模
集成电路实现,且能获得很高的
运算速度。
?集成电路的价格不断下降,阵列乘法器在某些数字系
统中,例如在信号及数据处理系统中受到重视,它不
需要时钟脉冲,而其乘法速度仅决定于门和加法器的
传输延迟。
◆ 阵列乘法器的特点
3.5 定点除法运算
3.5.1 原码除法运算
◆ 笔 -纸方法的除法步骤:
① 被除数与除数比较,决定上商。若被除数小,上商 0;
否则上商 1。得到部分余数。
② 将除数右移,再与上一步部分余数比较,决定上商,
并且求得新的部分余数。
③ 重复执行第 ② 步,直到求得的商的位数足够为止。
例 1:已知两正数 X=0.10011101,
Y=0.1011
0, 1 1 1 0 商
0,1 0 1 1 0,1 0 0 1 1 1 0 1 被除数
0 0 0 0
除数 1 0 0 1 1 1 0 1
1 0 1 1 部分余数
1 0 0 0 1 0 1
1 0 1 1
1 1 0 0 1
1 0 1 1
0 0 1 1
0 0 0 0
0 0 1 1 余数
? X/Y的商为 0.1110,余数为 0.0011*2-4
?商的符号为相除两数符号的,异或,值,商的数值为
两数的绝对值之商。
▲ 原码一位除法规律
?原码一位除法运算与原码一位乘法运算一样,要区分
符号位和数值位 两部分。
◆ 计算机中实现二个正数除法时,
有几点不同:
① 比较运算用减法来实现,由减法结果的正负来判断
两数的大小。结果为正,上商 1;结果为负,上商 0。
② 减法运算时,加法器中两数的对齐是用 部分余数左
移 实现,并与除数比较,以代替除数右移 (手算时 )与
部分余数比较。左移出界的部分余数的高位都是 0,
对运算不会产生任何影响。
③ 在计算机中,每一次上商过程都是 把商写入商值寄
存器的最低位,然后部分余数和商一起左移,腾空
商寄存器的最低位以备上新的商。
◆ 采用部分余数减去除数的方法比
较两者的大小,当减法结果为负,
即上商 0时,破坏了部分余数。
可采取两种措施。
1,恢复余数的除法
▲ 两个正的定点小数 X和 Y,X=0.x1x2?? xn,
Y=0.y1y2?? yn,求解 X/Y的商和余数的方法:
第 1步,R1=X-Y
?若 R1<0,则上商 q0=0,同时恢复余数,R1=R1+Y。
?若 R1>=0,则上商 q0=1。
? q0位不是符号位,而是两定点小
数相除时的整数部分; q0=1时,
当作溢出处理。
第 2步:若已求得第 i次的部分余数为 Ri,则第 i+1次的部
分余数为,Ri+1= 2Ri-Y
?若 R i+1<0,上商 qi=0,同时恢复余数,R i+1=R i+1+Y。
?若 R i+1>=0,则上商 qi=1。
第 3步:不断循环执行第 2步,直到求得所需位数的商为
止。
例 1:已知 [X]原 =01011,[Y]原 = 11101;
求 [X/Y]原 。
?计算分为符号位和数值位两部分
?[X/Y]原 商的符号位,0?1=1
?[X/Y]原 商的数值位计算采用恢复余数法。运算中的减
法操作用补码加法实现。
?[-|Y|]补 =10011。
▲ 分别标识为 X和 Y运算过程:
部分余数 商 说明
00 1011 0000 开始 R0=X
+11 0011 R1=X-Y
11 1110 0000 0 R1<0,则 q0=0
+00 1101 恢复余数,R1=R1+Y
00 1011 得 R1
01 0110 000 0 2R1(部分余数和商同时左移)
+11 0011 -Y
00 1001 000 01 R2>0,则 q1=1
01 0010 00 01 2R2 (左移 )
+11 0011 -Y
00 0101 00 011 R3>0,则 q2=1
00 0101 00 011 R3>0,则 q2=1
00 1010 0 011 2R3 (左移 )
+11 0011 -Y
11 1101 0 0110 R4<0,则 q3=0
+00 1101 恢复余数,R4=R4+Y
00 1010 0 0110 得 R4
01 0100 0110 2R4 (左移 )
+11 0011 -Y
00 0111 01101 R5>0,则 q4=1
?可见商的数值位为 1101
?[X/Y]原 =11101 (最高位为符号位 ),余数为 0.0111*2-4。
加法器 加法和移位 控制逻辑
Q qn
Y
计数器 CnR
加法
移位控制
上商
图 3.20 实现两个正数除法的逻辑线路图
开始
R?被除数,Q=0
Y?除数
Cn?n
R? (R)-(Y)
(R)<0
置溢出标志
(或上商,1‖)
R,Q同时左移一位
R? (R)-(Y)
qn?0
R? (R)+(Y)
(R)<0
qn?0
R? (R)+(Y)qn?1
Cn? (Cn) -1
(Cn )=0
结束



是否

图 3.21 恢复余数除法的运算流程图
2,不恢复余数的除法 (加减交替法 )
▲ 当第 i次的部分余数为负时,跳过恢复
余数的步骤,直接求第 i+1次的部分余
数 。这种消除前一算法中恢复余数步
骤的算法称之为不恢复余数除法。
▲ 对两个正的定点小数 X和 Y采用不恢复余数除法的基
本步骤:
第 1步,R1=X-Y
?若 R1<0,则上商 q0=0;
?若 R1>=0,则上商 q0=1;
? q0代表两定点小数相除时的整数部分,当 q0=1时,将
当作溢出处理。
第 2步:若已求得部分余数 Ri,
则第 i+1次的部分余数为:
?若 R i< 0,上商 q i -1= 0,Ri+1= 2Ri+Y,
上一步中多减去的 Y在这一步中弥补回来;
?若 R i> = 0,上商 q i-1 = 1,Ri+1= 2Ri-Y,保持原有的
除法过程;
第 3步:不断循环执行第 2步,直到求得所需位数的商为
止。
?结束时,若余数为负值,要执行恢复余数的操作
Rn= Rn+Y。
图 3.22 实现两正定
点数相除的不恢复
余数除法运算流程
?[X/Y]原 商的数值位的计算采用不恢复余数的除法
?参加运算的数据是 [|X|]补 和 [|Y|]补 两数,分别标识为 X
和 Y; [-|Y|]补 =10011。
例 1:已知 [X]原 =01011,
[Y]原 = 11101 ; 计算 [X/Y]原 。
?计算分为符号位和数值位两部分
?[X/Y]原 商的符号位,0?1=1
?运算过程如下:
部分余数 商 说明
00 1011 0000 开始 R0=X
+11 0011 R1=X-Y
11 1110 0000 0 R1<0,则 q0=0
11 1100 000 0 2R1(部分余数和商同时左移)
+00 1101 +Y
00 1001 000 01 R2>0,则 q1=1
01 0010 00 01 2R2(左移)
+11 0011 -Y
00 0101 00 011 R3>0,则 q2=1
00 0101 00 011 R3>0,则 q2=1
00 1010 0 011 2R3(左移)
+11 0011 -Y
11 1101 0 0110 R4<0,则 q3=0
11 1010 0110 2R4 (左移)
+00 1101 +Y
00 0111 01101 R5>0,则 q4=1
?商的数值位为 1101
?[X/Y]原 =11101。因为 R5>0,所以,余数为 0.0111*2-4。
? n位数的不恢复余数除法需要 n次加法运算。对恢复
余数除法来说,平均需要 3n/2次加法运算。
▲ 在不恢复余数除法运算中,每一位商的计算或是加
法,或是减法,而不是两者都要。
3.5.2 补码除法运算
◆ 补码除法与原码除法比较
(1) 在原码除法中,符号位与数值
位区分开来运算,除法运算是
在两数的绝对值上进行的。
?在补码除法中,符号位与数值位同等参与整个除法运
算过程,商的符号位在除法运算中产生。
(2) 部分余数和除数都用带符号位的补码表示时,部分
余数与除数是否够除,就不再能用两数直接相减的
方法来判断。
?两数同号时,用减法判断,差的符号与除数符号一
致表示够除,否则为不够除。两数异号时,用加法判
断,和的符号与除数符号一致表示不够除,否则为够
除。
部分余
数 [R]补
除数
[Y]补
[R]补 - [Y]补 [R]补 + [Y]补
0 1 0 1
0 0
0 1
1 0
1 1
够减 (商 1) 不够减 (商 0)
够减 (商 1)
够减 (商 1)
不够减 (商 0)
不够减 (商 0)
不够减 (商 0)
够减 (商 1)
表 3.5 两补码数是否够减的判别方法
?表中的 0或 1表示相应数的符号值
(3) 补码除法的结果是连同符
号位在内的补码形式的商。
?两数同号,商为正数,够减
上商,1‖,不够减上商,0‖;
?两数异号,商为负数,够减上商,0‖,
不够减上商,1‖;
?除法结束后,可在最低位加 1的办法求出补码值的商。
◆ 被除数为 [X]补,除数为 [Y]补,则 [X/Y]补 的补码除法
运算规则:
?在这里需做除法溢出判断:
若 [X] 补 与 [Y]补 同号且上商 q0=1,则溢出。
第 1步:若 [X]补 与 [Y]补 同号:
R1=[X] 补 -[Y]补
?若 [X]补 与 [Y]补 异号,R1=[X]补 +[Y]补
?若 R1与 [Y]补 同号:上商 q0=1
?若 R1与 [Y]补 异号:上商 q0=0
?若 [X] 补 与 [Y]补 异号且上商 q0=0,则溢出。
第 2步:若已求出部分余数 Ri,
? Ri与 [Y]补 同号,Ri+1 =2 Ri-[Y]补
? Ri与 [Y]补 异号,Ri+1 =2 Ri+[Y]补
?同样,若 Ri+1与 [Y]补 同号:上商 qi=1
第 3步:重复执行第 2步,直到求得足够位数的商为止。
商为负数时,商的末位加 1。
?若 Ri+1与 [Y]补 异号:上商 qi=0
例 3:已知 [X] 补 =10111,[Y] 补 = 01101。
▲ [X/Y] 补 的计算过程如下:
部分余数 商 说明
11 0111 0000 开始 R0=[X]
+00 1101 R1=[X]+[Y]
00 0100 0000 1 R1与 [Y]同号,则 q0=1
00 1000 000 1 2R1(部分余数和商同时左移)
+11 0011 +[-Y]
11 1011 000 10 R2与 [Y]异号,则 q1=0
11 0110 00 10 2R2
+00 1101 +[Y]
00 0011 00 101 R3与 [Y]同号,则 q2=1
00 0011 00 101 R3与 [Y]同号,则 q2=1
00 0110 0 101 2R3
+11 0011 +[-Y]
11 1001 0 1010 R4与 [Y]异号,则 q3=0
11 0010 1010 2R4
+00 1101 +[Y]
11 1111 10100 R5与 [Y]异号,则 q4=0
+ 1 商为负数,末位加 1
10101
?[X/Y] 补 =10101; 余数为 11111*2-4 。
3.5.3 阵列除法器
▲ 图 3.23(a) 是一个组合逻辑单元;
包含借位入和借位出的全减器。
◆ 用组合逻辑线路来完成除法运算
? X:被减数二进制代码
? Y:减数二进制代码
? t,低位传送来的借位入信号
? u,本单元送往高位的
借位出信号; u= XY+X t+Yt
? a,控制信号;这个控制信号一方面决定本单元 R的生
成值,另一方面也传送给低位。
? R,本单元的结果,即本位的差; R=X?a (Y?t);
当 a=0时,R=X-(Y+t) ;当 a=1时,R=X。
图 3.23(a)
图 3.23 直接实现定点数绝对值相除的阵列除法器
图 3.23(a) 图 3.23(b)
3.6 浮点运算
3.6.1 浮点加、减法
▲ 两个二进制浮点数 X和 Y可以表示为:
? X=Mx*2E x,Y=My*2E y,
◆ 浮点数 X和 Y加减法运算的规则
? X?Y的结果表示为 Mb*2Eb。
?浮点数 X和 Y是按规格化数存放的,它们运算后的结
果也应该是规格化的。
▲ 考查十进制数的加法运算
? 123*102+456*103=12.3*103+456*103
? =(12.3+456)*103=468.3*103
▲ 推论浮点数 X和 Y加减法运算的规则为:
? X-Y= ( Mx*2E x- E y - My)*2 E y,
? X+Y= ( Mx*2E x- E y + My)*2 E y,
不失一般性,设 E x≤ E y
◆ 计算机中实现 X和 Y加、减
法运算的步骤为:
第 1步:对阶
▲ 阶码的比较通过两阶码的减法来实现,对阶使得原
数中较大的阶码成为两数的公共阶码;
?小阶码的尾数按两阶码的差值决定右移的数量。
▲ 两阶码的差值表示为,?E= E x- E y
?若 ?E≤ 0,则 E b? E y,E x? E y,Mx? Mx*2E x- E y
?若 ?E>0,则 E b? E x,E y? E x,My? My*2E y- E x
▲ 小阶码的尾数右移时应注意:
① 原码形式的尾数右移时,符号位不参加移位,数值
位右移,空出位补 0。
② 尾数的右移,使得尾数中原来 |?E |位有效位移出 。
?补码形式的尾数右移时,符号位与数值位一起右移,
空出位填补符号位的值。
?移出的这些位不要丢掉,应保留,并且参加后续运算。
这对运算结果的精确度有一定影响。
?保留的多余的位数称为 警戒位 。
第 2步:尾数加减
▲ 对尾数进行加、减运算
? Mb?Mx ?My
第 3步:尾数规格化
▲ 设浮点数的尾数用补码表示,且加、减运算时采用
双符号位,则规格化形式的尾数应是如下形式:
?尾数为正数时,001xx? x
?尾数为负数时,110xx? x
▲ 尾数违反规格化的情况有
以下两种可能:
① 尾数加、减法运算中产生溢出
?正溢出时,符号位为 01
② 尾数的绝对值小于二进制的 0.1。补码形式的尾数表
现为最高数值位与符号位同值。
?规格化采取的方法是:
尾数右移一位,阶码加 1;这种规格化称为右规。
表示为,Mb?Mb*2-1,Eb?Eb+1。
?负溢出时,符号位为 10
?尾数为正数时,00 00---01x--x
K个 0
符号位 数值位
?尾数为负数时,00 11---10x--x
K个 1
符号位 数值位
?采取规格化的方法:
符号位不动,数值位逐次左移,阶码逐次减 1,直到
满足规格化形式的尾数,即最高数值位与符号位不
同值为止。
?这种规格化称为左规。
表示为,Mb?Mb*2k,Eb?Eb-k
第 4步:尾数的舍入处理
▲ 对结果尾数进行舍入处理方法
① 0舍 1入法
?警戒位中的最高位为 1时,就在尾数末尾加 1;
② 恒置 1法
?不论警戒位为何值,尾数的有效最低位恒置 1。
?警戒位中的最高位为 0时,舍去所有的警戒位;
?这种方法的最大误差为 ?2-(n+1),n为有效尾数位数。
?恒置 1法产生的最大误差为 ?2-n,n为有效尾数位数。
?无论警戒位的值是多少,都舍去。
③ 恒舍法
▲ 上述几种简单的舍入方法对原码形式的尾数进行舍
入处理,舍入的效果与真值舍入的效果是一致的。
?称为趋向零舍入 (Round toward zero)。
?对于 补码形式的负的尾数 来说,所进行的舍入处理将
与真值的 舍入效果可能不一致 。
?尾数的结果就取其有效的 n位的值。
例 1:已知有 X= - 0.101010,
[X]补 =1010110,
有效小数位数为 4位
?[X]补 =10110 (入),此时,对应的 X= - 0.1010
?对负数的补码来说,执行 0舍处理使得原值变大,1入
处理反而使得原值变小。
▲ 对于 0舍 1入法,负数补码的舍入规则为:负数补码
警戒位中的最高位为 1且其余各位不全为 0时,在尾数
末尾加 1,其余情况舍去尾数。
?分别对 X和 [X]补 采用 0舍 1入法
进行舍入处理;可得:
? X= - 0.1011 (入)
?在例 1中重新对 [X]补 舍入后得:
[X]补 =10101 (舍);
?应对应的 X= - 0.1011,等同与对
真值 X的舍入。
▲ 舍入处理后需检测溢出情况;若溢出,需再次规格
化(右规)。
第 5步:阶码溢出判断
?若阶码 Eb正溢出,表示浮点数已超出允许表示数范围
的上限,置溢出标志 。
?若阶码 Eb负溢出,运算结果趋于零,置结果为机器零。
?浮点数加、减法运算正常结束,浮点数加、减法运算
结果为 Mb*2E b。

3.
24











例 2:已知 X=0.11011011*2010,
Y=-0.10101100*2100;
?用补码来表示浮点数的尾数和阶码
?[X]浮 =0 0 010 11011011
?[Y]浮 =1 0 100 01010100
数符 阶符 阶码 尾数
▲ [X+Y]浮 = Mb*2E b,执行 [X+Y]浮 的过程如下:
① 对 阶
??E= E x- E y=00 010+11 100=11 110
?即 ?E= -2,Mx右移两位,Mx =0 0011011011
? E b= E y =0 100 警戒位
② 尾数加法
? M b= M x+ M y
00 00110110 11
+11 01010100
11 10001010 11
?因此 M b=11 10001010 11
警戒位
③ 尾数规格化
?尾数没有溢出,但符号位与最高数值位有 K=1位相同,
需左规:
? M b左移 K=1位,M b =11 00010101 1
? E b减 1,E b =00 011
④ 舍入处理
?采用 0舍 1入法,根据负数补码
舍入规则,执行舍操作。
?得,M b =11 00010101
⑤ 阶码溢出判断
?阶码无溢出,X+Y正常结束,得:
?[X+Y] 浮 =1 0 011 00010101,
?即 X+Y= -0.11101011*2011
3.6.2 浮点乘、除法运算
◆ 对浮点数的乘、除法运算来说,
免去对阶这一步;两者对结果
的后处理是一样的。
?包括结果数据规格化、舍入处理和阶码判断。
◆ 对两个规格化的浮点数 X=Mx*2E x,Y=My*2E y,实
现乘、除法运算的规则如下:
? X*Y= (Mx*2E x )*(My*2E y) =(Mx* My ) *2E x+ E y
? X/Y= (Mx*2E x )/(My*2E y) =(Mx/ My ) *2E x- E y
◆ 浮点数的乘法和除法的运算步骤
1.浮点数乘法的运算步骤
( 1)两浮点数相乘
?两浮点数相乘,乘积的阶码为相乘两数的阶码之和,
尾数为相乘两数之积。可以表示为:
? Mb= Mx* My Eb= E x+ E y
( 2)尾数规格化
? Mx和 My都是绝对值大于或等于 0.1的二进制小数,因
此,两数乘积 Mx* My的绝对值是大于或等于 0.01的二
进制小数。
?不可能溢出,不需要右规。对于左规来说,最多一位,
即 Mb最多左移一位,阶码 Eb减 1。
( 3)尾数舍入处理
? Mx* My产生双字长乘积,如果
只要求得到单字长结果,那么
低位乘积就当作警戒位进行结
果舍入处理。
?若要求结果保留双字长乘积,就不需要舍入处理了。
( 4)阶码溢出判断
?对 Eb的溢出判断完全相同于浮点数加、减法的相应
操作。

3.
25










3,浮点数除法的运算步骤
( 1)除数是否为 0,若 My =0,出错报告 。
( 2)两浮点数相除
?两浮点数相除,商的阶码为被除数的阶码减去除数的
阶码。商的尾数为相除两数的尾数之商。
?可以表示为,Mb= Mx/ My, Eb= E x- E y
( 3)尾数规格化
? Mx和 My都是绝对值大于或等于 0.1的二进制小数,因
此,两数相除 Mx/ My的绝对值是大于或等于 0.1且小
于 10 的二进制小数。所以,对 Mb不需要左规操作。
?若溢出,执行右规,Mb右移一位,阶码 Eb加 1。
( 4)尾数舍入处理
( 5)阶码溢出判断
?( 4)、( 5)两步操作相同于浮点数加、
减法的相应操作。

3.
26










3,7 十进制数的加、减法运算
■ 在二进制加、减法运算的基础上,通
过适当的校正来实现将二进制的“和”
改变成所要求的十进制格式。
1.十进制的加法运算
◆ BCD码加法结果修正的具体规则:
( 1)两个 BCD数码相加之和等于或小于 1001,即十进
制的 9,不需要修正。
( 2)两个 BCD数码相加之和大于或等于 1010且小于或
等于 1111,即位于十进制的 10和 15之间,需要在本
位加 6修正。修正的结果是向高位产生进位。
( 3)两个 BCD数码相加之和大于 1111
,即十进制的 15,加法的过程已
经向高位产生了进位,对本位也
要进行加 6修正。
◆ 下面三个例子可以理解 BCD码的加法运算
例 1:( 15) 10+( 21) 10=( 36) 10
? BCD码加法运算,0001 0101 15
+ 0010 0001 +21
0011 0110 36
?每个十进制位的 BCD码和均小于 9,因此,对计算结
果无需修正
例 2:( 15) 10+( 26) 10=( 41) 10
? BCD码加法,0001 0101 15
+ 0010 0110 + 26 进位
0011 1011 41
修正 + 0110
0100 0001
?在 BCD码的加法运算中,低十进制位的二进制加法和
是 1011,大于 1001;
?需要在该位 +6修正;修正使得本位结果正确,同时向
上一位产生进位。
例 3:( 18) 10+( 18) 10=( 36) 10
BCD码加法,0001 1000 18
+ 0001 1000 + 18 进位
?在 BCD码的加法运算中,低十进制位的二进制加法和
大于 1111,向高十进制位产生了进位,此时,也需要
对该十进制位进行 +6修正。
▲ 处理 BCD码的十进制加法器只需要在二进制加法器
上添加适当的校正逻辑就可以了
0011 0000 36
修正 + 0110
0011 0110
◆ 实现 Xi和 Yi相加的 BCD码加法器
? BCD码分别是 xi8xi4xi2xi1和 yi8yi4yi2yi1得到 4位二进制
和 zi8*zi4*zi2*zi1*和进位输出 Ci+1*。
?十进制加法器用进位信号 Ci+1产生校正因子 0或 6。
?校正逻辑为,Ci+1= Ci+1* + zi8* zi4*+zi8*zi2*
和大于 1001和大于 1111
FA FAFAFA
FA FA FA
zi8 zi4 zi2 zi1
xi8 yi8 xi4 yi4 xi2 yi2 xi1 yi1
Ci+1
Ci+1*
图 3.27 处理一位十进制数字的 BCD码加法器
zi8* zi4* zi2* zi1*
◆ 用 n个一位十进制数字的 BCD
码加法器可以构成一个 n位十进
制数的串行进位加法器
处理一位
十进制数
字的 BCD
码加法器
处理一位
十进制数
字的 BCD
码加法器
处理一位
十进制数
字的 BCD
码加法器
4 4 4 4 4 4
Xn-1 Yn-1 X1 Y1 X0 Y0
Zn-1 Z1 Z0
4 4 4
Cn Cn-1 C2 C1 C0
图 3.28 n位十进制数的 BCD码串行进位加法器
2.十进制的减法运算
◆ 在计算机中,两个 BCD码的十进
制位的减法运算,通常采用先取
减数的模 9补码或模 10补码,再
与被减数相加的方法实现。
◆ BCD编码的十进制数字的模 9补码的产生方法
(1) 先将四位二进制表示的 BCD码按位取反,再加上二
进制 1010(十进制 10),加法的最高进位位丢弃。
例如,BCD码 0011(十进制 3)
模 9补码计算方法为:
?先对 0011按位取反得 1100,
再将 1100加上 1010且丢弃最高进位位
得 0110(十进制 6),
?显然 0011的模 9补码是为 0110。
(2) 先将四位二进制表示的 BCD码加上 0110(十进制 6),
再将每位二进制位按位取反。
例如,BCD码 0011(十进制 3)的模 9补码的计算方法:
?先计算 0011+0110=1001;
?再对 1001按位取反得 0110。
◆ 实现 BCD码的十进制数字 Y的
模 9补码的组合电路
▲ 设 Y的 BCD码为 y8y4y2y1,
Y的模 9补码表示为 b8b4b2b1;
y8y4y2y1和 b8b4b2b1之间的真值表关系:
表 3,6 十进制数字 Y 模 9 补码的真值表
y
8
y
4
y
2
y
1
b
8
b
4
b
2
b
1
0 0 0 0 1 0 0 1
0 0 0 1 1 0 0 0
0 0 1 0 0 1 1 1
0 0 1 1 0 1 1 0
0 1 0 0 0 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 0 1 1
0 1 1 1 0 0 1 0
1 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0
? 根据真值表得出,b1= y1
b2= y2
b4= y4 y2 +y4 y2
b8= y8 y4 y2
?上式中加入变量 M,并改写为如下式子:
b1= y1 M+y1 M
b2= y2
b4= y4M+ (y4y2 +y4y2)M (3-15)
b8= y8M+y8 y4 y2 M
?当 M=0时,b8b4b2b1表示 Y本身;
当 M=1时,b8b4b2b1表示 Y的模 9补码。
▲ 实现上式的组合电路的逻辑符号
BCD模
9补码
y8 y4 y2 y1
b8 b4 b2 b1
M
BCD码加法器 (图 3.27)
BCD模 9
补码
Ci+1 C i
y8 y4 y2 y1
z8 z4 z2 z1
M
图 3.29 实现式( 3-15)
的组合电路符号表示
图 3.30 两个 BCD码的加
减法运算线路
x8 x4 x2 x1