第一章 概述
?计算机是一种能对数字化信息进行自
动高速运算的通用处理装置。
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
?计算机是一种能对数字化信息进行自
动高速运算的通用处理装置。
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