以下講解內容出自《計算機組成原理(第三版)》(清華大學出版社)
大二學生乙隻,我的計組老師比較划水,不講公式推導,所以最近自己研究了下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則是表示當前乘法部分積移動的位數。
下圖是部分積拆解結果和運算過程的對應關係分析
booth演算法計算補碼乘法
一般而言,設y y0,yly2 yn為被乘數,x為乘數,yi是a中的第i位 當前位 根據yj與yi 1的值,booth演算法表示如下表所示,其操作流程如下圖所示。在booth演算法中,操作的方式取決於表示式 yi 1 yi 的值,這個表示式的值所代表的操作為 0 無操作 1 加x 1 減x boot...
原碼一位乘法和補碼一位乘法
原碼乘法遵循的規則如下 比如 a 0.1101,b 0.1011,求a b的積?詳細計算過程如下圖 符號位與符號進行計算.a的符號位為 1,b的符號位為 1.兩個符號進行異或運算最後的符號仍然是 1.數值位乘以數值位.a 0.1101,b 0.1011.我們採用雙符號位來進行計算.a 00.1101...
補碼一位乘法運算 個人總結方法
個人總結觀點,如有問題歡迎指出,作為小白,會在批評中努力成長!1.運算法則 首先,根據題中所給的x,y的值依據補碼的相關定義,寫出x,y的補碼,同時寫出被乘數 例 x 的補碼 要帶上符號位哦 然後書寫部分積 部分積的初始值為00.0000 乘數 y的小數點後的值 補碼一位乘法計算的關鍵主要在於位置的...