補碼一位乘(布斯公式)

轉自:http://ep02.blog.163.com/blog/static/67655853200821842019254/算法

 

本文適用於補碼表示的定點小數定點整數乘法運算(硬件或軟件實現) spa

◆ 先考查兩個補碼乘法運算的例子
例1: 已知 X=0.1011,Y=0.0001(真值)
[X]=01011 , [Y]= 00001
[X*Y]=000001011
[X]*[Y]=000001011
這時有,[X*Y]=[X]*[Y]blog

例2: 已知 X=0.1011,Y= - 0.0001(真值)
[X]=01011 , [Y]= 11111
[X*Y]=111110101
[X]*[Y]=101010101
顯然,[X*Y]  [X]*[Y]ci

▲ 對兩個正數來講,它們補碼的乘積等於它們乘積的補碼。若乘數是負數時,這種狀況就不成立了。get

原碼乘法的主要問題是符號位不能參加運算,單獨用一個異或門產生乘積的符號位。故天然提出可否讓符號數字化後也參加乘法運算,補碼乘法就能夠實現符號位直接參加運算。qt

爲了獲得補碼一位乘法的規律,先從補碼和真值的轉換公式開始討論。(以純小數爲例)table

1.  補碼與真值的轉換公式

設 [x] = x. x1x2xn ,有:基礎

 

                      n                   
x = - x0+∑  xi2-i     
                   i=1 

 

等式左邊 x 爲真值。此公式說明真值和補碼之間的關係。擴展

2.  補碼的右移

正數右移一位,至關於乘1/2(即除2)。負數用補碼錶示時,右移一位也至關於乘1/2。所以,在補碼運算的機器中,一個數不論其正負,連同符號位向右移一位(即符號擴展),若符號位保持不變,就等於乘1/2。軟件

3.  補碼乘法規則

設被乘數 [x] = x0.x1x2xn 和乘數 [y] = y0.y1y2yn (注意:包括符號位共n+1位)均爲任意符號,則有補碼乘法算式

 

                                             n  
  [x·y]= [x]·( -y0+∑ yi2-i )
                                                    i=1 

 

爲了推出串行邏輯(遞推),實行分步算法,將上式展開加以變換:

[x·y]   = [x]·[ - y0 + y12-1 + y22-2 + … + yn2-n]

          = [x]·[ - y0 + (y1 - y12-1) + (y22-1 - y22-2) + … + (yn2-(n-1) - yn2-n)]

          = [x]·[(y1 - y0) + (y2 - y1) 2-1 + … + (yn - yn-1) 2-(n-1) + (0 - yn)2-n]

          = [x]·[...................................] (yn+1  =  0)   

 

               

寫成遞推公式以下:

         z] = 0 (賦初值0)

        z] = 2 -1z]補 +  (  yn+1 - yn ) [x]補 }       (yn+1  =  0)

; 注:2 -1表示右移,帶符號擴展。補碼的加減法在移位時不考慮進位C

                

        z] = 2 -1zi-1 ]補 +  ( yn-i+2 yn-i+1 ) [x] }             

                

        z] = 2 -1{ [ zn-1 ]補 +  ( y2 - y) [x]補 }

         zn+1 ] = [ z]補 +  (  yy) [x] = [ x·] 此最後一步不須要移位(對純小數!)

開始時,部分積爲 0,即 [z0] = 0。而後每一步都是在前次部分積的基礎上,由 ( yi+1  -  yi  ) ( i = 0,1,2,…,n) 決定對[x]的操做,再右移一位,獲得新的部分積。如此重複 n + 1步,最後一步不移位,便獲得 x·] ,這就是有名的Booth布斯算法

實現這種補碼乘法規則時,在乘數最末位後面要增長一位補充位 yn+1 。開始時,由 ynyn+1 判斷第一步該怎麼操做;而後再由 yn - 1 yn 判斷第二步該怎麼操做。由於每作一步要右移一位,故作完第一步後, yn - 1 yn 正好移到原來 ynyn+1 的位置上。依此類推,每步都要用 ynyn+ 1 位置進行判斷,咱們將這兩位稱爲判斷位

若是判斷位 ynyn+1 = 01,則 yi+1 yi  = 1,作加[x]操做;

若是判斷位 yn yn+1 = 10,則 yi+1 -yi  =  - 1,作[ - x](或者-[x])操做;

若是判斷位 yn yn+1 = 11 或 00,則 yi+1yi  = 0,z] 加0,即保持不變。

4. 補碼一位乘法運算規則

(1) 若是 yn = yn+1,部分積 z] 加0,再右移一位;

(2) 若是 yn yn+1 = 01,部分積加],再右移一位;

(3) 若是 yyn+1 = 10,部分積加[ - x](或減[x],再右移一位;

這樣重複進行 n+1 步,但最後一步不移位(對純小數)。包括一位符號位,所得乘積爲 2n+1 位,其中 2n 爲尾數位數。對於碼整數相乘,最後一步也要移位!乘積有2n+2 位,其中 2n 爲尾數位數

【例 】  x  = 0.1101, y = 0.1011,用補碼一位乘法計算 x·y = 

[解:]     求解過程以下:

 

 

 

 

部分積

 

 

乘數

說明

 

 

 

00.0000

 

0.

1

0

1

1

0

yn+1  =  0

 

+

 

11.0011

 

 

 

 

 

 

 

ynyn+1 = 10,加[-x]

 

 

 

11.0011

 

 

 

 

 

 

 

 

 

 

11.1001

 

1

0

1

0

1

1

右移一位

 

+

 

00.0000

 

 

 

 

 

 

 

ynyn+1 = 10,加0

 

 

 

11.1001

 

 

 

 

 

 

 

 

 

 

11.1100

 

1

1

0

1

0

1

右移一位

 

+

 

00.1101

 

 

 

 

 

 

 

ynyn+1 = 01,加[x]

 

 

 

00.1001

 

 

 

 

 

 

 

 

 

 

00.0100

 

1

1

1

0f

1

0

右移一位

 

+

 

11.0011

 

 

 

 

 

 

 

ynyn+1 = 01,加[-x]

 

 

 

11.0111

 

 

 

 

 

 

 

 

 

 

11.1011

 

1

1

1

1

0

1

右移一位

 

+

 

00.1101

 

 

 

 

 

 

 

ynyn+1 = 01,加[x]

 

 

 

00.1000

 

1

1

1

1

0

1

最後一步不移位

 

因此                        [x · y]  = 0.10001111

 

 

實現32位Booth乘法算法的流程圖

例:用Booth算法計算2×(-3)。

  解:[2]=0010,[-3]=1101,在乘法開始以前,R0和R1中的初始值爲0000和1101,R2中的值爲0010。

  在乘法的第一個循環中,判斷R1的最低位和輔助位爲10,因此進入步驟1c,將R0的值減去R2的值,結果1110送人R0,而後進人第二步,將R0和Rl右移一位,R0和R1的結果爲11110110,輔助位爲l。
  在第二個循環中,首先判斷Rl的最低位和輔助位爲0l,因此進入步驟1b,做加法,R0+R2=1111+0010,結果0001送入R0,這時R0R1的內容爲0001 0110,在第二步右移後變爲0000 1011,輔助位爲0。
  在第三次循環中,判斷位爲10,進入步驟lc,R0減去R2,結果1110送入R0,R1不變;步驟2移位後R0和R1的內容爲1111 01011,輔助位爲1。
  第四次循環時,因兩個判斷位爲11,因此不做加減運算,向右移位後的結果爲1111 1010,這就是運算結果(—6)。
  這個乘法的過程描述以下表所示,表中乘積一欄表示的是R0、R1的內容以及一個輔助位P,黑體字表示對兩個判斷位的判斷。

Booth補碼一位乘法計算2 ×(-3)的過程 

循環

步驟

乘積(R0,R1, P)

0

初始值

0000 1101 0

1

1c:減0010

1110 1101 0

2:右移1位

1111 0110 1

2

1b:加0010

0001 0110 1

2:右移1位

0000 1011 0

3

1c:減0010

1110 1011 0

2:右移1位

1111 0101 1

4

1a:無操做

1111 0101 1

2:右移1位

1111 10101

相關文章
相關標籤/搜索