資源描述:
《booth算法(補(bǔ)碼乘法).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、今天看到一種實(shí)現(xiàn)乘法的新算法——BOOTH算法,現(xiàn)在剛剛摸索到算法的本質(zhì),知道為什么這樣做就可以實(shí)現(xiàn)乘法功能。廢話少說(shuō),具體介紹如下:??????布斯(Booth)算法是比較好的帶符號(hào)數(shù)乘法的方法。它采用相加和相減的操作計(jì)算補(bǔ)碼數(shù)據(jù)的乘積。Booth算法對(duì)乘數(shù)從低位開始判斷,根據(jù)兩個(gè)數(shù)據(jù)位的情況決定進(jìn)行加法、減法還是僅僅移位操作。判斷的兩個(gè)數(shù)據(jù)位為當(dāng)前位及其右邊的位(初始時(shí)需要增加一個(gè)輔助位0),移位操作是向右移動(dòng)。???乘法過(guò)程中,被乘數(shù)相對(duì)于乘積的左移操作可表示為乘以2,設(shè)y=y0,yly2…yn為被乘數(shù),x為乘數(shù),每次循環(huán)中的運(yùn)算可表示為對(duì)于x(yi+1-
2、yi)2^(n-i)項(xiàng)的加法運(yùn)算(i=n,n-1,…,1,0)。這樣,Booth算法所計(jì)算的結(jié)果?可表示為:(被乘數(shù)是兩數(shù)相乘的后者,如A×B中的被乘數(shù)是A,但是這里貌似與這個(gè)沒(méi)有關(guān)系) x×(0-yn)×2^0 +x×(yn-yn-1)×2^1 … +x×(y1-y0)×2^n =x×(-y0×2^n+y1×2^(n-1)+y2×2^(n-2)+……+yn×2^0) =x×y(這里切記一點(diǎn)y0是符號(hào)位)Booth算法表示如下表所示。在Booth算法中,操作的方式取決于表達(dá)式(yi+1-yi)的值,這個(gè)表達(dá)式的值所代表的操作為: 0??無(wú)操作 +
3、1??加x -1???減x Booth算法操作表示 yiyi+1???操作?????說(shuō)明 0??0???????無(wú)???????處于0串中,不需要操作 0??1???????加x?????1串的結(jié)尾? 1??0???????減x?????1串的開始? 1??1??????無(wú)???????處于1串中,不需要操作例:用Booth算法計(jì)算2×(-3)?! 〗猓篬2]補(bǔ)=0010,[-3]補(bǔ)=1101,在乘法開始之前,R0和R1中的初始值為0000和1101,R2中的值為0010?! ≡诔朔ǖ牡谝粋€(gè)循環(huán)中,判斷R1的最低位和輔助位為10,所以進(jìn)入步驟1c,
4、將R0的值減去R2的值,結(jié)果1110送人R0,然后進(jìn)入第二步,將R0和Rl右移一位,R0和R1的結(jié)果為1111、0110,輔助位為l?! ≡诘诙€(gè)循環(huán)中,首先判斷Rl的最低位和輔助位為0l,所以進(jìn)入步驟1b,作加法,R0+R2=1111+0010,結(jié)果0001送入R0,這時(shí)R0R1的內(nèi)容為00010110,在第二步右移后變?yōu)?0001011,輔助位為0?! ≡诘谌窝h(huán)中,判斷位為10,進(jìn)入步驟lc,R0減去R2,結(jié)果1110送入R0,R1不變;步驟2移位后R0和R1的內(nèi)容為11110101,輔助位為1。 第四次循環(huán)時(shí),因兩個(gè)判斷位為11,所以不作加減運(yùn)算,向
5、右移位后的結(jié)果為11111010,這就是運(yùn)算結(jié)果(—6)。(結(jié)果result={R0,R1})在每次移位都是{R0,R1}同時(shí)移位。用Booth補(bǔ)碼一位乘法計(jì)算2×(-3)的過(guò)程 循環(huán) 步驟 乘積?(R0,?R1,?P) 初始值 000011010 第一次循環(huán) 1c:減0010 111011010 2:右移1位 111101101 第二次循環(huán) 1b:加0010 000101101 2:右移1位 000010110 第三次循環(huán) 1c:減0010 111010110 2:右移1位 111101011 第四次循環(huán) 1a:無(wú)操
6、作 111101011 2:右移1位 111110101