用Booth演算法計算86)的6位補碼乘法運算,要求寫出

2021-03-17 19:22:37 字數 5401 閱讀 3699

1樓:匿名使用者

[8]補=1000 [-6]補=1010所以q=1010 m=1000 [-m]補=1000, a和q-1初值0000和0

依次 a q q-1 m初值 0000 1010 0 100000右移 0000 0101 0 100010則a-m1000 0101 0 1000右移 1100 0010 1 100001a+m 0100 0010 1 1000右移 0010 0001 0 100010a-m 1010 0001 0 1000右移 1101 0000 1 1000結果為1101 0000然後除符號位取反+1為1011 0000結果正是-48

用booth演算法計算-4×3的4位補碼乘法運算,要求寫出每一步運算過程及運算結果 麻煩詳細說明每一步的操作 10

2樓:匿名使用者

【3】補=0011(作被乘數r2) 【-4】補=1100(作乘數r1)

迴圈 步驟 乘積(r0 r1 p)

0 初始化 0000 1100 0

1 無操作 0000 1100 0

右移 0000 0110 0

2 無操作 0000 0110 0

右移 0000 0011 0

3 減0011 1101 0011 1

右移 1110 1001 0

4 無操作 1110 1001 0

右移 1111 0100 1

乘積 = 1111 0100 = -12

0011=3 , 1101=-3

最後兩個位數的操作 (r1 最後數值 和 p)

00 或 11 無操作

10 加 -3

01 加 3

用booth演算法計算7x(-3)的4位補碼乘法運算,要求寫出每一步運算過程及運算結果

3樓:匿名使用者

110 : ~1101 + 1 = 0011

011 : 1101 <<3=1101000

sum= 0000_0011+1110_1000 =1110_1011= (-21)

分數相乘的booth演算法怎麼算

4樓:日語自學吧務

比較好的帶符號數乘法的方法是布斯(booth)演算法.它採用相加和相減的操作計算補碼資料的乘積.booth演算法對乘數從低位開始判斷,根據兩個資料位的情況決定進行加法、減法還是僅僅移位操作.

判斷的兩個資料位為當前位及其右邊的位(初始時需要增加一個輔助位0),移位操作是向右移動.在上例中,第一次判斷被乘數0110中的最低位0以及右邊的位(輔助位0),得00;所以只進行移位操作;第二次判斷0110中的低兩位,得10,所以作減法操作並移位,這個減法操作相當於減去2a的值;第三次判斷被乘數的中間兩位,得11,於是只作移位操作;第四次判斷0110中的最高兩位,得01,於是作加法操作和移位,這個加法相當於加上8a的值,因為a的值已經左移了三次.

一般而言,設y=y0,yly2…yn為被乘數,x為乘數,yi是a中的第i位(當前位).根據yj與yi+1的值,booth演算法表示如下表所示,其操作流程如下圖所示.在booth演算法中,操作的方式取決於表示式(yi+1-yi)的值,這個表示式的值所代表的操作為:

0 無操作

+1 加x

-1 減x

booth演算法操作表示

yi yi+1 操作 說明

0 0 無 處於0串中,不需要操作

0 1 加x 1串的結尾

1 0 減x 1串的開始

1 1 無 處於1串中,不需要操作

乘法過程中,被乘數相對於乘積的左移操作可表示為乘以2,每次迴圈中的運算可表示為對於x(yi+1-yi)2^31-i項的加法運算(i=3l,30,…,1,0).這樣,booth演算法所計算的結果 可表示為:

x×(0-y31)×2^0

+x×(y31-y30)×2^1

+x×(y30-y29)×2^2

…[1] +x×(y1-y0)×2^31

=x×(-y0×231 +y1×2^30 +y2×2^29+y31×2^0)

=x×y

例:用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

第一次迴圈

1c:減0010

1110 1101 0

2:右移1位

1111 0110 1

第二次迴圈

1b:加0010

0001 0110 1

2:右移1位

0000 1011 0

第三次迴圈

1c:減0010

1110 1011 0

2:右移1位

1111 0101 1

第四次迴圈

1a:無操作

1111 0101 1

2:右移1位

1111 1010 1

4.補碼兩位乘

補碼兩位乘運算規則是根據補碼一位乘的規則,把比較yiyi+1的狀態應執行的操作和比較yi-1yi 的狀態應執行的操作合併成一步,便可得出補碼兩位乘的運算方法.

補碼兩位乘法運算規則如下

判斷位yi-1y iyi+1

操作內容

000[zi+1]補=2-2[zi]補

001[zi+1]補=2-2

010[zi+1]補=2-2

011[zi+1]補=2-2

100[zi+1]補=2-2

101[zi+1]補=2-2

110[zi+1]補=2-2補}

111[zi+1]補=2-2[zi]補

由上表可見,操作中出現加2[x]補和加2[-x]補,故除右移兩位的操作外,還有被乘數左移一位的操作;而加2[x]補和加2[-x]補,都可能因溢位而侵佔雙符號位,故部分積和被乘數採用三位符號位.

例:[x]補=0.0101,[y]補=1.0101 求: [x? y]補.

求解過程如下表所示.其中乘數取兩位符號位即11.0101,[-x]補=1.1011取三符號位為111.1011.

部分積乘數 說 明

000.0000

+ 000.0101

1101010

判斷位為010,加[x]補

000.0101

000.0001

+ 000.0101

0111010

→2位判斷位為010,加[x]補

000.0110

000.0001

+ 111.1011

011001110

→2位判斷位為110,加[-x]補

111.1100

1001

最後一步不移位,得[x? y]補

故[x? y]補=1.11001001

可見,與補碼一位乘相比,補碼兩位乘的部分積多取一位符號位(共3位),乘數也多取一位符號位(共2位),這是由於乘數每次右移2位,且用3位判斷,故採用雙符號位更便於硬體實現.可見,當乘數數值位為偶數時,乘數取2位符號位,共需作n/2次移位,最多作n/2+1次加法,最後一步不移位;當n為奇數時,可補0變為偶數位,以簡化邏輯操作.也可對乘數取1位符號位,此時共作n/2+1次加法和n/2+1次移位(最後一步移一位).

對於整數補碼乘法,其過程與小數乘法完全相同.為了區別於小數乘法,在書寫上可將符號位和數值位中間的「.」改為「,」即可.

再補充一道例子,增加一下理解.呵呵

例1.37 設被乘數m=0111(7),乘數q=0011(3),相乘過程如下:(其中的①②……是我自己加上去的)

a q q-1

①0000 0011 0 初始值

②1001 0011 0 a=a-m

③1100 1001 1 右移(第1次迴圈)

④1110 0100 1 右移(第2次迴圈)

⑤0101 0100 1 a=a+m

⑥0010 1010 0 右移(第3次迴圈)

⑦0001 0101 0 右移(第4次迴圈)

乘法運算結束後,所得結果共8位,a暫存器中是乘積的高位部分,q暫存器中是乘積的低位部分,即乘積=0010101=(21)(十進位制)

例1.38 設被乘數m=0111(7),乘數q=1101(-3),相乘過程如下:

a q q-1

0000 1101 0 初始值

1001 1101 0 a=a-m

1100 1110 1 右移(第1次迴圈)

0011 1110 1 a=a+m

0001 1111 0 右移(第2次迴圈)

1010 1111 0 a=a-m

1101 0111 1 右移(第3次迴圈)

1110 1011 1 右移(第4次迴圈)

乘積=11101011=(-21)(十進位制)

verilog編寫改進booth演算法的16 16乘法器佔用硬

你用的什麼綜合器?fpga還是dc?綜合工具優化的當然會比你設計的要好,這是毋庸置疑的兄弟。是否冗餘你可以按照最原始的方法 移位加 設計一個乘法器,對比綜合結果。特權同學fpga設計16 16乘法器的一個問題 31 16 才是16位好麼。1 0 是2位的,你再算算吧你寫的yout r 31 15 是...

用簡便演算法計算254,用簡便演算法計算

解答覆過程如下 2 5 4 3 4 2 5 4 3 4 2 5x3 6 5 1.2 擴充套件資料 制 運用了運算bai定律與數字的基本性質,du從而使計算簡便zhi,使一個很dao複雜的式子變得很容易計算出得數。簡便計算中最常用的方法是乘法分配律。ax b c axb axc其中a,b,c是任意實數...

下列常用演算法中,適合計算最大公約數的演算法是

計算最大公約數的演算法是歐幾里得演算法。也就是我們知道的輾轉相除法。現在開始排除法看你這道題目。窮舉法,可以用,不過不是歐幾里得演算法。查詢法,和窮舉法也差不多了。排序法,歐幾里得演算法只要比個大小,大除以小,所以也算不上排序。因此答案應該是迭代法。雖然和程式語言中的迭代不完全一樣,不過這種反覆計算...