program Fast Multiply // Input: integers a and b stored in mem[0A], mem[0B] // Output: integer c = a * b stored in mem[0C] // Remarks: Binary Multiplication // ----------------------------------------------------------------------------- 0A: 0003 (0000 0000 0000 0011, 3) input a 0B: 0009 (0000 0000 0000 1001, 9) input b 0C: 0000 (0000 0000 0000 0000, 0) output c 0D: 0000 (0000 0000 0000 0000, 0) constant 0 0E: 0001 (0000 0000 0000 0000, 1) constant 1 0F: 0010 (0000 0000 0001 0000, 16) constant 16 10: 8A0A R[A] <- mem[0A] 11: 8B0B R[B] <- mem[0B] 12: 8C0D R[C] <- mem[0D] result 13: 810E R[1] <- mem[0E] always 1 14: 820F R[2] <- mem[0F] i = 16 do { 15: 2221 R[2] <- R[2] - R[1] i-- 16: 53A2 R[3] <- R[A] << R[2] a << i 17: 64B2 R[4] <- R[B] >> R[2] b >> i 18: 3441 R[4] <- R[4] & R[1] bi = ith bit of b 19: C41B if (R[4] == 0) goto 1B if bi is 1 1A: 1CC3 R[C] <- R[C] + R[3] add a << i to sum 1B: D215 if (R[2] > 0) goto 15 } 1C: 9C0C mem[0C] <- R[C]