Numbers Booths
  Multiplication.        
    Wikipedia topic "binary multiplier"  

     23 * 14  =  00010111 * 00001110

  By loop 

    Add 23 to a sum 14 times.
      Very inefficient. 

    Looping add requires 14 adds and 14 loop tests


  Various types of Binary multiplication.

  Shift and add - basic technique learned in school applied to binary.

    While any of the bits of 2nd number(multiplier) not zero.
      If the least significant bit of 2nd number is 1, 
        Add 1st number(multiplicand) to sum.   
      EndIf 

      Shift 1st number left (*2)
      Shift 2nd number right (/2)
        ( logical shifts shift least/most significant bit 
           and pad most/least significant bit with zero )

    EndWhile

    23 * 14  =  00010111 * 00001110

Multiplicand     Multiplier   Masked         Sum
                 LSB (mask)    value

        10111  *  0                0           0
       101110  *  1           101110      101110
      1011100  *  1          1011100    10001010
     10111000  *  1         10111000   101000010
    --------------------------------------------- 
       Most CPUs would stop here.
    101110000  *  0                0   101000010 
   1011100000  *  0                0   101000010
  10111000000  *  0                0   101000010
 101110000000  *  0                0   101000010
1 0100 0010 2^8 + 2^6 + 2^1 256 + 64 + 2 = 312 With right design (shifting of both numbers occur at same time). Accumulate and shift requires 7 shifts and 8 adds. If multiplier tested for zero, shift and add stopped after 4th shift. However, requires an additional test after each shift. So, maybe 25% improvement. On 8088 CPU: mul command takes 20-40 cycles to complete for 16 bit numbers. Design modifications to improve performance. Requires additional registers and computational circuits. Load multiplicand into multiple shifted registers. All shifts done in one cycle. Each of multiplier's bits applied as mask to a different multiplicand register. Perform adds in parallel pairs. The 8 values can be done in three adds. 2^3 = 8 Multiplier masked 1st 2nd 3rd LSB value add add add Multiplicand 10111 * 0 0 101110 * 1 101110 101110 1011100 * 1 1011100 10111000 * 1 10111000 100010100 101000010 101110000 * 0 0 1011100000 * 0 0 0 10111000000 * 0 0 101110000000 * 0 0 0 0 101000010 322 Requires 1 cycle to load and shift and 3 adds. Mask can be performed by an AND gate as part of add. More registers but fewer clock cycles. The multiplicand registers have to be larger than initial value with the largest 2x the size of the integer. Or alligned in a staggered manor. Wallace tree - variation of this technique. Signed values There are a number of ways to handle signed multiplication. Some techniques work correctly with signed values. If not convert negatives values to unsigned, perform multiplication, and reapply sign using the same rules as human. + * + = + + * - or - * + = - - * - = +