计算机组成原理 教案 唐朔飞 下载本文

内容发布更新时间 : 2024/11/5 20:42:27星期一 下面是文章的全部内容请认真阅读。

3. 二进制定点乘法

在计算机中,运算使用全加器,一次只能两个数相加,所以采用累加的方式即:A=A+B,其中A中放入的是累加的结果(部分积),B中放入的是乘数的某一位与被乘数相乘的结果(被乘数);而在计算机中都是定点小数运算,为了保证每一位的正确位置,采用移位的方式(右移1位),所以在计算机中做乘法,就是靠累加和移位实现的。

1) 定点原码一位乘法。

两个原码相乘,积的符号由两原码的符号异或而成,积的值由两个原码的绝对值相乘而得。实现原码一位乘,电路中应该设有寄存器A、B、C;计数器Count,其中寄存器A用于存放部分积,他在运算之初为0,在运算过程中,每次累加的结果放入A,最终A保存的是积的高位部分,寄存器B用于存放被乘数,寄存器C用于存放乘数,由于每次移位都是A、C同时移动,所以当运算结束的时候C保存的是积的低位部分。计数器Count中保存的是被乘数、乘数的数值位数。注:原码移位的时候采用的是逻辑移位。

2) 定点补码一位乘

补码乘法与原码乘法相似,不同之处是补码的符号位可以直接参与运算。要实现补码一位乘,电路中应该设有寄存器A、B、C;计数器Count,其中寄存器A用于存放部分积,他在运算之初为0,在运算过程中,每次累加的结果放入A,最终A保存的是积的高位部分,寄存器B用于存放被乘数补码数值部分,寄存器C用于存放乘数补码数值部分,由于每次移位都是A、C同时移动,所以当运算结束的时候C保存的是积的低位部分。计数器Count中保存的是被乘数、乘数的数值位数。注:采用校正法,每次做加法之后要算术右移,但做校正时只加,不移位。

3) 原码两位乘法 (软件工程、物联网、信息管理专业略)

进行原码两位乘法的时候,当乘数末两位为00则A=A+0;当乘数末两位为01则A=A+X;当乘数末两位为10则A=A+2X;当乘数末两位为11则A=A+3X。由于3X不好实现所以改为4X-X,即当乘数末两位为11则A=A-X,

然后右移2位,并设标志位CJ=1。 关于原码两位乘的说明:

○1符号位由两个乘数的的符号位相异或,数值的绝对值相乘(符号位三位防止假溢出)。

○2运算规则见上表,+X表示加被乘数的绝对值,-X表示加被乘数的绝对值的补。

○3乘数如果为奇数位时,末位加个?0?,或最后一次移位只移动一位。

- 25 -

○4运算到最高数值位结束,但当此时CJ=1,要追加一个+X,但不移位。 4.补码两位乘法

采用两位布斯算法,所以要加一个附加位,置为0。说明:对于数值位为奇数n个位的数来说,操作(n+1)/2次,且最后一次只右移1位。对于数值位为偶数n个位的数来说,○1补个?0?,操作n/2+1次,且最后一次只右移1位。○2Y采用双符号操作n/2+1次,且最后一次不移位。

第四节 浮点四则运算

1. 浮点数加减法 1) 检测操作数是否为0

判断浮点数为0 的方式:(1)尾数为0,(2) 阶码下溢 加法:如果有一个为0,和就是另一个数。

减法:如果被减数为0,差为减数求补;如果减数为0,差为被减数。 2) 对阶:调整两个浮点数的阶码,使他们的阶一致。通常把阶小的数调整成与阶大的一致。

3) 数相加减:其方法与定点数相同。

4) 结果规格化:运算完毕,当尾数的绝对值大于等于1时,尾数右移1位,阶加1,使之规格化,成为右规;当尾数的绝对值小于1/2时,尾数左移,阶相减,使之规格化,成为左规。通常浮点数加减运算不会溢出,但是理论上仍然有溢出的可能。例如两个极大的数相加,规格化时,导致阶码溢出,此时浮点数溢出。

5) 舍入:由于对阶的时候阶小的要与阶大的对齐,所以常常会导致一些阶小的浮点数的一些数据被移出浮点数的尾数(尾数的位数不够),所以要采取舍入处理。以一个8位阶24位尾的浮点数为例。

○1截断法:把多余部分截去。

电路可以不加任何多余电路,误差最大。最大误差≈2-23。如果尾数采用补码,正数和负数的积累误差最大,正数积累误差偏负(比实际值小),负数积累误差偏正(比实际值大),如果把数据一起考虑总误差为0。

○2舍入法:0舍1入。

电路加1位,最大误差≈2-24,如果尾数采用补码,正数和负数的积累误差比○3小。

○3恒1法:末位恒置1。

电路可以不加任何多余电路,最大误差≈2-23,如果尾数采用补码,正数和负数的积累误差比○1小。

- 26 -

○4查表舍入法

它把尾数的低K-1位和被舍入部分的最高位送入一个ROM表,通过表的内容得到对应的近似结果。这个方法电路复杂,但是速度快,ROM速度比做加法快,平均误差≈0,如果尾数采用补码,正数和负数的积累误差最小。

6) 溢出判断:当阶码部分正溢,则称浮点数上溢出,进入溢出处理;当阶码部分负溢,则称浮点数下溢出,浮点数直接置为0(尾数为0)。

2. 浮点乘法

(1) 检查操作数是否为0,并置结果符号。如果有一个操作数为0,结果为0。 (2) 阶码相加:阶码相加可能会产生溢出,上溢出进入溢出处理,下溢出直接积为0。

(3) 尾数相乘:方法同定点乘法。 (4) 规格化。 (5) 舍入 (6) 溢出处理

第五节 算术逻辑单元

1. 算术逻辑运算部件(ALU) 参见书中281页图6.17。 2. 先行进位链

通过对一位全加电路的学习我们知道,一位全加器有三个输入A(被加数)、B(加数)、C(低位向本位的进位)和两个输出X(本位向高位的进位)、S(和),如果要进行多位二进制数相加,则需要多个全加器。

由图可知,此种形式的多位加法器要计算出每位向其高位的进位才能使加法器顺利工作。

本章思考题

1. 说明补码、原码、反码的区别和联系。 2. 如何理解补码不需要设置减法电路?

3. 为什么浮点数计算是衡量现代计算机的重要指标,而不是定点数? 4. 简述ALU在计算机系统的作用。

5. 试述乘法和加法在软件实现中的效率。

- 27 -

第七章 指令系统

教学时数:8学时

教学目的与要求:使学生了解指令系统的概念,指令格式的基本特点,所需硬件支持,掌握简单的指令格式设计技术,为进一步学习CPU结构打基础。

教学重点:指令格式与性能指标、指令和数据的寻址方式。 教学难点:指令的格式设计、RISC与CISC架构。

第一节 机器指令

计算机指令就是计算机硬件能够识别并直接执行的操作命令。指令系统是指一台计算机所能执行的全部的指令称为该机的指令系统。指令系统表明了计算机的硬件功能,从而决定如何使用计算机(编译软件),而CPU的基本任务是解释执行指令代码,这又决定了硬件逻辑设计,因此说指令系统是CPU硬件与软件的界面。

1. 指令格式

计算机指令编码的格式称为指令格式。

指令格式指定指令中编码字段的个数、个字段的位数,以及各字段的编码方式,以便于指令进行译码。指令由操作码(OP)和地址码(AD)两部分构成。操作码说明指令所要完成的操作,地址码说明指令操作对象(或者是操作数或者是操作数的地址)。通常,地址码很少直接给出操作数本身,多是指明操作数的来源,有的还要指明运算结果保存于何处,以及下一条指令从何处取等问题。在指令格式设计时应该考虑以下四点:

指令长度:指令长多少位,是定长度还是变长度

操作码:操作码结构需要多少位,位数固定还是可扩展,是一段操作码还是若干段组合

地址结构:一条指令涉及到哪些地址,在指令中给出哪些地址,哪些地址隐含约定。

寻址方式:如何获得操作数的地址,是直接、间接还是经过计算获得。

第二节 操作数类型和操作类型

1. 指令长度

字长:计算机能直接处理的二进制数据的位数。他是计算机的一个重要指标,字长决定着计算机的运算精度。

指令的长度是由操作码的长度与地址码的长度共同作用的,地址码的长度决定了指令的直接寻址能力。指令长度应该是字节的整数倍,指令长度有定长(如模型机)和不定长(PC机)之分。指令长度与机器字长没有固定关系,一般情况指

- 28 -

令长度大于或等于字长。指令长度越长,指令所能表示的操作信息和地址信息就越多,指令的功能就越丰富。但是同时指令越长,指令所占存储空间越多,读指令的时间就越长,CPU的译码电路就越复杂。因此早期的计算机(如NOVA系列)采用的是16位定长指令格式。

目前的RISC系统也建议尽可能的采用短指令长度。但在实际应用中我们发现,一个指令系统中的指令长度是很难固定的,因此现代计算机广泛采用变长度指令长度。如Inter系列,8088采用1-6个字节变长指令格式,它的第一个字节是操作码,第二个字节是寻址方式和寄存器号,其后两个字节是位移量或是立即数,或再跟两个字节的立即数。随着Inter系列的发展,指令长度越来越长,80486指令长度达到15个字节。由于指令的长度不同就会面临指令对齐的问题,比如一台32位机,保存三条指令其长度分别是4,6,4。

2. 操作码

指令操作码的长度决定了指令系统中完成不同操作的指令条件。操作码分为定长和不定长两类。定长操作码的指令译码电路简单,所以受RISC所推崇,也被广泛应用。但是定长操作码不利于指令的升级兼容。例如,指令操作码长为6位共可有64条指令,如果第一代机有63条指令,第二代升级时只能加1条指令,那是不可接受的。而用变长就不受这个限制。

不定长操作码(扩展操作码):

现在打算在原有基础上修改指令系统使其有15条3地址指令,15条2地址指令,15条1地址指令,16条0地址指令,(现在有15条3地址指令,14条2地址指令,31条1地址指令,16条0地址指令。)能否分配,如何分配?(提问)

例:第一代机器60条指令(等长),第二代加32条指令(等长)如何分配? 在实际机器中,可采取不同的具体做法。例如PDP—11,指令字长16位,高4位做基本操作码,但是取其中的四种组合0000,0111,1000,1111作为扩展操作码标志,可将操作码分别扩展成7位,8位,10位,12位,13位,16位等多种情况,其中16位指令的操作码可达几百种。一般情况下,考虑到CPU电路的复杂度,变长指令一般长度为2种,至多3种,极少象PDP—11这样。

指令长短的分配原则的一个重要条件是指令使用概率,考虑到操作码压缩的问题,建议采用哈夫曼编码。

3. 地址结构 (1) 四地址指令 操作码 操作数地址1 操作数地址2 操作数地址1 - 29 -

结果存放地址 操作数地址2 下条指令地址 结果存放地址 (2)三地址指令 操作码