[計算機組成原理] Booth算法 —— 補碼一位乘法

x * y = zspa

運算規則:io

1.和原碼一位乘法不一樣,補碼一位乘法的符號位參加運算的,且運算結果和全部參加運算的數都是補碼形式。移動

2.乘數 x 取雙符號位參與運算,部分積的初始值爲0;co

   乘數 y 取單符號位參與運算。

3.乘數 y 首先在末尾添加一個輔助位 0 ,每次討論都是取 y 的最後兩位但每次移動僅移動一位

4.判斷 y 的最後兩位是規則以下:

  •    00 或者 11 時,直接右移一位;
  •    01 時,先加 x 的補,而後右移一位;
  •    10 時,先加 -x 的補,而後右移一位。

5.有個特例,最後一步不用右移了。

舉個栗子:

設 x = -0.1101 , y = 0.1011 

則 [x]補 = 11.0011 ,[-x]補 = 00.1101

一開始 部分積初始值:00.0000

先給y補一個輔助位0,獲得 y = 0.10110

首先,從y的最後兩位開始看,0.10110 ,爲 10 ,對應規則 「先加[-x]補,再右移一位」 :

           部分積  00.0000 + 00.1101 = 00.1101 ,右移一位獲得 00.01101 

接着,y 右移一位再看,0.10110,爲 11 ,對應規則「直接右移一位」:

           部分積  00.001101 

而後,y再右移一位再看,0.10110 ,爲 01 ,對應規則「先加[x]補,再右移一位」

          00.001101          部分積

       + 11.0011              [x]補

       -------------------- 

       = 11.011001          部分積

           部分積 00.001101 + 11.0011 = 11.011001 ,右移一位獲得 11.1011001 (注意這裏符號位移動後,仍然保持爲 11

接着,y再右移一位再看,0.10110 ,爲 10 ,對應規則「先加[-x]補,再右移一位」

           部分積 11.1011001 + 00.1101 = 00.1000001 ,右移一位獲得 00.01000001 

最後,y再右移一位再看,0.10110 ,爲 01 ,對應規則「先加[x]補,再右移一位」

           部分積 00.01000001 + 11.0011 = 11.01110001 ,但這已是最後一步,不用再右移了

                      因此最後結果是  1.01110001   (注意:這是x*y的補碼

相關文章
相關標籤/搜索