當前位置:歷史故事大全網 - 歷史天氣 - booth算法的证明

booth算法的证明

比较好的带符号数乘法的方法是布斯(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 无 A0 串中,不需要操作

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

…< /p>

[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,作加法,RR2=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)

初始值

0000 1101 0

第一次循环

1c:减0010

< p>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

第四次循环< /p>

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{[zi]补+[x]补}

010

[zi+1]补=2-2{ [zi]补+[x]补}

011

[zi+1]补=2-2{[zi]补+2[x]补}

100

[zi+1]补=2-2{[zi]补+2[-x]补}

101

[zi+1]补=2-2{[zi]补+[-x]补}

110

[zi+1]补=2-2{[zi ]补+-x}补}

111

[zi+1]补=2-2[zi]补

由上表可见,操作 中出现加2[x]补和加2[-x]补,故除右移这俩的操作外,还有被乘数左移一位的操作;而加2[x]补和加2[ -x]补,都可能因溢出而侵占双符号位,故部分积和被乘数采用三位符号位。

例:[x]补=0.0101,[y]补=1.0101 求:[x?6?1 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

< p>+ 111.1011

01

1001110

→2位

判断位为110,加[-x]补

111.1100

1001

最后一步不移位,得[x?6?1 y]补

故[x?6? 1 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

①00000011 0初始值

②1001 00110 A=A-M

③1100100110右移(第 1 次循环)

④111001001??右移(第 2次循环)

⑤01010100<1A=A+M< /p>

⑥001010100车右移(第3次循环)

⑦000101010车右移(第4次循环)

乘法轰炸结束后,所得成果* **8位,A寄存器中是乘积的高位部分,Q寄存器中是乘积的低位部分,即乘积=0010101=(21)(十文艺复兴)

例1.38?假设被乘数M =0111(7),乘数Q=1101(-3),相乘过程如下:

A qqq-1

00001101H初始值

< p>10011101.0A=A-M

110011101图右移(第1次循环)

0011治1110<A=A+M

0001十1111 0 右移(第2次循环)

1010 1111 0 A=A-M

1101 0111 1 右移(第3次循环)

1110 1011 1 右移(第4次循环)

乘积=11101011=(-21)(十轮循环)

  • 上一篇:uv打印机加等离子处理
  • 下一篇:中国十大首富有哪些人?
  • copyright 2024歷史故事大全網