第4章計算機組成原理與系統(tǒng)結構_第1頁
第4章計算機組成原理與系統(tǒng)結構_第2頁
第4章計算機組成原理與系統(tǒng)結構_第3頁
第4章計算機組成原理與系統(tǒng)結構_第4頁
第4章計算機組成原理與系統(tǒng)結構_第5頁
已閱讀5頁,還剩152頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、http:/ 4章章 運算方法與運算器運算方法與運算器 定點數的加減運算及實現定點數的加減運算及實現4.14.1 定點運算器的組成與結構定點運算器的組成與結構 定點數的乘法運算及實現定點數的乘法運算及實現4.24.2 定點數除法運算及實現定點數除法運算及實現4.4 浮點運算及運算器浮點運算及運算器4.54.5 浮點運算器舉例浮點運算器舉例 4.64.6 本章小結本章小結344.1 4.1 定點數的加減運算及實現定點數的加減運算及實現 補碼加減運算與運算器補碼加減運算與運算器 機器數的移位運算機器數的移位運算 移碼加減運算與判溢移碼加減運算與判溢 十進制加法運算十進制加法運算一

2、一二二三三四四 MIPSMIPS的加減運算的加減運算五五5一、補碼加減運算與運算器一、補碼加減運算與運算器 補碼加減運算方法補碼加減運算方法 補碼加減運算的溢出判補碼加減運算的溢出判斷斷2 2 補碼加減運算器的實現補碼加減運算器的實現3 31 161 1、補碼加減運算方法、補碼加減運算方法補碼的加減運算的公式是補碼的加減運算的公式是:nX+YX+Y補補 = X= X補補 + Y+ Y補補nX-YX-Y補補 = X= X補補 + -Y+ -Y補補特點:特點:n使用補碼進行加減運算,使用補碼進行加減運算,符號位和數值位一樣參符號位和數值位一樣參加運算加運算。n補碼的減法可以用加法來實現補碼的減法可

3、以用加法來實現,任意兩數之差的,任意兩數之差的補碼等于被減數的補碼與減數相反數的補碼之和。補碼等于被減數的補碼與減數相反數的補碼之和。注意:注意:該公式不適合任何其他機器數編碼(原碼、反碼、該公式不適合任何其他機器數編碼(原碼、反碼、移碼)。移碼)。7求補運算:求補運算:YY補補 -Y -Y補補 求補規(guī)則:求補規(guī)則:將將YY補補包括符號位在內每一位取反,包括符號位在內每一位取反,末位加末位加1 1。n若若YY補補 = Y0= Y0,Y1Y1Yn Yn ,則:,則:n若若YY補補 = Y0.Y1 = Y0.Y1Yn Yn ,則:,則:1YYY-Yn10 補補1YYY-Yn1000 . 0 補補例

4、:例:XX補補 =0.1101 =0.1101,則:,則: XX補補 = = ? Y Y補補 =1.1101 =1.1101,則:,則: YY補補 = = ?8補碼加減運算舉例補碼加減運算舉例例:例:已知已知X=+1011X=+1011,Y=-0100Y=-0100,用補碼計算,用補碼計算X+YX+Y和和X-YX-Y。n寫出補碼:寫出補碼: X X補補 =0,1011 Y =0,1011 Y補補 =1,1100 =1,1100 -Y -Y補補 =0,0100 =0,0100 n 計算:計算: 92 2、補碼加減運算的溢出判斷、補碼加減運算的溢出判斷 溢出溢出: :當運算結果超出機器數的表示范圍

5、時,稱為當運算結果超出機器數的表示范圍時,稱為溢溢出出。 對于加減運算,可能發(fā)生溢出的情況:同號(兩數)對于加減運算,可能發(fā)生溢出的情況:同號(兩數)相加,或者異號(兩數)相減。相加,或者異號(兩數)相減。 確定發(fā)生溢出的情況:確定發(fā)生溢出的情況:n正數相加,且結果符號位為正數相加,且結果符號位為1 1;n負數相加,且結果符號位為負數相加,且結果符號位為0 0;n正數負數,且結果符號位為正數負數,且結果符號位為1 1;n負數正數,且結果符號位為負數正數,且結果符號位為0 0;10常用的判溢方法(補碼加減運算)常用的判溢方法(補碼加減運算) 單符號位判溢方法單符號位判溢方法2 2 n當當最高有效

6、位最高有效位產生的進位和產生的進位和符號位符號位產生的進位產生的進位不不同同時,加減運算發(fā)生了溢出。時,加減運算發(fā)生了溢出。nV VC C1 1CCf f 雙符號位判溢方法雙符號位判溢方法nX X和和Y Y采用雙符號位補碼參加運算,正數的雙符號采用雙符號位補碼參加運算,正數的雙符號位為位為0000,負數的雙符號位為,負數的雙符號位為1111;當運算結果的;當運算結果的兩兩位符號位符號S Sf1f1 S Sf2f2不同不同時(時(0101或或1010),發(fā)生溢出。),發(fā)生溢出。 nV V S Sf1f1 S Sf2f2= X= Xf f Y Yf f CCf f S Sf f nS Sf1f1

7、S Sf2f2=01=01,則正溢出;,則正溢出;S Sf1f1 S Sf2f2=10=10,則負溢出,則負溢出。 11雙符號位判溢方法舉例雙符號位判溢方法舉例例:例:用補碼計算用補碼計算X+YX+Y和和X-YX-Y (1 1)X=+1000X=+1000,Y=+1001Y=+1001(2 2)X=-1000X=-1000,Y=1001Y=1001Sf1 Sf2=01,正溢出,正溢出Sf1 Sf2=11,無溢出,無溢出Sf1 Sf2=00,無溢出,無溢出Sf1 Sf2=10,負溢出,負溢出123 3、補碼加減運算器、補碼加減運算器133 3、補碼加減運算器的實現、補碼加減運算器的實現 核心部件

8、:核心部件:一個普通的二進制并行加法器。一個普通的二進制并行加法器。A A:累加器,存放:累加器,存放XX補補;B B:寄存器,存放:寄存器,存放YY補補; 取反電路取反電路: :n =0 =0時,補碼加法器,將時,補碼加法器,將B B寄存器直接送寄存器直接送入并行加法器入并行加法器; ;n =1 =1時,補碼減法器,將時,補碼減法器,將B B送入并行加法送入并行加法器,同時,并行加法器的最低位產生進位,即器,同時,并行加法器的最低位產生進位,即B B取取反加反加1 1,此時并行加法器的運算相當于,此時并行加法器的運算相當于AA補補加加-B-B補補 ,完成減法運算。,完成減法運算。SUBADD

9、 /SUBADD /14二、機器數的移位運算二、機器數的移位運算v二進制數據(真值)每相對于小數點左移一位,相當二進制數據(真值)每相對于小數點左移一位,相當于乘以于乘以2 2;每相對于小數點右移一位,相當于除以;每相對于小數點右移一位,相當于除以2 2。1.1.計算機中的移位運算分為:計算機中的移位運算分為:n邏輯移位:邏輯移位:對無符號數據移位,導致無符號數據的對無符號數據移位,導致無符號數據的數值(無正負)放大或縮小。數值(無正負)放大或縮小。 n算術移位:算術移位:對帶符號數據(機器數)移位,在數值對帶符號數據(機器數)移位,在數值的絕對值上進行放大或縮小,同時,符號位必須要的絕對值上

10、進行放大或縮小,同時,符號位必須要保持不變。保持不變。 n循環(huán)移位:循環(huán)移位:所有的數據位在自身范圍內進行左移或所有的數據位在自身范圍內進行左移或者右移,左移時最高位移入最低位,右移時最低位者右移,左移時最高位移入最低位,右移時最低位移入最高位。移入最高位。 15二、機器數的移位運算二、機器數的移位運算補碼的算術移位補碼的算術移位n算術左移:算術左移:符號位不變,高位移出,低位補符號位不變,高位移出,低位補0 0。為保證補碼算術左移時不發(fā)生溢出,為保證補碼算術左移時不發(fā)生溢出,移位的數移位的數據最高有效位必須與符號位相同據最高有效位必須與符號位相同。在不發(fā)生溢出的前提下,在不發(fā)生溢出的前提下,

11、用硬件實現補碼的算用硬件實現補碼的算術左移時,直接將數據最高有效位移入符號位,術左移時,直接將數據最高有效位移入符號位,不會改變機器數的符號。不會改變機器數的符號。n算術右移:算術右移:符號位不變,低位移出,符號位不變,低位移出,高位正數補高位正數補0 0,負數補負數補1 1,即高位補符號位。即高位補符號位。16補碼的算術移位舉例補碼的算術移位舉例例:例:設設X X0.1001,Y0.1001,Y0.01010.0101,求,求nXX補補 ?n2X2X補補 ?nX/2X/2補補 ?nYY補補 ?n2Y2Y補補 ?nY/2Y/2補補 ?17三、移碼加減運算與判溢三、移碼加減運算與判溢1.1.移碼

12、和移碼計算移碼和移碼計算XX移移 =2 =2n n+X Y+X Y移移 =2 =2n n+Y -2+Y -2n nX2X2n n-1-1XX移移 + Y + Y移移 =2 =2n n+X+2+X+2n n+Y= 2+Y= 2n n+ +(2 2n n +X+Y +X+Y) = 2= 2n n + X+Y + X+Y移移XX移移 + -Y + -Y移移 = 2 = 2n n + X-Y + X-Y移移 2.2.移碼和補碼混合計算移碼和補碼混合計算YY補補 =2 =2n+1n+1+Y +Y (mod 2mod 2n+1n+1) XX移移 + Y + Y補補 = X+Y = X+Y移移 3.3.移碼

13、運算結果判溢:移碼運算結果判溢:雙符號位雙符號位nXX移移的最高符號位恒為的最高符號位恒為0 0nYY補補采用雙符號位采用雙符號位18三、移碼加減運算與判溢三、移碼加減運算與判溢移碼運算結果溢出的判斷條件是:移碼運算結果溢出的判斷條件是:n當結果的最高符號位當結果的最高符號位Sf1=1Sf1=1時溢出,時溢出,Sf1=0Sf1=0時結果時結果正確。正確。Sf1 Sf2=10Sf1 Sf2=10時,結果正溢出;時,結果正溢出;Sf1 Sf2=11Sf1 Sf2=11時,結果負溢出。時,結果負溢出。n由于移碼運算用于浮點數的階碼,當運算結果正由于移碼運算用于浮點數的階碼,當運算結果正溢出時,浮點數

14、溢出時,浮點數上溢上溢;當運算結果負溢出時,浮;當運算結果負溢出時,浮點數點數下溢,當作機器零處理下溢,當作機器零處理。 19舉例舉例: :vX=+1000X=+1000,Y=+1001Y=+1001,用移碼計算,用移碼計算X+YX+Y和和X-YX-Y。v解解: : X X移移 = 01= 01,1000 1000 Y Y補補 = 00= 00,1001 -Y1001 -Y補補 =11=11,01110111 X+YX+Y移移 =X=X移移 + Y+ Y補補 = 01 = 01,1000 + 001000 + 00,1001=101001=10,0001 0001 最高符號位為最高符號位為1

15、1,溢出,最低符號位為,溢出,最低符號位為0 0,正溢出。,正溢出。 X-YX-Y移移 =X=X移移 + -Y+ -Y補補 = 01 = 01,1000 + 111000 + 11,0111= 000111= 00,1111 1111 最高符號位為最高符號位為0 0,無溢出,無溢出,X-Y= -1X-Y= -1。20四、十進制加法運算四、十進制加法運算1.1.計算機中的十進制加法器通常采用計算機中的十進制加法器通常采用BCDBCD碼設計,在二碼設計,在二進制加法器的基礎上,加上適當的校正電路,可以實進制加法器的基礎上,加上適當的校正電路,可以實現現BCDBCD碼的加法器。碼的加法器。2.2.對

16、于對于8421BCD8421BCD碼來說,當相加的兩數之和碼來說,當相加的兩數之和S9S9時,加時,加6 6校正;當校正;當S9S9時,且無進位時,結果正確,不需校正。時,且無進位時,結果正確,不需校正。 21五、五、MIPSMIPS的加減法指令以及溢出判斷的加減法指令以及溢出判斷1 1、指令、指令v加(加(addadd)、立即數加()、立即數加(addiaddi)、減法()、減法(subsub)溢出)溢出時引起中斷;時引起中斷;v無符號數加(無符號數加(adduaddu)、無符號數立即數加)、無符號數立即數加(addiuaddiu)、無符號數減法()、無符號數減法(subusubu)在溢出時

17、不引)在溢出時不引起中斷。起中斷。22MIPSMIPS的加減法運算舉例的加減法運算舉例v add $t0,$t1,$t2 add $t0,$t1,$t2 # $t0 = $t1 + $t2; # $t0 = $t1 + $t2; 有符號數的加法運算有符號數的加法運算 v sub $t2,$t3,$t4 sub $t2,$t3,$t4 # $t2 = $t3 - $t4 # $t2 = $t3 - $t4 有符號數的減法運算有符號數的減法運算v addi $t2,$t3, 5 addi $t2,$t3, 5 # $t2 = $t3 + 5; # $t2 = $t3 + 5; 操作數是立即數的加法

18、運算操作數是立即數的加法運算v addu $t1,$t6,$t7 addu $t1,$t6,$t7 # $t1 = $t6 + $t7; # $t1 = $t6 + $t7; 無符號數的加法運算無符號數的加法運算v subu $t1,$t6,$t7 subu $t1,$t6,$t7 # $t1 = $t6 - $t7; # $t1 = $t6 - $t7; 無符號數的減法運算無符號數的減法運算23MIPSMIPS的加減法指令以及溢出判斷的加減法指令以及溢出判斷2 2、測試溢出程序舉例、測試溢出程序舉例n無無符號數加法(符號數加法($t0=$t1+$t2),$t0=$t1+$t2),判溢出測試程

19、序:判溢出測試程序:vaddu $t0,$t1,$t2addu $t0,$t1,$t2vnor $t3,$t1,$zeronor $t3,$t1,$zero#$t3=($t1|0)#$t3=($t1|0)按位或非,即按位或非,即$t3= not $t1=2$t3= not $t1=23232-1-$t1-1-$t1vsltu #t3,$t3,$t2sltu #t3,$t3,$t2# if($t3=2# if($t3=23232-1-$t1)$t2 -1-$t1)$t2 即(即(2 23232-1-1) ($t1+$t2$t1+$t2), ,# then $t3=1;else $t3=0# th

20、en $t3=1;else $t3=0vbne $t3,$zero,Overflowbne $t3,$zero,Overflow# if $t3# if $t300 則溢出則溢出24MIPSMIPS的加減法指令以及溢出判斷的加減法指令以及溢出判斷n有有符號數加法符號數加法($t0=$t1+$t2),$t0=$t1+$t2),判溢出測試程序:判溢出測試程序:vaddu $t0,$t1,$t2addu $t0,$t1,$t2#$t0=sum,#$t0=sum,但是沒有陷入異常但是沒有陷入異常vxor $t3,$t1,$t2 #xor $t3,$t1,$t2 #檢查檢查2 2個操作數符號是否不同個操

21、作數符號是否不同vslt slt $t3$t3, ,$t3$t3,$zero,$zero# #小于比較,補碼表示,小于比較,補碼表示,if if $t3$t30,then 0,then $t3$t3=1,else =1,else $t3$t3=0,=0,即符號不同即符號不同$t3$t3=1=1vbne $t3,$zero,No_overflowbne $t3,$zero,No_overflow# if $t3# if $t30,then go to 0,then go to No_overflow(No_overflowNo_overflow(No_overflow的地址是的地址是PCPC+4

22、+PCPC+4+符號位擴展符號位擴展immediate2immediate2,即當前指令的下一,即當前指令的下一條指令地址條指令地址+ +符號位擴展符號位擴展immediate2)immediate2)即即$t1$t1和和$t2$t2符號不同,則不會溢出符號不同,則不會溢出25MIPSMIPS的加減法指令以及溢出判斷的加減法指令以及溢出判斷vxor $t3,$t0,$t1xor $t3,$t0,$t1# # 如果如果$t1$t1和和$t2$t2符號相同,那么它們與和的符號符號相同,那么它們與和的符號也相同嗎?如果不同,則也相同嗎?如果不同,則$t30$t30 0 時,時,XXY Y 補補 =

23、X = X補補YY補補 =X=X補補(0 0.Y.Y1 1Y Yn n)50 補碼一位乘法補碼一位乘法校正法校正法n當被乘數當被乘數X X的符號任意,的符號任意,Y Y為負數時:為負數時:YY補補 = 2 + Y = 1 .Y = 2 + Y = 1 .Y1 1Y Yn n則:則:Y = Y = YY補補 2 = 2 = 0 0.Y.Y1 1Y Yn n -1 -1XXY Y 補補 = = X X0 0.Y.Y1 1Y Yn n XX補補 = = X X0 0.Y.Y1 1Y Yn n 補補 + +XX補補因為因為0 0.Y.Y1 1Y Yn n 0 0,所以:,所以: X X0 0.Y.Y1

24、 1Y Yn n 補補 = =XX補補(0 0.Y.Y1 1Y Yn n)所以:所以:Y Y0=0=0,商的第,商的第i i位上位上1 1,并執(zhí)行操作:,并執(zhí)行操作:余數左移一位,再減余數左移一位,再減|Y|Y|,得,得R Ri+1i+1,則:,則:R Ri i1 1=2R=2Ri i|Y|Y|733 3、原碼不恢復余數算法、原碼不恢復余數算法如果如果R Ri i00E0,則,則E EX XEEY Y,M MY Y每右移一位,每右移一位,E EY Y+1+1,直至,直至 E EY Y=E=EX X 。若若E0E0,則,則E EX XEEY Y,M MX X每右移一位,每右移一位,E EX X+

25、1+1,直至,直至E EX X=E=EY Y 。n尾數相加減尾數相加減111浮點加減運算步驟浮點加減運算步驟n結果規(guī)格化結果規(guī)格化:尾數運算的結果可能出現兩種:尾數運算的結果可能出現兩種非規(guī)格化情況:非規(guī)格化情況:尾數溢出:需要尾數溢出:需要右規(guī)(右規(guī)(1 1次)次),即尾數右移,即尾數右移1 1位,階碼位,階碼1 1| |尾數尾數| 2| 0E=30,將,將M MY Y右移右移3 3位,位,E EY Y加加3 3:YY浮浮 = 00= 00,001 00.0001100 001 00.0001100 (101101)一、浮點加減運算一、浮點加減運算116n尾數相加:尾數相加: M MZ Z

26、補補 = = 11.100000111.1000001(101101)n結果規(guī)格化:左規(guī)一位,無溢出:結果規(guī)格化:左規(guī)一位,無溢出:MMZ Z 補補 = = 11.000001111.0000011(0101) EEZ Z 補補 = 00 = 00,001 + 11001 + 11,111= 00111= 00,000000n舍入:按照舍入:按照0 0舍舍1 1入法,尾數多余位舍去入法,尾數多余位舍去n結果為:結果為:ZZ浮浮 = 0= 0,000 1.0000011000 1.0000011一、浮點加減運算一、浮點加減運算117二、浮點乘法運算二、浮點乘法運算假設兩個浮點數假設兩個浮點數X

27、X和和Y Y:XEX2MXYEY2MY)E(EYXYX2)MM(YXZ118v浮點乘法運算步驟浮點乘法運算步驟n0 0操作數檢查操作數檢查n階碼相加階碼相加:階碼相加可以采用補碼或者移:階碼相加可以采用補碼或者移碼的定點整數加法,同時對相加結果判溢,碼的定點整數加法,同時對相加結果判溢,一旦發(fā)生正溢出,則需報告溢出,若發(fā)生負一旦發(fā)生正溢出,則需報告溢出,若發(fā)生負溢出,則將結果置為機器零。溢出,則將結果置為機器零。n尾數相乘尾數相乘n結果規(guī)格化結果規(guī)格化:可能需要左規(guī):可能需要左規(guī)1 1位位n舍入處理:舍入處理:尾數相乘的結果長度是尾數長尾數相乘的結果長度是尾數長度的兩倍,必須對低位舍入。度的兩

28、倍,必須對低位舍入。 二、浮點乘法運算二、浮點乘法運算119浮點數乘法運算流程浮點數乘法運算流程120二、浮點乘法運算(舉例)二、浮點乘法運算(舉例)例:例:一浮點數表示格式為:一浮點數表示格式為:1010位浮點數,階碼位浮點數,階碼4 4位,包位,包含含1 1位階符,用移碼表示,尾數位階符,用移碼表示,尾數6 6位,包含位,包含1 1位數符,位數符,用補碼表示,階碼在前,尾數(包括數符)在后,用補碼表示,階碼在前,尾數(包括數符)在后,已知:已知:X=X=(-0.11001-0.11001)2 2011011 Y Y=0.10011=0.100112 2-001-001 ,求,求Z=XZ=X

29、Y Y。要求階碼用移碼計算,尾數用補碼要求階碼用移碼計算,尾數用補碼BoothBooth算法計算。算法計算。解:解:按照浮點數的格式分別寫出它們的表示形式,為計按照浮點數的格式分別寫出它們的表示形式,為計算方便,階碼采用雙符號位移碼,尾數采用雙符號算方便,階碼采用雙符號位移碼,尾數采用雙符號位補碼:位補碼:XX浮浮 = 01= 01,011 11.00111011 11.00111YY浮浮 = 00= 00,111 00.10011111 00.10011121舉例舉例階碼相加階碼相加 E EZ Z 移移=E=EX X 移移+E+EY Y 補補 =01,011 + 11,111 =01,011

30、 + 11,111 =01,010 =01,010 無溢出無溢出 E EZ Z 移移 =1=1,010010尾數相乘尾數相乘 采用補碼采用補碼BoothBooth算法算法計算計算MMX X M MY Y 補補: M MX X 補補 = 11.00111 = 11.00111 M MY Y 補補 = 0.10011 = 0.10011 -M -MX X 補補= 00.11001 = 00.11001 MZ補補= 1.10001 00101122二、浮點乘法運算(舉例)二、浮點乘法運算(舉例)-MX-MX補補 = 00.11001 = 00.11001 MZMZ補補= 1.10001 00101

31、= 1.10001 00101 結果規(guī)格化結果規(guī)格化MZMZ左規(guī)一次得:左規(guī)一次得:MZ MZ 補補= 1.00010 01010 = 1.00010 01010 EZEZ減減1 1得:得:EZEZ移移 = 01= 01,010 + 11010 + 11,111 =01111 =01,001001 舍入舍入對尾數對尾數MZMZ進行進行0 0舍舍1 1入,最后得入,最后得 ZZ浮浮 = 1= 1,001 1.00010001 1.00010123三、浮點除法運算三、浮點除法運算假設兩個浮點數假設兩個浮點數X X和和Y Y:XEX2MX YEY2MY )(YXE(EYX2MMYXZ 124v浮點數

32、除法運算步驟浮點數除法運算步驟n0 0操作數檢查操作數檢查當除數為當除數為0 0,則報告除法出錯,或者結果,則報告除法出錯,或者結果(商)無窮大;(商)無窮大;當被除數為當被除數為0 0,則商為,則商為0 0。n階碼相減階碼相減階碼相減的結果也可能溢出,若發(fā)生正溢出,階碼相減的結果也可能溢出,若發(fā)生正溢出,則需報告浮點數溢出,若發(fā)生負溢出,則將則需報告浮點數溢出,若發(fā)生負溢出,則將結果置為機器零。結果置為機器零。n尾數相除尾數相除n結果規(guī)格化結果規(guī)格化n舍入處理舍入處理 浮點數除法運算步驟浮點數除法運算步驟125浮點數除法運算流程浮點數除法運算流程126三、浮點除法運算(舉例)三、浮點除法運算

33、(舉例)例:例:一浮點數表示格式為:一浮點數表示格式為:1010位浮點數,階碼位浮點數,階碼4 4位,包位,包含含1 1位階符,用移碼表示,尾數位階符,用移碼表示,尾數6 6位,包含位,包含1 1位數符,位數符,用補碼表示,階碼在前,尾數(包括數符)在后,用補碼表示,階碼在前,尾數(包括數符)在后,已知:已知: X=X=(-0.11001-0.11001)2 2011011 Y Y=0.10011=0.100112 2-001-001,求,求Z=XZ=XY Y。要求階碼用移碼計算,尾數用原碼加減交。要求階碼用移碼計算,尾數用原碼加減交替除法計算。替除法計算。解:解:按照浮點數的格式分別寫出它們

34、的表示形式為:按照浮點數的格式分別寫出它們的表示形式為: XX浮浮 = 1= 1,011 1.00111 Y011 1.00111 Y浮浮 = 0= 0,111 0.10011111 0.10011 階碼相減階碼相減EZEZ移移 = EX= EX移移 +-EY+-EY補補 = 01= 01,011 + 00011 + 00,001 = 01001 = 01,100100127舉例舉例尾數相除尾數相除采用原碼加減交替法計采用原碼加減交替法計算算|MX| |MX| |MY|MY|,首,首先寫出下例數據:先寫出下例數據:|MX| = 00.11001 |MX| = 00.11001 |MY| = 0

35、0.10011 |MY| = 00.10011 -|MY|-|MY|補補 = 11.01101 = 11.01101 |MZ| =|MX| |MZ| =|MX| |MY| = |MY| = 1.01010 1.01010 128三、浮點除法運算(舉例)三、浮點除法運算(舉例)結果規(guī)格化結果規(guī)格化由于由于|MX|MY|MX|MY|,所以,所以|MZ|1|MZ|1,必須右規(guī)一位,得,必須右規(guī)一位,得|MZ| = |MZ| = 0.10101 00.10101 0EZEZ加加1 1得:得:EZEZ移移 = 01= 01,100 + 00100 + 00,001 001 = 01 = 01,10110

36、1舍入舍入對對|MZ|MZ|進行進行0 0舍舍1 1入,得入,得|MZ| = 0.10101 MZ|MZ| = 0.10101 MZ原原 = = 1.10101 MZ1.10101 MZ補補 = 1.01011= 1.01011最后:最后:ZZ浮浮 = 1= 1,101 1.01011101 1.01011129四、浮點運算器四、浮點運算器130四、浮點運算器四、浮點運算器v 浮點運算復雜程度遠遠大于定點運算。浮點運算復雜程度遠遠大于定點運算。v 根據性能要求和需要來確定是否設置浮點運算器。根據性能要求和需要來確定是否設置浮點運算器。v 在在沒有浮點運算器沒有浮點運算器的機器中,基于一定的定點

37、運算部的機器中,基于一定的定點運算部件,可以按照上述浮點運算的算法件,可以按照上述浮點運算的算法用軟件來實現用軟件來實現。這。這種方法速度較慢。種方法速度較慢。v 浮點運算器浮點運算器由兩個松散連接的定點運算部件組成由兩個松散連接的定點運算部件組成:階階碼運算部件和尾數運算部件碼運算部件和尾數運算部件。 階碼運算部件要求具有加減運算和階碼運算部件要求具有加減運算和+1+1、-1-1的功能的功能 尾數運算部件要求具有加減乘除四則運算和移位的尾數運算部件要求具有加減乘除四則運算和移位的功能。功能。 1314.6 4.6 浮點運算器舉例浮點運算器舉例 80X8780X87算術協處理器算術協處理器 浮

38、點運算流水線浮點運算流水線一一二二 MIPSMIPS的浮點操作的浮點操作三三132一、一、 80X8780X87算術協處理器算術協處理器v 算術協處理器是一個特殊用途的微處理器,專門是為算術協處理器是一個特殊用途的微處理器,專門是為有效地執(zhí)行算術或超越函數的運算而設計的。有效地執(zhí)行算術或超越函數的運算而設計的。v 微處理器截取和執(zhí)行常規(guī)指令系統(tǒng)中的指令,而協處微處理器截取和執(zhí)行常規(guī)指令系統(tǒng)中的指令,而協處理器只截取和執(zhí)行協處理器指令。協處理器指令實際理器只截取和執(zhí)行協處理器指令。協處理器指令實際上是換碼(上是換碼(ESCESC)指令,微處理器使用這些指令為協)指令,微處理器使用這些指令為協處理

39、器產生一個內存地址,使得協處理器可以執(zhí)行協處理器產生一個內存地址,使得協處理器可以執(zhí)行協處理器指令處理器指令 1338038780387的主要性能和結構的主要性能和結構8038780387的性能的性能 可與配套的可與配套的CPUCPU芯片異步并行工作芯片異步并行工作 支持多種數據類型支持多種數據類型 具有高性能的具有高性能的8080位字長的體系結構位字長的體系結構 具有出色的內部出錯管理功能,能檢測出具有出色的內部出錯管理功能,能檢測出6 6種種錯誤錯誤 可在可在80386/8048680386/80486微機系統(tǒng)的兩種工作模式下微機系統(tǒng)的兩種工作模式下運行運行 擴展了擴展了80386/804

40、8680386/80486的指令系統(tǒng)的指令系統(tǒng) 1348038780387支持的支持的7 7種數據類型及其格式種數據類型及其格式 數據類型數據類型數據格式數據格式說明說明單字整數(單字整數(16位整數)位整數)二進制補碼二進制補碼短整數(短整數(32位整數)位整數)二進制補碼二進制補碼長整數(長整數(64位整數)位整數)二進制補碼二進制補碼短實數(短實數(32位浮點數)位浮點數)單精度浮點數單精度浮點數長實數(長實數(64位浮點數)位浮點數)雙精度浮點數雙精度浮點數臨時實數(臨時實數(80位浮點位浮點數)數)臨時浮點數臨時浮點數十進制數串(十進制數串(80位)位)18位位BCD碼碼S31位位S

41、63位位S階碼(階碼(8位)位) 尾數(尾數(23位)位)S階碼(階碼(11位)位) 尾數(尾數(52位)位)S階碼(階碼(15位)位) 尾數(尾數(64位)位)S(7位)位) d17 d16d1 d0S15位位S符號位;符號位;3種種浮點數均符合浮點數均符合IEEE754標準,標準,即階碼的底為即階碼的底為2,階碼值用移碼表階碼值用移碼表示,尾數用原碼示,尾數用原碼表示表示1358038780387的主要性能和結構的主要性能和結構8038780387的結構:分為兩個單元。的結構:分為兩個單元。n控制單元控制單元(Control UnitControl Unit,CUCU)將協處理器連)將協處

42、理器連接到微處理器系統(tǒng)數據總線上。微處理器和協接到微處理器系統(tǒng)數據總線上。微處理器和協處理器均監(jiān)視指令流,如果為處理器均監(jiān)視指令流,如果為ESCESC指令,則由協指令,則由協處理器予以執(zhí)行。處理器予以執(zhí)行。1368038780387的主要性能和結構的主要性能和結構8038780387的結構:分為兩個單元。的結構:分為兩個單元。n數字執(zhí)行單元數字執(zhí)行單元(Numeric Execution unitNumeric Execution unit,NEUNEU)負責執(zhí)行所有協處理器指令。)負責執(zhí)行所有協處理器指令。 NEUNEU中有一個由中有一個由8 8個個8080位寄存器構成的堆棧,位寄存器構成的

43、堆棧,用于存儲算術指令的操作數和結果。用于存儲算術指令的操作數和結果。 NEUNEU中還包含狀態(tài)寄存器、控制寄存器、標中還包含狀態(tài)寄存器、控制寄存器、標記寄存器和異常指針寄存器。記寄存器和異常指針寄存器。 FSTSWAXFSTSWAX指令是協處理器允許通過指令是協處理器允許通過AXAX寄存器寄存器和微處理器直接通信的唯一指令。和微處理器直接通信的唯一指令。1378038780387內部結構框圖內部結構框圖 138寄存器堆棧寄存器堆棧 8038780387包含包含8 8個寄存器個寄存器,每個為,每個為8080位位寬,它們首尾相寬,它們首尾相接,組成一個接,組成一個“先進后出先進后出”的寄存器堆棧

44、。這些堆的寄存器堆棧。這些堆棧寄存器中總是棧寄存器中總是包含一個包含一個8080位的擴展精度浮點數位的擴展精度浮點數。數據只有駐留在內存時才可能是任何其他格式。當數據只有駐留在內存時才可能是任何其他格式。當數據從內存中移到協處理器的寄存器堆棧中時,協數據從內存中移到協處理器的寄存器堆棧中時,協處理器將這些帶符號的整數、處理器將這些帶符號的整數、BCDBCD數、單精度或雙精數、單精度或雙精度數轉換為擴展精度浮點數。度數轉換為擴展精度浮點數。 8 8個寄存器編號為個寄存器編號為0-70-7,處于棧頂的寄存器稱為,處于棧頂的寄存器稱為棧頂棧頂寄存器寄存器,它的,它的編號由狀態(tài)寄存器的編號由狀態(tài)寄存器

45、的TOPTOP字段指出字段指出。在。在協處理器指令中,用協處理器指令中,用STST表示棧頂寄存器,用表示棧頂寄存器,用STST(i i)(i=1-7i=1-7)訪問相對于棧頂寄存器偏移量為)訪問相對于棧頂寄存器偏移量為i i的寄存的寄存器,即器,即i i是偏移量,而不是寄存器實際的編號。是偏移量,而不是寄存器實際的編號。139狀態(tài)寄存器狀態(tài)寄存器v狀態(tài)寄存器反映協處理器所有指令的運行情況。狀態(tài)寄存器反映協處理器所有指令的運行情況。只在只在8018780187以上的以上的更高型號中使用更高型號中使用 140狀態(tài)寄存器狀態(tài)寄存器nB B忙位忙位(busy bitbusy bit)表明協處理器正忙于

46、執(zhí)行一項)表明協處理器正忙于執(zhí)行一項任務,通過檢測狀態(tài)寄存器或者使用任務,通過檢測狀態(tài)寄存器或者使用FWAITFWAIT指令均指令均可測試忙位。由于較新的協處理器自動與微處理器可測試忙位。由于較新的協處理器自動與微處理器同步,所以在執(zhí)行其他協處理器任務之前不必測試同步,所以在執(zhí)行其他協處理器任務之前不必測試忙標志。忙標志。nC3C3C0C0 條件碼位條件碼位(condition code bit(condition code bit),表明了),表明了協處理器的條件。協處理器的條件。nTOPTOP棧頂棧頂(top-of-stacktop-of-stack,STST)位表示當前尋)位表示當前尋址

47、為棧頂的寄存器,通常是寄存器址為棧頂的寄存器,通常是寄存器STST(0 0)。nESES錯誤匯總錯誤匯總(error summaryerror summary)位,當任何一)位,當任何一個非屏蔽的錯誤位(個非屏蔽的錯誤位(PEPE、UEUE、OEOE、ZEZE、DEDE或或IEIE)被)被置位時,則置位時,則ESES被置位。在被置位。在80878087協處理器中該位也可協處理器中該位也可引起協處理器中斷。但從引起協處理器中斷。但從8018780187開始,不再有協處開始,不再有協處理器中斷。理器中斷。141狀態(tài)寄存器狀態(tài)寄存器nSFSF堆棧標志堆棧標志(stack flagstack flag

48、)位用于區(qū)分堆棧)位用于區(qū)分堆棧上溢和下溢的非法操作。當該位被置上溢和下溢的非法操作。當該位被置1 1時,再根據時,再根據標志位標志位B9B9(C1C1)來區(qū)分上溢和下溢兩種情況。)來區(qū)分上溢和下溢兩種情況。nPEPE精度錯誤精度錯誤(precision errorprecision error)表明結果)表明結果或操作數超過了設定的精度范圍?;虿僮鲾党^了設定的精度范圍。nUEUE下溢錯誤下溢錯誤(underflow errorunderflow error)表明一個)表明一個非非0 0的結果太小,以致于不能用由控制字選擇的當的結果太小,以致于不能用由控制字選擇的當前精度來表示。前精度來表示

49、。nOEOE上溢錯誤上溢錯誤(overflow erroroverflow error)表明結果太)表明結果太大而不能被表示出來,如果此錯誤被屏蔽,則協大而不能被表示出來,如果此錯誤被屏蔽,則協處理器對上溢錯誤就會產生一個無窮大。處理器對上溢錯誤就會產生一個無窮大。142狀態(tài)寄存器狀態(tài)寄存器nZEZE被零除錯誤被零除錯誤(zero errorzero error)表明當被除)表明當被除數是非無窮大和非零時,除數是零。數是非無窮大和非零時,除數是零。nDEDE非規(guī)格化操作數錯誤非規(guī)格化操作數錯誤(denormalized denormalized errorerror)表明至少有一個操作數是非規(guī)

50、格化的。)表明至少有一個操作數是非規(guī)格化的。nIEIE非法操作錯誤非法操作錯誤(Invalid errorInvalid error)表明堆)表明堆棧有上溢或下溢錯誤,是不確定的形式(棧有上溢或下溢錯誤,是不確定的形式(0 00 0、+ + 和和- -等),或者使用了等),或者使用了NANNAN作為操作數。此標作為操作數。此標志表明諸如對負數開平方等類似的錯誤。志表明諸如對負數開平方等類似的錯誤。143狀態(tài)寄存器狀態(tài)寄存器 執(zhí)行執(zhí)行FSTSWFSTSW指令就可以訪問狀態(tài)寄存器,此指令將狀指令就可以訪問狀態(tài)寄存器,此指令將狀態(tài)寄存器中的內容存人內存的一個字單元中。在態(tài)寄存器中的內容存人內存的一個

51、字單元中。在8018780187或或8018780187以上的協處理器中,以上的協處理器中,FSTSW AXFSTSW AX指令可將指令可將狀態(tài)寄存器中的內容直接復制到微處理器的狀態(tài)寄存器中的內容直接復制到微處理器的AXAX寄存器寄存器中。一旦狀態(tài)寄存器的狀態(tài)被存儲到內存或中。一旦狀態(tài)寄存器的狀態(tài)被存儲到內存或AXAX寄存器寄存器中,則可以使用常規(guī)軟件檢測狀態(tài)寄存器中的各位,中,則可以使用常規(guī)軟件檢測狀態(tài)寄存器中的各位,譬如使用以下兩種方法測試狀態(tài)寄存器的各位。一種譬如使用以下兩種方法測試狀態(tài)寄存器的各位。一種方法是使用方法是使用TESTTEST指令來測試狀態(tài)寄存器的各位,另一指令來測試狀態(tài)寄

52、存器的各位,另一種方法是使用種方法是使用SAHFSAHF指令將狀態(tài)寄存器中最左邊的指令將狀態(tài)寄存器中最左邊的8 8位位傳送到微處理器的標志寄存器中。傳送到微處理器的標志寄存器中。 協處理器和微處理器之間的通信在協處理器和微處理器之間的通信在8018780187和和8028780287中是中是通過通過I IO O端口端口00FAH00FAH00FFH00FFH實現的,而在實現的,而在8038780387Pentium4Pentium4中是通過中是通過I IO O端口端口800000FAH800000FAH800000FFH800000FFH實實現的。現的。144控制寄存器控制寄存器 控制寄存器包

53、括精度控制、舍入控制和無窮大控制,控制寄存器包括精度控制、舍入控制和無窮大控制,它也可以屏蔽或者不屏蔽與狀態(tài)寄存器最右邊它也可以屏蔽或者不屏蔽與狀態(tài)寄存器最右邊6 6位對位對應的異常位。應的異常位。FLDCWFLDCW指令用于給控制寄存器賦值。指令用于給控制寄存器賦值。 控制寄存器中各位及各個組合位的功能:控制寄存器中各位及各個組合位的功能:nICIC無窮大控制(無窮大控制(infinity controlinfinity control)nRCRC舍入控制(舍入控制(rounding controlrounding control)nPCPC精度控制(精度控制(precision contr

54、olprecision control)nException MasksException Masks異常屏蔽字段異常屏蔽字段1458038780387控制寄存器控制寄存器146標記寄存器標記寄存器 標記寄存器(標記寄存器(tag registertag register)表明協處理器堆棧中)表明協處理器堆棧中每個寄存器內容的狀態(tài)特征,又叫每個寄存器內容的狀態(tài)特征,又叫特征寄存器特征寄存器。標。標記寄存器用每記寄存器用每2 2位表示寄存器堆棧中位表示寄存器堆棧中1 1個寄存器的狀個寄存器的狀態(tài),即態(tài),即TAGTAG(i i)表示堆棧寄存器)表示堆棧寄存器STST(i i)的狀態(tài)。)的狀態(tài)。TA

55、GTAG(i i)特征值為)特征值為00001111四種組合時分別表明相應四種組合時分別表明相應的寄存器有正確數據、數據為的寄存器有正確數據、數據為0 0、數據非法、無數據、數據非法、無數據4 4種情況。種情況。 通過程序查看標記寄存器的唯一方法通過程序查看標記寄存器的唯一方法是使用是使用FSTENVFSTENV、FSAVEFSAVE或或FRSTORFRSTOR指令來存儲協處理器操作環(huán)境。其指令來存儲協處理器操作環(huán)境。其中每條指令均可將標記寄存器與其他協處理器數據中每條指令均可將標記寄存器與其他協處理器數據一起存儲。一起存儲。 147標記寄存器標記寄存器148二、浮點運算流水線二、浮點運算流水

56、線v為了實現流水,首先必須把輸入的任務分割為為了實現流水,首先必須把輸入的任務分割為一系列的子任務,使各子任務能在流水線的各一系列的子任務,使各子任務能在流水線的各個階段個階段并發(fā)地并發(fā)地執(zhí)行。將任務連續(xù)不斷地輸入流執(zhí)行。將任務連續(xù)不斷地輸入流水線,從而實現了子任務的水線,從而實現了子任務的并行并行。v流水處理大幅度地改善了計算機的系統(tǒng)性能,流水處理大幅度地改善了計算機的系統(tǒng)性能,是在計算機上實現是在計算機上實現時間并行性時間并行性的一種非常經濟的一種非常經濟的方法。的方法。149二、浮點運算流水線二、浮點運算流水線 v PentiumPentium浮點流水線由預取浮點流水線由預取PFPF、首

57、次譯碼、首次譯碼D1D1、二次譯、二次譯碼碼D2D2、取操作數、取操作數EXEX、首次執(zhí)行、首次執(zhí)行X1X1、二次執(zhí)行、二次執(zhí)行X2X2、浮點、浮點寄存器寫入寄存器寫入WFWF和出錯報告和出錯報告ERER共共8 8個操作步驟組成。個操作步驟組成。v PentiumPentium微處理器的浮點流水線由浮點接口、寄存器微處理器的浮點流水線由浮點接口、寄存器組及控制部件組及控制部件FIRCFIRC、浮點指數功能部件、浮點指數功能部件FEXPFEXP、浮點乘、浮點乘法部件法部件FMULFMUL、浮點加法部件、浮點加法部件FADDFADD、浮點除法部件、浮點除法部件FDIVFDIV以及浮點舍入處理部件以

58、及浮點舍入處理部件PFRNDPFRND共共7 7個部件組成。個部件組成。v PentiumPentium浮點流水線對于浮點的取數、加減法、乘法浮點流水線對于浮點的取數、加減法、乘法和比較等和比較等“基本基本”操作,采用了新的算法并用硬件來操作,采用了新的算法并用硬件來實現,其執(zhí)行速度是實現,其執(zhí)行速度是8048680486的的1010倍多,允許單周期通倍多,允許單周期通過,即能以每個時鐘執(zhí)行一條浮點指令的速度來執(zhí)行。過,即能以每個時鐘執(zhí)行一條浮點指令的速度來執(zhí)行。150二、浮點運算流水線二、浮點運算流水線 v PentiumPentium浮點部件內配置了直接支持浮點部件內配置了直接支持3 3倍

59、精度浮點計倍精度浮點計算的部件,極大地簡化了微體系結構,并明顯地改算的部件,極大地簡化了微體系結構,并明顯地改進了浮點部件的性能。進了浮點部件的性能。v 基于基于NetBurstNetBurst微架構的微架構的Pentium4Pentium4實現了被稱作為流實現了被稱作為流SIMDSIMD擴展擴展2 2(SSE2SSE2)的)的144144條新條新SIMDSIMD指令,這些新指指令,這些新指令支持令支持128128位的位的SIMDSIMD整數操作和整數操作和128128位位SIMDSIMD雙精度浮雙精度浮點操作。點操作。v CoreCore構架擁有構架擁有2 2個浮點執(zhí)行單元同時處理向量和標個浮點執(zhí)行單元同時處理向量和標量的浮點運算,其中一個浮點單元負責加減等簡單量的浮點運算,其中一個浮點單元負責加減等簡單的處理,而另一個浮點單元則負責乘除等運算。的處理,而另一個浮點單元則負責乘除等運算。CoreCore構架對浮點性能的改進效果是顯而易見的。構架對浮點性能的改進效果是顯而易見的。 151三、三、MIPSMIPS的浮點操作的浮點操作v支持支持IEEE754IEEE754的單精度和雙精度格式的單精度和雙精度格

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論