File: multiply.reg

package info (click to toggle)
ruby-tins 1.32.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,248 kB
  • sloc: ruby: 6,659; makefile: 3
file content (42 lines) | stat: -rw-r--r-- 958 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# vim: set filetype=ruby:

# Multiplication: C = A * B, A >= 0 and B >= 0
register.A = 3
register.B = 7

# Save A in T
label(SaveA)  { decrement A, MoveS1, IncT }
label(IncT) { increment T, IncS1 }
label(IncS1) { increment S, SaveA }

label(MoveS1) { decrement S, SaveB, IncA1 }
label(IncA1) { increment A, MoveS1 }

# Save B in U
label(SaveB)  { decrement B, MoveS2, IncU }
label(IncU) { increment U, IncS2 }
label(IncS2) { increment S, SaveB }

label(MoveS2) { decrement S, Mul, IncB1 }
label(IncB1) { increment B, MoveS2 }

# Multiply A * B
label(Mul) { decrement A, MoveT, DecB }

# Add B to C
label(DecB) { decrement B, MoveU, IncC }
label(IncC) { increment C, DecB }

# Move U back to B
label(MoveU) { decrement U, SaveB, IncB2 }
label(IncB2) { increment B, MoveU }

# Move T back to A
label(MoveT) { decrement T, ClearU, IncA2 }
label(IncA2) { increment A, MoveT }

# Clear U
label(ClearU) { decrement U, Stop, ClearU }

# Stop
label(Stop)   { halt }