31 lines
1.2 KiB
Plaintext
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]
|