计算机组成与原理第八章运算方法课件.ppt
《计算机组成与原理第八章运算方法课件.ppt》由会员分享,可在线阅读,更多相关《计算机组成与原理第八章运算方法课件.ppt(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机组成与原理课件第八章运算方法第1页,此课件共108页哦 1.几种常用数据格式的算术运算算法和它们的硬件实现。包括定点数表示及其加、减、乘、除过程和硬件实现,二十进制(或BCD)码的格式和操作。2.提高算术操作性能的专用硬件专用硬件。(流水线、查找表、华莱士树)3.介绍浮点数浮点数的格式和它们的算术操作。包括浮点数的格式,性质,以及加、减、乘、除过程和硬件实现,还有IEEE 754 浮点数标准。执行算术和逻辑运算指令以及微操作是任何执行算术和逻辑运算指令以及微操作是任何CPUCPU的一个必不可少的重要部分。的一个必不可少的重要部分。第2页,此课件共108页哦8.1 8.1 无符号表示法无符
2、号表示法 非负数码非负数码:表示0或一个正数。n位非负数码的数值范围为0(所有位都为0)到2n-1(所有位都为1)。2 2的补码的补码(简称补码):既能表示正数又能表示负数。n位数的数值范围为-2-2n-1n-1到到2 2n-1n-1-1-1。当最高位为1时表示负数,最高位为0时表示正数(包括0)。正数(包括0)的补码与非负数码相同,负数的补码为其绝对值的2的补码,等于它的绝对值按位取反(该数的1的补码,简称为反码),加1。有两种常用的无符号表示法:有两种常用的无符号表示法:第3页,此课件共108页哦 例如,求-5的4位补码表示,首先求出它的绝对值5(0101),产生反码值1010,再加1得补
3、码1011。下表列出了8位二进制数的非负数码和补码表示的数值。表表8.1 8.1 无符号表示的数值无符号表示的数值 第4页,此课件共108页哦8.1.1 加法和减法 加法直接采用二进制加法实现,硬件中通过使用一个并行加法器来实现,如下图所示。X和Y是8位寄存器,该电路实现微操作 ADD:XX+Y 只要结果在正常范围内(对非负数码而言为0到2n-1,对2的补码而言为-2n-1到2n-1-1),该电路就能得到正确的结果。图图8.1 8.1 微操作微操作XX+YXX+Y的实现的实现 第5页,此课件共108页哦当结果不能表示为一个8位数值时就会导致溢出:例如,非负数码加法255+1,即1111 111
4、1+0000 0001,直接加得 1 0000 0000,有9位,不能存于8位寄存器中。并行加法器产生额外的进位输出,它用来标志算术溢出算术溢出。在非负数码中,这个进位能置溢出标志溢出标志,它提示系统产生了溢出,所得结果不完全正确,系统应进行相应的结果修复处理或错误处理。在补码中,判断溢出不但要检查进位输出,还要检查结果最高位的进位输入。如果这两者相等,那么不产生溢出,否则产生溢出。见下图:第6页,此课件共108页哦图图8.2 8.2 补码加法的溢出产生补码加法的溢出产生 在(a)和(c)中最高位的进位输入和进位输出相等,不产生溢出;而在(b)和(d)中两者不等,产生溢出。溢出溢出溢出溢出第7
5、页,此课件共108页哦 非负数码的减法可以转换成加法,即X Y通过执行X+(-Y)来实现。首先将Y转换成 Y的补码,再将 Y的补码与X的补码相加即可得X Y的补码:X Y补=X补+-Y补左图给出了执行微操作SUB:XXY的一种硬件实现。图图8.3 8.3 微操作微操作XXXXY Y的实现的实现 第8页,此课件共108页哦 对于非负数码,减法的结果不会比2n-1大,但可能比0小。例如,12执行为0000 0001+1111 1110=1111 1111,即255。图中(b)和(d)溢出,而(a)和(c)没有溢出。图图8.4 8.4 无符号无符号2 2的补码减法的溢出产生的补码减法的溢出产生 同样
6、,补码减法也将XY转换成X+(Y)来执行,而判断溢出的条件与补码加法相同。此时,如果减法(通过补码加法实现)产生了进位输出0而不是1时,则发生了溢出。溢出溢出溢出溢出第9页,此课件共108页哦8.1.2 乘法 乘法可以看成加法的重复。一个数乘以n与n个该数相加的结果相同。可以用下列算法来实现乘法xy。z=0;FOR i=1 TO y DO z=z+x 这种算法不理想,原因是速度慢、计算xy的时间不确定。我们希望不论x、y取何值,执行乘法的时间相同。x=2 7 y=2 5 3 8 1 1 3 5 5 4 6 8 3 1 第10页,此课件共108页哦 这个过程被称为移位移位相加乘法相加乘法。首先计
7、算每个部分积部分积并左移到正确位置,然后再将所有的部分积相加相加。对这个算法稍做修改,使得硬件实现更为简单,就可得到无符号非负二进制数的乘法基本算法。第一个修改是每求出一个部分积后就计算和:x=2 7 y=2 5 3 8 1 1 3 5 1 4 3 1 计算的和 5 4 6 8 3 1 最终计算的和 因为硬件上,二输入加法器很容易实现,而三输入或多输入的加法器则变得非常复杂。任何时候都没有多于两个数的加。注意:每一个部分积都逐次左移一位,因此排列的位置不同。在当前和与部分积的相加中,某些位的运算不必要。第11页,此课件共108页哦第二个修改用右移当前和代替左移部分积:x=27 y=253 81
8、 右移一位 81 1被右移出,故不参加加法运算 135 1431 右移一位 1431 3 1被右移出,故不参加加法运算 54 6831 最后右移一位 6831 每次都是相同的两列数字进行加法。已经右移到这两列右边的数字只是简单的写下,不进行加法。第12页,此课件共108页哦 若用二进制,不是乘以0就是乘以1,因此部分积不是0 0(X0=0)就是被乘数的值(X1=X)。算法:两个n位寄存器的值X和Y的移位相加乘法 n位寄存器U和V:保存结果 (U保存结果的高n位,V保存结果的低n位)一位寄存器C:用来保存执行加法时的进位 C=0,U=0;FOR i=1 TO n DO IF Y0=1 THEN
9、CU=U+X;线性右移 CUV;循环右移 Y 二进制乘法 第13页,此课件共108页哦考虑乘法:1311,即X=1101,Y=1011,n=4表8.2第14页,此课件共108页哦 算法的RTL代码如下所示。其中1 1,2 2,3 3是连续的状态。1 1:C0,U0,in Y02 2:CUU+X 2 2:ii-1 3 3:shr(CUV),cir(Y)Z3 3:GOTO 2 2 Z3 3:FINISH1 表8.3列出了1311的RTL代码的执行步骤。同样初始化X=1101,Y=1011。除了在每个周期增加了满足的条件和执行的微操作外,表8.3同表8.2一样。第15页,此课件共108页哦表表8.3
10、 11018.3 110110111011移位相加乘法移位相加乘法RTLRTL代码的执行轨迹代码的执行轨迹 第16页,此课件共108页哦根据 RTLRTL代码设计硬件代码设计硬件。硬件包括两部分:寄存器部分:微操作在此执行;控制部分:产生需要的控制信号和状态值。X n位寄存器 Y、U、V n位移位寄存器 (当shr信号有效时它们右移一位)寄存器i 存储值n的递减计数器 C和FINISH 一位寄存器 在寄存器之间设置数据通路来实现RTL代码中的微操作所要求的数据传送。由于在算法的RTL代码中,当i=0时,Z=1;因此将i的所有位异或在一起产生Z,从而满足仅当i的所有位都为0(i=0)时,Z才为1
11、。否则,Z为0,用来驱动状态计数器装载1。第17页,此课件共108页哦图图8.5 8.5 移位移位相加乘法算法的相加乘法算法的硬件实现硬件实现 3第18页,此课件共108页哦 考察图8.5给出的控制部分,看它是如何实现RTL代码的。当START置1时,State Counter和FINISH清零,Decoder工作。Decoder输出1 1,使U清零,数n装载到i中。State Counter加1,Decoder输出2 2。使i减1,并且,若Y0=1,将U+X保存在CU中;若Y0=0,则C、U的值不变。State Counter加1到10,Decoder输出3 3。此时,C、U、V都右移一位。
12、以下两件事必有一件发生:当Z=0时,State Counter被装载值01,Decoder输出2 2,实现操作“GOTO 2 2”。否则Z=1时,FINISH置1,Decoder使能端置0,不再输出1 1,2 2,3 3,硬件停止工作。第19页,此课件共108页哦如果Y值不要求保存,可将其值保存在V寄存器中,则乘法转换为UVX V。每次检查V的最低位V0,若为1,执行加法。下一步执行右移时,该位将丢弃,因为它不再需要使用。修改后的RTL代码为:1 1:C0,U0,in V02 2:CUU+X 2 2:ii-1 3 3:shr(CUV)Z3 3:GOTO 2 2 Z 3 3:FINISH1 与前
13、面的RTL代码有两处不同:一是 CUU+X的条件由Y02 2改为V02 2;二是减少了cir(Y)的操作。硬件实现上,除了C和U的LD信号改为V02 2,以及去掉了寄存器Y之外,该代码的硬件实现与图8.5的相同。优化算法第20页,此课件共108页哦下表显示改进后的RTL代码执行11011011的步骤。表表8.4 8.4 改进后改进后的的RTLRTL代码代码的执的执行步行步骤骤 除了初始化V寄存器和去掉Y寄存器之外,该表与表8.3相同。第21页,此课件共108页哦8.1.2.1 布斯算法 对于补码,上面的算法并不总能得出正确的结果。原因是该算法仅能处理两个正数相乘。例子(1101 1011)中,
14、补码表示分别为3和-5,它们的积应是15;而上面的算法将得出结果1000 1111,即 113,显然是错的。当有一个或两个操作数为负数时,执行下面的程序,上面的算法则可以使用:IF 被乘数 0 THEN 被乘数-被乘数;IF 乘数 71,商有3位,比商寄存器的位数(2位)还要多一位,因此产生溢出。这种溢出检测的好处是可以防止除以0的操作,此时也会产生溢出。第31页,此课件共108页哦二进制值除法二进制值除法:二进制除法中,商只可能为0或1。当被除数大于等于除数时,商1;否则商0。下面的算法实现了两个二进制值的移位相减除法。被除数在初始化时加载到UV,其中U保存高n位,V保存低n位。除数和商分别
15、保存在n位值X和Y中。余数保存在U中。C为1位值,用来保存U的移出位。U X THEN 产生溢出并终止算法;Y=0;C=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF CU X THEN Y0=1,U=CU X 考虑第一步就终止的情况。如1127,若n=4,则UV=0111 0000,X=0111。由于UX,均为0111,将终止算法。如果继续执行,将产生商16(1 0000)和余数0。但值1 0000不能保存在4位的Y中,产生溢出。第32页,此课件共108页哦 下表列出了该算法执行14713的步骤。即U=1001,V=0011,X=1101,n=4。表表8.7 8.7
16、 移位移位相减算法的执行步骤相减算法的执行步骤 第33页,此课件共108页哦 算法的RTLRTL代码代码。其中X、U、V、Y为n位值,C和OVERFLOW为1位值。当i=0时,Z=1;当UX时,G=1。FINISHI置1则算法结束。1 1,2 2,3 3,4 4是连续的状态。G 1 1:FINISH1,OVERFLOW1 2 2:Y0,C0,OVERFLOW0,in 3 3:shl(CUV),shl(Y),ii-1(C+G)4 4:Y0 1,UU+X+1 Z4 4:GOTO 3 3 Z 4 4:FINISH1 大部分的RTL语句由算法直接转换而成,注意条件 CUX等价于条件 UX(G=1)或(
17、C=1),即(C+G);算法中的U=CUX使用补码加法 UU+X+1实现。第34页,此课件共108页哦 下表列出了该RTL代码执行除法:14713的执行步骤。初始化时U=1001,V=0011,X=1101,n=4。表表8.8 8.8 移移位位相减相减除法的除法的RTLRTL代码的执行代码的执行步骤步骤 第35页,此课件共108页哦该算法的硬件实现。图图8.7 8.7 移位移位相相减除法的硬件实现减除法的硬件实现 2第36页,此课件共108页哦 以上称为不恢复余数的除法算法不恢复余数的除法算法,这种算法是仅当CU X时,才执行减法 UUX。第二种类型的除法是恢复余数的除法算法恢复余数的除法算法
18、。它不是在执行减法之前先检查是否 CUX,它是先执行减法再比较CU是否大于等于X。如果 CUX,则该算法再执行一次 UU+X,使U恢复为原来值。恢复余数的算法有相同的步骤:首先检测溢出。如果没有产生溢出,则进入移位相减循环。它们的主要区别是处理比较的方式不同。不恢复余数的算法是先进行CU和X的比较,如果CUX则执行减法 UCUX。恢复余数的算法则相反,先执行减法 UUX,如果发现 CUX(结果为负),则说明不应执行减法,此时通过执行加法 UU+X,使U恢复为原来值。第37页,此课件共108页哦 恢复余数的算法。被除数初始化时保存在UV中,除数保存在X中,商保存在Y中,余数最后保存在U中。U、V
19、、X、Y都是n位值,C是一位值。CU=U+X+1;U=U+X,IF C=1 THEN 产生溢出并终止算法;Y=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF C=1 THEN U=U+X+1 ELSE CU=U+X+1 IF C=1 THEN Y0=1 ELSE U=U+X 算法第一步为CU与X的比较第38页,此课件共108页哦CUCU与与X X的比较的比较。操作 C U=U+X+1实际上实现了两个功能:显式的功能是减法 U X,而隐含的功能是U和X的比较。如果UX,该操作将C置1,否则将C置0。如下所示:在(a)和(b)中,UX,C置1;在(c)中,UX,C置0。图
20、图8.8 8.8 在计算在计算C U=U+XC U=U+X+1+1的同时比较了的同时比较了U U和和X X:(a a)正结果,()正结果,(b b)零结果,()零结果,(c c)负结果)负结果 第39页,此课件共108页哦整个算法整个算法的分析。头两条语句是比较U和X的大小。如果U X,将产生溢出,此时U U+X+1将C置1。否则不溢出,它将C置0。第二条语句是将U恢复为原来值,如果没有溢出,将初始化Y并进入移位相减循环。移位相减循环从左移CUV和Y 开始的。而第一条IF语句(IFC=1THENU=U+X+1ELSECU=U+X+1)实现了减法(U=U X)和CU与X的比较(如果CU X则C=
21、1)。下一条IF语句(IFC=1THENY0=1ELSEU=U+X)当C=1时,CU X,减法有效,只需在商的相应位(Y0)上商1。而当C=0时,CU X,加法将U恢复为原来值。如C=1,则CU一定比X大,执行减法U U+X+1,并且使C仍保持1值。如C=0,执行减法CU U+X+1。该减法仅当CU X时,使C置1。结果是:无论执行哪个减法,都有 U=UX,以及当CU X时C置1,否则置0。第40页,此课件共108页哦两个例子两个例子。第一个例子为22513,它的执行步骤如表8.9(a)所示。首先初始化X=1101,n=4。第一个减法将C置1,说明将产生溢出。(实际上,由于22513=17 余
22、4,而17的二进制是1 0001,因此不能存于4位的寄存器中。)下一步恢复U值并终止算法。表表8.9 8.9 恢复余数除法算法的执行步骤(恢复余数除法算法的执行步骤(a a)有溢出,)有溢出,另一个例子14713,执行步骤如表8.9(b)所示。没有溢出。算法的前几步检测溢出和初始化Y。接下来每三步为一组表示循环的一次迭代。第41页,此课件共108页哦该算法正确地计算了14713(X=1101),商为11,余数为4。表表8.9 8.9 恢复余数除法算法的执行步骤恢复余数除法算法的执行步骤(b b)无溢出)无溢出 每次迭代都执行相似的移位和减法/比较操作。每次迭代的最后一步不是更新商(保存在Y中)
23、就是将余数恢复为原来值(保存在U中)。第42页,此课件共108页哦恢复余数除法算法的恢复余数除法算法的RTLRTL代码代码。它采用的值与不恢复余数算法中采用的值基本相同。它与不恢复余数算法非常接近。OVERFLOW为1位值,当溢出发生时置1,否则置0。FINISH为1位值,当算法终止时置1。不管是循环结束的正常终止还是溢出,都要将FINISH置1。与其他算法相同,计数器i的值从n递减到0。当i=0时,Z=1。除非遇到GOTO操作,在正常情况下状态从1 11-1 122 23-43-41-4 42。第43页,此课件共108页哦 1 11:CUU+X+1;1 12:UU+X C1 12:FINIS
24、H1,OVERFLOW1 2 2:Y0,OVERFLOW0,in 3 3:shl(CUV),shl(Y),ii-1 C4 41:UU+X+1 C4 41:CUU+X+1 C4 42:Y01 C4 42:UU+X Z4 42:FINISH1 Z4 42:GOTO 3 3 CU=U+X+1;U=U+X,IF C=1 THEN 产生溢出并终止算法;Y=0;FOR i=1 TO n DO 线性左移 CUV;线形左移 Y;IF C=1 THEN U=U+X+1 ELSE CU=U+X+1 IF C=1 THEN Y0=1 ELSE U=U+X 第44页,此课件共108页哦表表8.10 8.10 恢复余数
25、恢复余数除法算法除法算法的的RTLRTL代码代码的执行步的执行步骤骤 14713第45页,此课件共108页哦该算法的硬件实硬件实现现如图所示。减少了产生G的比较器,但并行加法器的输入更加复杂。因为此时要求它进行两种操作U+X或U X。同时,由于有6个状态,状态计数器和译码器要稍微大一些。图图8.9 8.9 恢复余数除法的硬件实现恢复余数除法的硬件实现 42i第46页,此课件共108页哦补码相除补码相除 补码相除没有一种通用的算法。一般是通过对正负数值进行转换来实现补码相除。该算法如下所示。除法可以使用恢复余数的硬件实现或不恢复余数的硬件实现。IF 被除数 0 THEN 被除数-被除数;IF 除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 第八 运算 方法 课件
限制150内