計算機組成原理(2)——數據的表示與運算

2、數據的表示與運算測試

 

數據如何表示,運算器如何運算,算的過程如何用電路和硬件來實現。編碼

 

運算器設計

 

考綱要求指針

1.10、2、8、十六進制數及其相互轉換。真值和機器數之間的關係以及BCD碼、字符與字符串編碼、效驗碼。blog

(重點)數據的表示原碼、反碼、補碼、移碼以及他們之間的關聯與區別。字符串

2.定點數的表示,定點數位移運算、原碼定點數加/減運算、補碼定點數的加減運算、定點數乘/除運算、溢出概念和判別方法。基礎

3.浮點數的表示(浮點數的表示範圍和IEEE754標準)和浮點數的加/減運算。原理

4.串行加法器和並行加法器、算術邏輯單元ALU的功能和結構。擴展

 

定點數的表示硬件

   定點表示:約定機器中全部數據的小數點位置固定不變。因爲約定在固定位置,小數點就再也不使用記號「.」來表示。

   一般將放到數值位最後面或者最前面,這樣的數據表示成純整數或純小數。

 

 1 無符號數的表示

   用所有二進制代碼表示表示數字,沒有符號位。

          8位二進制無符號數的範圍

( 00000000~11111111) 0~2^8-1 (0~255)共256個數

 

 

問:爲啥是2^8-1?

 

答:

 

1111 1111

最低位是 最高位是

1*2^0  ~  1*2^7

 

s8 = 1*(1-2^8)/(1-2)

  = 2^8-1

 

或者能夠理解爲加一位是1 1111 1111  是1*2^8 -1。

 

2. 有符號數的表示方法

  定點數 x= x0 x1 x2 … xn 在機中表示以下(x0爲符號位,0表明正號,1表明負號)

對於小數的表示:

小數點位置默認省略掉。

 

純小數的表示範圍

(x0 x1 x2 … xn  數值位各位均爲0時絕對值最小;數值位各位均爲1時絕對值最大)

 

即這些數爲: -0.11……1 <= x <= +0.11……1

             |n個1|           |n個1|

 

上結論:

         0<= | x | <= 1-2^-n

       -(1-2^-n) <= | x | <= 1-2^-n

 

結論是怎麼獲得的呢?

答:

 

用八位二進制

2.純整數的表示

純整數的表示範圍爲

(x0 x1 x2 … xn 數值位各位均爲0時 絕對值最小;數值位各位均爲1時絕對值最大)

    

結論:

            -(2^n-1) <=  x  <= 2^n -1           (1後面n個0)

                 0  <=  |x|  <=2^n-1

 

即        -11……1 <= x <= + 11……1

 

 

好比說32位二進制數,符號位佔了一位 數值位佔了31位,

問:

 機器字長爲32位,定點表示時,數符1位,尾數31位。

則:定點整數表示時,

最大正數值 = _________2^31 - 1______________,  (011……1)

最小負數值 = ________-2^31 - 1______________。  (11……1)

   定點小數表示時,

最大正數值 =__________1 – 2^-31____________, (01……1)

最小負數值 =________-(1 – 2^-31)___________。 (11……1)

 

十進制加法器可由BCD碼(二-十進制碼)來設計,它能夠在二進制加法器的基礎上加上適當的」校訂」邏輯來實現,該校訂邏輯可將二進制的」和」改編成所要求的十進制格式。

爲了便於計算機的運算,必須對二進制的定點數進行合適的編碼。

 

下面講定點數的機器碼錶示:

 

  1. 原碼錶示法

原碼就是數值的真值(絕對值)前面加上一個絕對值(正數0、負數1)。

 

若定點小數的原碼形式爲x0 x1 x2 … xn ,則原碼錶示的定義是

 

[x]原 =   0 + |x| = x    (1 >  x  >= 0)

         1 + |x| = 1-x  (0 >=  x  >-1)

 

式中[x]原式機器數,x是真值

例如, x = + 0.1001,則 [x]原 = 0.1001

     x = - 0.1001,則 [x]原 = 1.1001

 

對於0,原碼機器中每每有」+0」、」-0」之分,故有兩種形式:

 [+0]原 = 0.000…0

 [-0]原 = 1.000…0

 

一個n+1位(包括數值位和符號位)定點小數原碼的表示範圍是

-0.111…11 ~ +0.111…11

   | n位 |     | n位 |

 -( 1 – 2^-n) <= x <= 1-2^n

若 定點整數 的原碼形式爲 x0 x1 x2 … xn, 則原碼錶示的定義是

 

[x]原 = 0 + | x | = x     2^n > x >=0

       2^n + | x | = 2^n-x  0 >= x > -2^n

 

n+1位定點整數原碼的表示範圍是

  -111…11 ~ + 111… 11

   | n位 |     | n位  |

  -(2^n – 1) <= 2^n -1

 

對於0,原碼機器中每每有」+0」、」-0」之分,故有兩種形式:

     [+0]原 = 0000…0

     [-0]原 = 1000…0

 

  n+1位定點整數原碼的表示範圍

  -(2^n - 1) <= x <= 2^n -1

 

 

思考: n+1位定點整數原碼能表示多少個數?有幾個編碼?

 

例如:1個字節8位,2^8 = 256

1位符號位,7位數值位,-127~+127   255個 由於0佔了兩個編碼

 

(1)   x和-x的原碼轉換

將[x]原的符號位(左端第一位)取反,既可獲得[-x]原。

(2)   原碼中0的表示不惟一。

純小數: [+0]原 = 0.00…0, [-0]原 = 1.00…0

純整數: [+0]原 = 00…0, [-0]原 = 100…0

(3)   若原碼字長位n,總共有2^n個編碼,但對應的真值只有2^n-1個。

由於[0]原佔用了兩個編碼,所以原碼錶示範圍較小(2^n個編碼只能表示2^n-1個真值)。注意與補碼的不一樣。

(4)   若原碼字長位n,總共有2^n個編碼,但對應的真值只有2^n個。

由於[0]原佔用了兩個編碼,所以原碼錶示的範圍較小(2^n個編碼只能表示2^n-1個真值)。注意與後面補碼的差別。

 

(5)   負數原碼形式上大於正數的原碼:

   對於定點小數,當x>0時 0<[x]原<1;

               當x<0 時 1<[x]原<2。

   對於定點正數,當x>0時, x<[x]原<2^n-1;

               當x<0 時, 2^n-1<[x]原<2^n。

 

(6)   原碼的移位規則:

符號位不變,數值部分左移或右移,移出的空位填」0」。(左移一位至關於乘以2,右移一位至關於除以2)

優勢:原碼簡單易懂,與真值轉換容易,實現乘除法方便。

   (乘除法數值位由兩束的絕對值相乘/除獲得,符號位由兩束的符號位異或便可);

 

不足:1.原碼中0的表示由兩種,給使用帶來了不便。

2.原碼錶示的加減法運算複雜,這是由於:當兩數相加時若是時同號則數值相加,若是是異號,則進行減法。

 

  2.補碼錶示法

  舉例1:假設如今的標準時間位4點正;而有一隻表已經7點了,爲了校準時間,能夠採用兩種方法:

  將時針退7-4 = 3格;

  將時針向後撥9格,7+9(mod 12) = 4。

這兩種方法都能校準到4點。

 

減3和加9是等價的,即9是(-3)對12的

  -3 = +9(mod12)

 

7-3和7+9(mod 12)等價,緣由就是表指針超過12時,將12自動丟掉,最後獲得16-12=4。從這裏能夠獲得一個啓示,就是負數用補碼錶示時能夠把減法轉換爲加法。

 7-3和7+9(mod 12) 等價,9稱爲-3對12的補碼即:

補碼的定義就是(mod+真值)

 

[X]補 = M + X(Mod M)

 

正數的補數等於自己。

負數的補碼等於模與該數絕對值之差。

補碼的性質:

(1)   幾個特殊數值的補碼錶示:

0的補碼錶示

 

補碼的表示範圍比原碼範圍大

純小數補碼比原碼多表示一個-1

純整數補碼比原碼多表示一個-2^n

 

這個多表示的數來自於-0,將-0表示爲上面的兩個數。

 

因此,補碼的表示範圍:

8位正數/1位是符號位 7位是數值位

原碼 -127~+127        255個數

補碼 -128~+127之間    256個數

 

(3)補碼和原碼的關係

 對於正數直接取其二進制數的表示構成補碼。

 即 若x>=0,[x]原=[x]補。     

 若 x<0 符號位不變,各位求反後最低位+1。

 

注意:補碼中特殊數-1(純小數)和-2^n(純整數)的表示,在原碼中沒有對應表示。

 

(4)[x]補 和 [-x]補 的關係

·已知[x]補,將[x]補的各位(含符號位)取反,而後在最低位上加1,即獲得[-x]補。反之亦然。

 

 

(5)補碼的算數移位規則:

補碼的左移(乘2):符號位不變,數值部分左移,最低位移出的空位填0;

補碼的右移(除2):符號位不變,數值部分右移,最高位移除的空位填符號位。

 

(6)負數補碼形式上大於正數的補碼:

與原碼相似

 

(7)補碼的位擴展

例如將字節(8位二進制)表示的補碼擴展位16位二進制表示的補碼。

        定點小數:在最低位用0擴展。

        定點整數:在最高位用符號位擴展。

       

經常使用求補碼的方法(與定義求補碼比較):

  1. 若x>=0 則[x]補=x,符號位爲0

若x<0 則將x絕對值的各位取反,而後再最低位上加1,符號位求1,即獲得[x]補

  1. 若x>=0 數值位不變,符號位爲0.

若x<0,數值位從最低位開始,對遇到的0和第一個1取其原來的代碼,對第一個之後開始直至最高爲均按位取反,符號位爲1

3.反碼錶示法

二進制的各位數碼0變爲1,1變爲0.

    反碼自己就是一個求補碼的中間環節。

    反碼的主要做用就是求補碼

對 定點小數,反碼錶示的定義爲

 

[x]反 =  x        (1 > x >= 0)     (mod(2-2^-n))

       (2-2^-n) + x   (0 >= x > -1)

 

其中n表明數的位數。

反碼實質上是一種特殊的補碼,其特殊支出在於反碼的模比補碼的模小一個最低位上的1。

 

對於0,有[+0]反和[-0]反之分

       [+0]反 = 0.00…0

       [-0]反 = 1.11…1

對於定點整數,反碼錶示的定義爲

 

[x]反 = x                  2^n > x >= 0

      (2^n-1 – 1 ) + x      0 >= x > -2^n

  

 

反碼的特色:

1)     在反碼錶示中,用符號位x0表示正負,形式與原碼錶示相同,0爲正,1爲負

2)     反碼中,0 有兩種表示形式

純小數: [+0]反 = 0.00…0   [-0]反=1.11…1

3)     反碼的表示範圍與原碼相同。注意,純小數的反碼不能表示爲-1,純整數的反碼不能表示爲-2^n

 

4.移碼錶示法

  補碼錶示很難直接判斷其真值大小。

浮點數的階碼是用移碼來表示的。

 

人的直覺會以爲後面的比前面的大,然而並非這樣,也並無什麼卵用。

移碼

 

模的指數比補碼少1.

 

2^n+1次方

 

2^n次方

 

移碼一般用於表示浮點數的階碼。因爲階碼是個n位的正數,假定定點整數移碼形式位x0,x1,x2..xn時,

 

對定點整數,移碼的傳統定義是n位數值真值加上一個固定常數2^n

 

[x]移 = 2^n + x     2^n > x >= -2^n

 

對定點小數,移碼的傳統定義是真值加上一個固定常數1

 

  [x]移 = 1+x         +1 > x >= -1

 

若階碼數值部分爲7位,以x表示真值,則

 

[x]移 = 2^7 + x = 128 + x     128 > x >= -128

 

例如,當正數 x = +1010101時,

           [x]移 = 2^7 + 1010101

                = 1,0000000 + 1010101

                = 1,1010101;

 

 

當負數 x = -1010101時,

       [x]移 = 2^7 + x = 2^7 – 1010101

           = 10000000 – 1010101

            = 0,0101011

移碼中的逗號不是小數點,而是表示左邊一位是符號位。

移碼中符號位x0表示的規律與原碼、補碼、反碼相反(0表示負1表示正)

 

(1)移碼的幾何性質

移碼錶示的實質是把真值映像到一個正數域,所以移碼的大小能夠直觀的反應真值的大小。

無論整數仍是負數,用移碼錶示時,能夠按無符號數比較大小。

 

(1)   移碼中」0」的表示

移碼中」0」的表示是惟一的

  [+0]移 = [-0]移 = 2^n+- 0 … 0 = 10…0 (純整數)

  移碼的表數範圍與補碼一致。

  純整數移碼錶示的最小數能夠表示到-2^n

 

(2)   移碼與補碼的關係

   x>=0 時,[x]補=x,[x]移=2^n+x [x]移 = [x]補 + 2^n

   x< 0  時,  [x]補 = 2^(n+1) + x , [x]移 = 2^n + x , [x]移 = 2^n + [x]補 – 2^n+1

                  = [x]補 – 2^n

  x = + 1011010

  [x]補 = 01011010

  [x]移 = 2^n+x = 2^7+1011010 = 11011010

 

(3)   移碼的符號位:

   0表示負數,1表示正數,和原碼、反碼、補碼不一樣。

 

(4)   移碼與真值的線性關係:

移碼的順序和真值徹底一致,所以移碼在表示階碼時能夠方便的進行大小的比較,其結果與真值一致。

答:是32位機器,因此int類型是32位,y爲短整形16位,

z = x + y

 

加減運算必定是補碼運算

127 = 01111111 真值

è 0000,0000,0000,0000,0000,0000,0111,1111 = 0000007FH

  

-9  = 11001

   -> 10111 -> 1111,1111,1111,0111 = FFF7H

 

  127+(9)= 118 = 01110110

 

8位

1個符號位 7個數值位

表示範圍是-128~+127

 

 

答案選B。

 

效驗碼

 

  元件故障\噪聲干擾等各類因素經常致使計算機在處理信息過程當中出現錯誤。爲了

  防止錯誤,可將信號採用專門的邏輯線路進行編碼以檢測錯誤,甚至校訂錯誤。一般的方法是,在每一個字上添加一些校驗位,用來肯定字中出現錯誤的位置。

 

  1. 奇偶校驗碼

組成奇偶校驗碼的基本方法:在n位有效信息位上增長一個二進制校驗位,構成一個n+1位奇偶校驗碼。

奇校驗:使n+1位的奇偶校驗碼中的1的個數爲奇數。

偶校驗:使n+1位的奇偶校驗碼中的1的個數爲偶數。

 

B.海明校驗碼

 海明校驗實質上是一種多重奇偶校驗。它將有效信息按某種規律分紅若干組,每組安排一個校驗位做奇偶測試,就能提供多位檢錯信息,以指出最大多是哪位出錯,從而將其糾正。

 2.2.2 定點數的運算

 定點加法減法運算

 補碼加法

  負數用補碼錶示後,能夠和正數同樣來處理。

     當須要減去一個x時能夠用加上x對應的負數的補碼[-x]補來代替。

     這樣,運算器裏只須要一個加法器就能夠了,沒必要爲了負數的加法運算,再配一個減法器。

   補碼運算的基本規則:

  1. 運算的各個操做數均補碼錶示,運算結果還是補碼。
  2. 符號位與數值位同樣參加運算。
  3. 求和求差直接加
  4. 補碼是對肯定的模而言,若運算結果超過了模,則將模自動丟掉。

 

2.2.23 溢出概念與檢測方法

兩個正數相加,結果大於機器所能表示的最大正數,稱爲上溢,而兩個負數相加,結果小於機器所能表示的最小負數,稱爲下溢。

爲了判斷」溢出」是否發生,可採用兩種檢測的方法。第一種方法是採用雙符號位法。

 

雙符號位法又稱變形補碼,符號位又兩位用」00」表示正,「11「表示負。

*瞭解

2.2 定點乘法運算

2.2.1 原碼一位乘法

  1.分析筆算乘法

  A=-0.1101 B = 0.1011

   0.1101

X  0.1011

_____________

1101

   1101

  0000

1101

0.10001111

 

乘積的符號心算求得

 

符號位單獨處理

乘數的某一位決定是否加被乘數

4個積一塊兒相加

乘積的位數擴大一倍

 

乘法改進

 

A*B = A* 0.1011 = A*(0.1+0.00+0.001+0.0001)

    = 0.1*A + 0.00*A + 0.001*A + 0.0001*A

    = 0.1{A+0.1[0*A+0.1*(A+0.1*A)]}

 

乘->移+加

 

[乘積]   0

小結

 

乘法 運算可用 加和移位實現

n = 4, 加4次,移4次

由成熟的末位決定被乘數是否與原部分積相加,而後à1位造成新的部分積,同時乘數->1位(末位移丟), 空出高位存放部分積的低位。

 

被乘數只與部分積的高位相加

硬件:   3個寄存器,具備移位功能。

       1 個全加器

 

 

2.4 定點除法運算

2.4.1 原碼除法運算原理

 

機器的運算過程和人不一樣,人會心算,一看就知道夠不夠減。

但機器卻不會心算,必須先做減法。

若餘數位正,才知道夠減;若餘數位負,才知道不夠減。

不夠減時必須恢復原來的餘數,以便再繼續往下運算。這種方法稱爲恢復餘數法。

要回復原來的餘數,只要當前的餘數

 

恢復餘數法

餘數爲正 商1

餘數爲負 商0,恢復餘數

 

因爲要恢復餘數,使除法進行過程的步數不固定,所以控制比較複雜。

2.浮點數的表示方法

 

 

 

 

 

 

 

 

 

 

騷操做

2.6.1       浮點加法、減法運算

(3)尾數求和運算

(4)結果規格化

2.5算數邏輯單元ALU

2.5.1多功能算數/邏輯運算單元(ALU)

 由一位全加器(FA)構成的行波進位加法器,它能夠實現加法運算和減法運算。

 可是這種加法/減法器存在兩個問題:

 一是因爲串行進位,它的運算時間很長。

 假如加法器由n位全加器構成,每一位的進位延遲時間爲20ns,那麼最壞狀況下,進位信號從最低位傳遞到最高爲而最後輸出穩定,至少須要nX20ns這在高速計算中顯然是不利的

相關文章
相關標籤/搜索