【計算機組成原理】定點數運算


定點數加減運算

補碼加法:

負數用補碼表示后,可以和正數一樣去處理

當需要減去一個數x的時候,可以用加上x對應的負數的補碼【-x】補來代替

【x】補+【y】補=【x+y】補

補碼減法

【x-y】補=【x】補+【-y】補(mod 2)

【x-y】補=【x】補+【-y】補 (mod 2的n+1次方)

補碼基本規則:

  • 運算的各個操作數均用補碼表示,運算結果仍是補碼
  • 符號位和數值位一樣參加運算
  • 如果求和,則將兩補碼直接相加,得到兩數之和的補碼,若求差,則將減數變補(【y】補變【-y】補),然后和被減數相加,得到兩數之差的補碼
  • 如果超過則模丟掉

溢出:

兩個正數相加結果變為負數   溢出

兩個負數相加結果變為正數   溢出

雙符號位也叫變形補碼(00表示正  11表示負)  符號位參加運算如果結果出現 01 或10 則發生溢出

單符號位:最高數值位產生進位符號位五金位產生上溢     最高有效位無進位符號位有進位產生下一,也就是當都有進位或都沒有進位時不產生溢出,用異或們表示。

 

定點乘法:

原碼一位乘法:數值位相乘  符號位單獨處理

乘積的位數擴大一倍(兩個4位相乘變成8位)

改進乘法:

 

定點除法

原碼除法運算原理

兩個原碼表示的數相除,商的符號由兩數的符號按位相加求得,商的部分由兩數的數值部分相除求得。

被除數x原碼為【x】原=XfXn-1.....X1X0

除數y原碼【y】原=YfYn-1....y1y0

則有商q=x/y其原碼為

【q】原=(Xf異或Yf)+(0.Xn-1...X1X0/0.Yn-1...Y1Y0)

恢復余數法:

機器必須現做減法,若余數為正才知道夠減,若余數為負,才知道不夠減。不夠減是必須回復原來的余數,以便在繼續往下,這種稱為恢復余數法。

不恢復余數法:

但由於要恢復余數,使除法進行過程的步數不固定,因此控制比較復雜

實際中常用不恢復余數法,又稱加減交替法,重點是運算過程中如出現不夠減則不必恢復余數,根據余數符號,可以繼續往下運算,因此步數固定,控制簡單。

真題

1、假定在一個8位字長的計算機中進行如下類C程序

1 unsigned  int x=134;
2 unsigned int y=246;
3 int m=x;int n=y;
4 unsigned int z1=x-y;
5 unsigned int z2=x+y;
6 int k1=m-n;
7 int k2=m+n;

若編譯的時候將8個8位寄存器R1~R8分別分配給x y m n z1 z2 k1 k2請回答下列問題(帶符號整數用補碼表示)

1)執行上述程序段后,寄存器R1 R5 R6和分別是什么,十六進制表示

2)執行后,變量m和k1的值分別是多少(十進制)

3)上述程序段設計帶符號的整數加減  ,無符號整數的加減運算 四種運算能否利用同一個加法器及輔助電路實現?

4)計算機內部如果判斷帶符號的整數加減運算的結果是否溢出,上述程序段中,那些帶符號整數運算語句的執行結果會溢出

R1   R2 R3 R4 R5 R6 R7 R8
X Y m n z1 z2 k1 k2
無符號 無符號            

答:1)x=134=1000 0110=86H   Y=246=1111 0110=F6H

R5=x-y=134-246=-112->1111 0000->1 001 0000(補)=90H

R6:z2=134+246=380=1 0111 1100=7CH(高位丟棄了)

2)m補=x=1000 0110->m=1111 1010 =-122

n補=y=1111 0110->n=1000 1010 =-10

k1=m-n=-122-(-10)=-112

3)能  無符號數有符號數都是二進制代碼,有符號數的符號位代碼化了,和數值位一樣參加運算,減一個數等於加上整數對應的負數的補碼

4)雙符號位   單符號位等

 

2、

 

 

浮點數的表示方法

  31 23-30 0-22
32位 S符號位 E移碼表示   127  M尾數
  63 52-62 0-51
64位 S符號位 E移碼表示  1023 M尾數

32位浮點數中,將浮點數的指數真值e變為階碼,應將指數e加上一個固定的偏移量127(01111111) E=e+127 .因為階碼是用移碼表的

規格化:當尾數的值不為0時,尾數域的最高位應為1,否則修改階碼同事左右移小數點的辦法,使其變成這一表示方式,這稱為浮點數的規格化表示。因為尾數的最高位總為1,所以這一位不需要存儲而是默認存在、

 

當階碼E全0(00000000)且尾數M也全為0時,表示的真值x為0,結合符號位s為0或1,有正零和負零之分

當階碼全是1(11111111)且尾數M為全0,表示的浮點數位無窮大,結合符號位S為0或1,也有正無窮大和負無窮大之分、

32位浮點數表示除去全0和全1階碼范圍為00000001 到1111 1110   也就是1到254

規格化浮點數指數e則為-126(1-127)到127(154-127)

 

 

 

浮點數的加減運算

因為右移丟失的誤差小,所以采用尾數右移,對階的原則是小階向大階對齊,尾數右移1位階碼+1.

 

浮點數的溢出:

上溢發生中斷  下溢不發生中斷

例題:

D

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM