Files
wscience/resources/TOY/multiply-fast.toy

31 lines
1.2 KiB
Plaintext

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]