中央处理器.docx
- 文档编号:11676757
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:11
- 大小:35.39KB
中央处理器.docx
《中央处理器.docx》由会员分享,可在线阅读,更多相关《中央处理器.docx(11页珍藏版)》请在冰豆网上搜索。
中央处理器
CHAPTER8ComputerARITHMETIC
(第8章计算机算法)
第三部分中央处理器
本部分介绍指令和数据类型这样的体系结构问题,考察计算机流水线的组织结构问题。
第8章计算机算法
考察ALU的功能,聚焦于实现算术运算的技术和数的表示方法。
处理器支持两类算术运算:
定点数和浮点数,讨论IEEE754浮点标准。
第9章指令集:
特征和功能
讨论指令集设计的功能方面。
①功能类型②操作数类型③操作类型
第10章指令集:
寻址方式和指令格式
讨论指令集的词义学问题,讨论指令集的语法学问题,考察指定存储器地址的方式,指令的整体格式。
第11章CPU结构和功能
介绍寄存器的使用,CPU结构和功能的综述,重申整体组织讨论寄存器集的的具体组织。
描述处理器执行机器指令的功能,考察指令周期,探讨使用流水技术改善性能。
第12章精简指令集计算机
介绍RISC概念相关方法,使用RISC设计的动力,考察RISC指令集设计和RISCCPU体系结构。
第13章超标量处理器
考察超标量技术
第8章计算机算法
●计算机关注数字表示方式和基本算术运算的算法;适用于整数运算和浮点运算
●大多数处理器都实现了IEEE754标准,用于浮点表示和浮点运算
本章重点放在ALU的计算机算法。
8.1TheArithmeticandLogicUnit(ALU)(算术和逻辑单元)
某种意义上当考察ALU时,我们已到达计算机的核心或本质。
算逻单元及计算机所有电子部件都是基于简单数字逻辑装置的使用,这些装置保存二进制数字和完成简单的布尔逻辑运算。
CP200+EP275图8.1指出ALU与CPU互连,数据以寄存器提交给ALU,运算结果也存于寄存器;ALU亦将设置标志作为运算结果;标志值也存于CPU内的寄存器中。
8.2IntegerRepresentation(整数表示)
二进制数值系统中,仅用数字0和1、负号和小数点表示任何一个数。
对于计算机存储和处理,负号和小数点是不方便的。
通常,若一个n位二进制数字序列an-1an-2…a1a0表示一个无符号整数A=
。
8.2.1Sign-MagnitudeRepresentation(符号-幅值表示法)
采用一个符号位的最简单的表示法是符号—幅值表示法。
以一个n位字为例,最左位为符号位,其余n-1位为整数的幅值(绝对值)
若定点小数的原码形式为X0.X1X2X3┅Xn-1Xn,则原码定义为:
若定点整数的原码形式为X0X1X2X3┅Xn-1Xn,则原码定义为:
符号-幅值表示法缺点:
①加减运算时既要考虑数的符号,又要考虑幅值;②0有两种表示。
因此符号-幅值表示法很少用于ALU中的整数表示,常用的方案是2的补码。
8.2.2Two’sComplementRepresentation(2的补码表示法)
2的补码表示法使用最高位作为符号位,表8.1说明2的补码表示法和算术的关键特征。
以2的补码形式来表示一个n位整数A。
数零被标识为正的,正整数可表示的范围是由0到2n-1-1。
(8-2)
式(8-2)定义了正数和负数的2的补码表示法。
若定点小数的补码形式为X0.X1X2X3┅Xn-1Xn,则补码定义为:
若定点整数的补码形式为X0X1X2X3┅Xn-1Xn,则补码定义为:
CP203+EP279考察图8.2:
加深对2的补码表示法的理解。
值盒子(valuebox)是说明补码的有效方法。
对于整数而言,值盒子最右端是1(20),往左一个连续位置其值加倍,直到最左端,最左端的值是负。
正如CP204+EP281图8.3(a),它能以2的补码表示的最小负数是-2n-1,负数的最左位必定是1,正数的最左位必定是0。
图8.3其余部分说明使用值盒子将2的补码转换成十进制。
8.2.3ConvertingbetweenDifferentBitLengths(不同位长间转换)
对于符号—幅值表示法,简单地将符号位移到新的最左位置上,多余出的空位全添0。
2的补码整数扩展规则应是,对于正数填充0,对于负数填充1。
8.2.4Fixed-PointRepresentation(定点表示法)
本节所讨论的表示法有时称为定点表示法,因为小数点是固定的并被假定为在最右数字的右边。
8.3IntegerArithmetic(整数算术运算)
考察补码表示数的普通算术功能。
8.3.1Negation(取负)
以2的补码表示法,求一个整数的负数可用如下规则:
1.将整数的每位求反。
2.将此结果作为一个无符号数对待,最低点位加1。
可使用2的补码表示定义[式(8-2)]来说明刚才介绍的操作的有效性。
①考虑A=0
②一个数首位为1,后面跟着n-1个0,对此n位数取负数将会是错误的。
出现特殊情况的原因在于n位字能表示不同的数只有2n个(偶数),希望能表示正整数、负整数和0,在2的补码表示法中,一个n位字可表示负数-2n,不能表示正数2n。
8.3.2AdditionandSubtraction(加法和减法)
CP207+EP284图8.4表示了两个补码的加法,如果操作的结果为正,则得到原始的2进制数符号。
如果结果为负,则会得到负数的补码形式:
[X]补+[Y]补=[X+Y]补
对于任何加法都可能出现结果的长度大于正被使用的字的长度,该状况称为上溢。
可用如下规则测定上溢:
两个数相加,若它们同为正数或同为负数,则当且仅当结果的符号位变为相反才出现上溢。
图8.4(e+f)是上溢的例子
减法规则可简单实现:
减法可用加法实现,如CP208+EP285图8.5所示。
[X]补-[Y]补=[X-Y]补=[X]补+[-Y]补,[-Y]补=[Y]补+1
CP209+EP286图8.6给出了实现加法和减法所需的数据路径和硬件元件,对于加法,提交给加法器的两个数来自寄存器,对于减法,则减数要通过一个求补器,它的2的补码被提交给加法器。
定点小数的变形补码定义为:
其同余式表示为:
[X]补=4+X
溢出判断方法:
V=Sf1⊕Sf2
8.3.3Multiplication(乘法)
无论以硬件或软件来完成,乘法都是一个复杂的操作过程。
1.无符号整数乘法
CP209+EP287图8.7说明了无符号乘法,重要结论:
(1)乘法涉及到部分积的生成,乘数的每一位对应的一部分积。
(2)部分积是容易确定的:
部分积=被乘数*Yi
(3)部分积通过取和而得到最后乘积。
(4)两个n位乘法导致其积为2n位长。
计算机使操作更有效:
①边产生部分积边做加法,②需要少数几个寄存器,③乘数的每个1,需要加和移位两个操作;④对于每个0,则只需要移位操作。
CP210+EP288图8.8(a)表示实现方案:
①乘数和被乘数分别装入两个寄存器(Q、M)②需要一个1位寄存器C,用于保存加法可能产生的进位。
乘法器操作:
①Q0是1,则被乘数与A寄存器相加并将结果存于A寄存器,C、A和Q各寄存器的所有位向右移一位,②Q0是0,则只需移位,没有加法需完成。
产生的2n位积存于A和Q寄存器。
操作的流程图示于CP211+EP289图8.9,图8.8(b)给出一个例子。
2.2的补码乘法
对2的补码表示的数能将它们看作是无符号数来完成加减法运算。
看CP209+EP287图8.7例子说明,如果被乘数和乘数都是负数,直截了当的乘法将不能用。
实际上,被乘数和乘数只要有一个是负数就不行。
一个数乘以2n可通过左移此数n位来完成。
CP211+EP290图8.10使部分积变得明显和完整:
由n位被乘数产生的部分积应是一个2n位的数。
作为一个无符号数,4位被乘数1011是以一个00001011的8位字来保存的。
问题在于,作为负的被乘数,其每次得出的部分积必须是2n位字长的负数;部分积的符号位必须一起建立。
若把1001看作是补码数-7,则每个部分积必须是2n位的负的补码数,如CP212+EP290图8.11(b)所示,可用部分积左边填充1来完成。
若乘数是负数,那种直截了当的乘法也是不能工作的。
摆脱这种困境的最普遍的方法是布思(Booth)算法,能加速乘法过程。
CP213+EP291图8.12给出了布思算法框图,A和Q-1初始化为0。
控制逻辑也是每次扫描乘数的一位。
若两位相同,则A、Q和Q-1寄存器的所有位向右移一位。
若两位不同,根据两位是0-1或1-0,则被乘数被加到A寄存器或由A寄存器减去,再右移。
图8.13为7乘以3时布思算法的发生顺序。
图8.14(a)给出同样操作的更紧凑表示。
3.布思(Booth)算法推导:
华工第二版P38~39
8.3.4Division(除法)
CP216+EP295图8.15表示一个无符号二进制整数长除的例子。
从左到右检查被除数的位,直到被检查的位所表示的数大于或等于除数;这被称为除数能去“除”此数。
直到这个事件出现之前,从左到右一串0放入商中。
当事件出现时,一个1放入商并且由此部分被除数减去除数。
结果被称为部分余(PartialRemainder)。
由此开始除法呈现一种循环样式。
在每一循环中,被除数的其他位续加到部分余上,直到结果大于或等于除数。
同前,除数由这个数中减去并产生新的部分余。
此过程继续下去,直到被除数的所有位都被用完。
CP216+EP296图8.16表示除法的流程;图8.17表示除法的例子。
算法可概括如下:
1.除数装入M寄存器,被除数装入Q寄存器。
被除数必须以2n位的补码来表示。
2.A,Q左移1位。
3.若M与A同符号,完成A←A-M;否则A←A+M。
4.若A在操作之后符号未改变,则上述操作是成功的。
(1)若操作是成功的或者(A=0ANDQ=0),则置Q0←1。
(2)若操作是不成功的并且(A≠0ORQ≠0),则置Q0←0,并且恢复先前的A值。
5.重复2到4步,Q有多少位就重复多少次。
6.余数在A中。
若被除数与除数同符号,则商在Q中;否则,Q中数值的2的补码才是正确的商。
8.4Floating-PointRepresentation(浮点表示)
8.4.1Principles(科学计数法原理)
定点表示法不能表示很大范围内的数,也不能表示很小的分数。
使用科学计数法(ScientificNotation),能动态地移动十进制小数点到一个约定位置,并使用10的指数来保持对此小数点的跟踪,因此允许只使用少数几个数字来表示很大范围的数和很小的数。
能以如下形式表示一个二进制数:
±S×B
该数存于一个二进制字的三个字段中:
●符号:
正或负
●有效数S(Singnificant)
●指数E(Exponent)
基值B是隐含的且不需存储。
CP218+EP299图8.18(a)表示32位浮点格式。
最左位保存数的符号。
指数值存于位1到位8。
该表示法称为偏值表示法(biased);一个称为偏值(bias)的固定值,从字段中减去,才得到真正的指数。
8位的偏值字段能生成的数是0到255;取偏值为127,则真指数值的范围是-127到+128。
此例的基值被认为是2。
字的最后部分是有效数,或称为尾数(Mantissa)。
显然浮点数能以多种形式表示。
为了简化浮点数的操作,需要进行规格化(Normalized);规模化的浮点数具有如下形式:
±0.1bbb…b×2
图8.18(b)给出规格化数的例子,其特征如下(类似IEEE754表示法):
●符号总是存于字的最左边的位
●真有效数的第1位总是1,不需要存于于有效字段中(约去)
●值127加到真指数后再存入指数字段中。
●基值是2。
CP220+EP300图8.19指出32位字能表示的数的范围。
使用补码整数表示法,能够表
示如下范围的数:
●介于-(1-2-24)×2128和-0.5×2-127 之间的负数
●介于0.5×2-127和(1-24-24)×2128 之间的正数
数轴上有5个区间不包括在这些范围内:
●比-(1-2-24)×2128还小的负数,称为负上溢
●比-0.5×2-127 还大的负数,称为负下溢
●零
●比0.5×2-127还小的正数,称为正下溢
●比(1-24-24)×2128 还大的正数,称为正上溢
下溢不是一个严重问题,通常足可以近似成0。
使用浮点表示法实际上并不能使我们表示出更多的值,仅是把这些数沿数轴正负两个方向在更大范围内散布开。
浮点表示的数不像定点数沿数轴等距分布:
越靠近原点,数越密集。
这是浮点算术的特点之一:
多数计算的结果并不是严格精确的,必须进行某种舍入,使结果达到所能表示的最接近值。
浮点数存在范围和精度权衡考虑的问题。
大多数计算机都至少提供单精度和双精度两种数:
单精度格式是32位;双精度格式是64位。
隐含的指数的基值并不需要总是2。
IBMS/370结构使用的基值为16,其浮点数格式由7位指数和24位有效数组成。
对一种固定格式而言,更大的基值能给出更大的表示范围,但以牺牲精度为代价。
8.4.2IEEEStandardforBinaryFloating-PointRepresentation
(二进制浮点表示的IEEE标准)
IEEE754标准保证程序从一类处理器移植到另一类处理器上的可移植性,已用于当代所有各类处理器和算术协处理器中。
IEEE754标准了定义32位、64位两种格式,见CP220+EP300图8.21,标准还定义单、双两种的扩展格式,其精确格式是实现相关的。
扩展格式将被用于中间计算;加大误差的机会很少;使终止计算过程的中间上溢机会很少;计算的最终结果能以基本格式表示的。
IEEE754标准单精度和双精度浮点数的数值公式分别为:
;
IEEE格式的某些样式表示特殊值。
CP222+EP304表8.4指出各种位样式相关的值:
●对于指数值范围在1-254和1-2046表示了一个规格化的非零浮点数。
指数是偏值的,真指数值范是-126—+127和-1022—+1023,一个规格化的数要求二进制小数点左边一个1,这位是隐藏的。
●0指数与0分数一起表示正零或负零,取决于它的符号位。
●全1指数与0分数一起表示正无穷大或负无穷大,取决于它的符号位。
●0指数与非0分数一起表示一个反规格化数(denormalized)。
二进制小数点左边的隐藏位是0并且真指数是-126或-1022。
●全1指数与非0分数一起给出NaN值,它不是一个数(Notanumber),非数(NaN)用来通知各种异常条件。
8.5Floating-PointArithmetic(浮点算术运算)
CP222+EP305表8.5总结了浮点算术的基本操作方法。
如下几种操作结果出现会引发一些问题:
●指数上溢(ExponentOverflow):
一个正指数超出最大允许指数值
●指数下溢(ExponentUnderflow):
一个负指数超出最大允许指数值,可报告成0
●有效数下溢(SignificandUnderflow):
对齐时右端有效数丢失,需某种形式舍入
●有效数上溢(SignificandOverflow),可通过重新对齐来修补
8.5.1AdditionandSubtraction(浮点加法和减法)
浮点算术加、减法有4个基本阶段:
1.检查0
2.对齐有效数
3.加或减有效数
4.规格化结果
CP224+EP307图8.22是一个典型的流程图,加法和减法(改变减数符号后)基本过程相同。
指数和有效数分开存于两个寄存器中,当结果产生时再重组在一起。
①若有一个操作数是0,那么另一个操作数就是结果;
②操纵数使两个指数相等:
右移较小的数而丢失的数字,所造成的影响要相对小些。
对齐通过重复右移较小数有效数的幅值部分并增量其指数来实现,直到两个指数相等;
③两个有效数相加;
④规格化结果:
左移有效数直到最高有效数字为非零。
每次左移都引起指数相应减量。
⑤对结果进入舍入,最后报告结果
8.5.2MultiplicationandDivision(浮点乘法和除法)
1.浮点乘法
偏值指数形式乘法,如CP225+EP308图8.23所示;阶码相加应减一个偏值;阶码相
加和结果规格化都可能导致指数上溢或下溢。
2.浮点除法
偏值指数形式除法,如CP226+EP309图8.24所示;阶码相减应加一个偏值;阶码相
减和结果规格化都可能导致指数上溢或下溢。
8.5.3PrecisionConsiderations(浮点运算的精度问题)
1.保护位
浮点运算前,每个操作数的指数和有效数要装入ALU的寄存器中;寄存器的位数总是大于有效数位长与一个隐藏位(若使用)之和;寄存器包含的这些附加位叫做保护位,用于以0扩充有效数的右端
使用保护位的理由说明于CP227+EP310图8.25。
考虑IEEE单精度的浮点数,有24位有效数,包括小数点左边的一个隐藏位。
假设:
x=1.00…00×21和y=1.11…11×20,无保护位的x-y示于图8.25(a)。
y丢失一位有效数,结果是2-22。
附加有4位保护位的x-y重复于图8.25(b),。
最低有效数位不会由于对齐而丢失了,且结果是2-22,与前一答案相比差了一半。
当基数是16时,运算过程详见CP227+EP310图8.25(c+d),精度的损失可能更大:
结果差了16倍。
2.舍入
影响结果精度的另一因素是舍入策略(RoundingPolicy),已开发出几种技术用于舍入处理;IEEE标准已列出4种可供选择的方法:
●就近舍入(RoundToNearest):
结果被舍入成最近的可表示的数
●朝+∞舍入(RoundToward+∞):
结果向正无穷大方向取入
●朝―∞舍入(RoundToward―∞):
结果向负无穷大方向取舍
●朝0舍入(RoundToward0):
结果朝0取舍
①就近舍入是标准列出的缺省舍入方式并进行如下定义:
最靠近此超精度结果的可表示值将被递交;若两个可表示的值是同等的靠近,则最低有效数位是0的那个值被递交。
例如:
1)超出可保存的23位的多余位是10010,此时正确答案应该是最低可表示位加1;2)多余位是01111,正确答案是简单去掉多余位(截短);3)多余位是10000,可选的简单方法是截短,其缺点是会给一个计算序列带来小的但可累积的偏差效应。
②朝正或负的无穷大方向舍入:
在实现间隔算法(IntervalArithmetic)的技术中是有用的。
间隔算法的含意:
一系列浮点运算结束时,由于硬件的限制必定导致舍入,使得我们不能知道严格的答案;如果上、下边界的范围足够窄,则得到了一个足够精确的结果。
③朝0舍入,它实际上是简单的截短,不管多余位;计算中会产生一致的向下偏差,将导致严重的偏差。
8.5.4IEEEStandardforBinaryFloating-PointArithmetic
(二进制浮点算术的IEEE标准)
IEEE754远超出格式的简单定义,它还规定了特殊实践及处理方法,保证浮点算术运算能产生一致的、可预期的结果,而与硬件平台无关。
本小节查看其它三个课题:
无穷大、NaN和反规格化数。
1.无穷大
无穷大在实数算术中作为限界来对待,对无穷大可给出如下解释:
―∞<(任何有限的数)<+∞
任何涉及到无穷大的算术运算都将产生明确的结果,详见CP228+EP312↑4~↑8。
2.静止的和通知的NaN
NaN是以浮点格式编码的符号实体,有两种类型:
1通知的NaN,是每当它作为一个操作数出现时就通知一种违约操作异常;
2静止的NaN几乎可穿经任何算术操作而不给出异常通知。
CP229+EP313表8.6指出
了那些能产生静止NaN的操作。
注意:
两类NaN具有同样的一般格式:
全1的指数和非0的分数。
3.反规格化数
IEEE754的反规格化数用于处理指数下溢情况。
当结果的指数太小(大幅值的负指数)时,结果被反规格化成:
右移分数并每次右移增1指数,直到指数落在可表示范围之内。
CP229+EP314图8.26说明了加入反规格化数后的效果。
反规格化数的使用,被称为逐级下溢(GradualUnderflow);若反规格化数,则最小可表示的非0数与0之间的间隙远宽于最小可表示的非0数与下一个更大数之间的间隙。
逐级下溢填充了这个间隙,并将指数下溢的影响降低到规格化数间取舍相当的级别上。
8.6PROBLEMCP231+EP315:
5,8,12,13,15,16,17,23,25,26,27
附录8A数值系统
8A.1十进制系统
对于X的十进制表示X={…X2X1X0…X-1X-2X-3…},其值为:
X=
×
8A.2二进制系统
对于二进制表示的X={…X2X1X0…X-1X-2X-3…},其值为:
X=
×
8A.3二进制与十进制间的转换:
转换要对整数和小数部分分别进行
8A.4十六进制表示法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中央处理器