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

以下需講解內容出自《計算機組成原理(第三版)》(清華大學出版社)
我是一個大二學生,我的計組老師比較划水,不講公式推導,所以最近自己研究了下Booth算法的公式推導,希望能讓同樣在研究Booth算法的小夥伴少花點時間。

公式
下面將對上圖公式方框中部分進行講解。

首先要擺明一個公式。
公式X: - [B]補 = [-B]補 ; [B]補 = - [-B]補
意思是 一個數A的補碼,等於該補碼的機器負數前加了符號的數(即使該數A前面加上負號後的補數)。
比如:
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)),所以等於原來的自己,其他位以此類推。

在這裏插入圖片描述
藍色框框裏的 Y(n+1) - Yn 就是乘數的末兩位了(被乘數移位之後),當 Y(n+1) - Yn = - 1 的時候,式子 + (-1) * [X]補 * 2^(-n) = + [-X]補碼 * 2^(n) ,這也可以解釋爲什麼Booth裏末兩位爲10時,要加[-X]補。 爲什麼 Y(n+1) - Yn = 1 (末兩位01)的時候 要加[X]補。而Y(n+1) - Yn = 0 (末兩位爲11 或者 00)的時候什麼都不做。而乘 2^(-n) 則是當前部分積相對原來右移的位數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章