Booth算法: 補碼一位乘法公式推導與解析


以下講解內容出自《計算機組成原理(第三版)》(清華大學出版社)

大二學生一只,我的計組老師比較划水,不講公式推導,所以最近自己研究了下Booth算法的公式推導,希望能讓同樣在研究Booth算法的小伙伴少花點時間。
 

 

 



下面將對上圖公式方框中部分進行講解。
 
首先要擺明一個公式。

**公式X**: - [B]補 = [-B]補 ; [B]補 = - [-B]補
 
意思是 一個數A的補碼,等於該補碼的機器負數 (機器負數的定義可以見書P85 簡單理解一個數Y的機器負數 = [-Y]補)
前加負號的數

比如:
 01100 (12) - [00101(5)]補 = 01100(12) + 10101(-5的補碼) = (01100 + 11011)(補碼) = 00111 (7的原碼和補碼)
 
解釋1框框:
因為乘數為小數,0.ABCD = A*(2^(-1)) +  B*(2^(-2)) + C*(2^(-3)) + D*(2^(-4))。就和1111 = 1 + 2 + 4 + 8 一個道理。
 
解釋2框框內容:
根據公式X, 第二行的 + [-X] 補 * Ys = - [X]補 * Ys
由此得第三行的 -Ys * [X]補
 
解釋3框框中的圖:
這個框中的意思是一個二進制小數,向左移動一位(乘2),再減去原來的自己,還是等於自己。利用了二進制 高一位 是 低一位兩倍的關系。
看上圖中,Y1本來是表示Y1*(2^(-1))次方的大小的 ,但是在3框框中卻變成了 1 * Y1(左移了一位), 其他位以此類推。並且減去了表示原來的自己的 Y1*(2^(-1)),結果還是 Y1*(2^(-1)),所以等於原來的自己,其他位以此類推。
 
下圖的Zn是部分積,並且把部分積從原式中拆解出來后,可以根據這些拆解式分析出Booth算法一位乘法補碼運算時的過程
 
 

 

 


藍色框框里的 Y(n+1) - Yn 就是乘數的末兩位了(被乘數移位之后),當 Y(n+1) - Yn  = - 1 的時候,
(Y(n+1) - Yn)* [X]補 * 2^(-n) =  (-1) * [X]補 * 2^(-n) = + [-X]補碼 * 2^(-n) , X是被乘數,這也可以解釋為什么Booth里末兩位為10時,要加[-X]補 (因為 Y(n+1) = 0, Yn = 1)。 為什么 Y(n+1) - Yn  = 1 (末兩位01)的時候 要加[X]補。而Y(n+1) - Yn  = 0 (末兩位為11 或者 00)的時候什么都不做(1 - 1 = 0, 0 - 0 = 0)。而 2^(-n) 中的n則是當前部分積相對原來開始時右移的位數,所以(Y(n+1) - Yn)* [X]補 * 2^(-n) 解釋起來就是 (Y(n+1) - Yn) 根據乘數末兩位來確定 -1,0 , 1。也就是加還是減或者什么都不做。[X]補是原來被乘數的補碼,因為乘數Y是1和0組成的,所以整個乘法X*Y的過程就是在決定要不要加X,或者不加的過程,當然補碼運算比較特殊,還有減去操作。而2^(-n)的n則是表示當前乘法部分積移動的位數。
 
下圖是部分積拆解結果和運算過程的對應關系分析
 

 

 

 
 
 
 
 
 
 
 
 


免責聲明!

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



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