We design an algorithm for solving the given problem using high-level pseudocode containing constructs similar to a high-level language like python or java. For example,
input a
input b
if a < b then
output a
else
output b
We then translate the pseudocode into SLIM assembly language.
read 0
read 1
li 3 7
slt 2 0 1
jeqz 2 3
write 0
halt
write 1
halt
Expressions and assignment statements are implemented using SLIM’s arithmetic, comparison, and data movement commands. The tricky part is in dividing the high-level expressions into a much larger number of SLIM instructions. E.g., a python statement
a = b*b + c*c
becomes
mul b2 b b
mul c2 c c
add a b2 c2
in SLIM assembly instructions, where b
, b2
, c
, c2
, and a
are register numbers with register b
containing the variable b
and register c
containing the variable c
.
A python if
statement like
if a < b:
<st1>
<st2>
<st3>
gets translated into
li after afterL
slt testResult a b
jeqz testResult after
<st1>
<st2>
afterL:
<st3>
A python if..else
statement like
if a < b:
<st1>
<st2>
else:
<st3>
<st4>
<st5>
gets translated into
li else elseL
li after afterL
slt testResult a b
jeqz testResult else
<st1>
<st2>
j after
elseL:
<st3>
<st4>
afterL:
<st5>
A python while
statement like
while a < b:
<st1>
<st2>
<st3>
gets translated into
li loop loopL
li end endL
loopL:
slt testResult a b
jeqz testResult end
<st1>
<st2>
j loop
endL:
<st3>
A python for
statement like
for x in range(a, b):
<st1>
<st2>
gets translated into the while statement
x = a
while x < b:
<st1>
<st2>
x += 1
and then we can translate the while
statement like in the previous slide.