用于乘以2个正数的展位乘法算法?

sap*_*Pro 8 hardware algorithm computer-science multiplication

展位的乘法算法只为2个乘以负数(-3 * -4)或一正一负号(-3 * 4)?每当我使用booth算法乘以2个正数时,我得到一个错误的结果.

例如:5*4

A = 101 000 0 // binary of 5 is 101

S = 011 000 0 // 2's complement of 5 is 011

P = 000 100 0 // binary of 4 is 100

x = 3 number of bits in m

y = 3 number of bits in r

m = 5

-m = m的2的补码

r = 4

  1. 在P右移1位0 000 100之后

  2. 在P右移1位0 000 010之后

  3. P + S = 011 001 0

    右移后1位0 011 001

  4. 丢弃LSB 001100

    但那就是12的二进制.应该是20(010100)

@ ruakh回答后更新

5*4 = 20

m = 0101 is 5

r = 0100 is 4

A = 0101 0000 0

S = 1010 0000 0

P = 0000 0100 0

  1. 将P右移1位:0 0000 0100

  2. 将P右移1位:0 0000 0010

  3. P + S = 10100010右移1位:1101 0001

  4. P + A = 1 0010 0001 here 1 is the carry generated 右移1位:110010000

离开LSB:11001000(不等于20)

rua*_*akh 5

你没有为你的标志处理提供足够的空间.5不是101,但是0101:它必须以a开头0,因为从开始的值1是否定的.101实际上是-3:它是2的补码011,即3,同样,4不是100,但是0100; 100是-4.所以,当你乘101100,你实际上乘以-3由-4; 这就是为什么你得到12.