expression
data in register and memory
array of integer
branch and loop
function call
stack
Use the package s21-3.zip for assembler (as21) and simulator (sim21)
a = b + c
a -- r1, b -- r2, c -- r3
.code 0
mov r2 #20
mov r3 #30
add r1 r2 r3
trap r1 #1 ; print
trap r0 #0 ; stop
.end
a = b + c
a @100, b @101, c @102
use r1, r2, r3
.code 0
ld r2 101
ld r3 102
add r1 r2 r3
st r1 100
trap r0 #0
.data 100
0 22 33 ;
set memory at 100...102
.end
a[0] ... a[5] starts @100
add a[0]..a[2]
use base -- r3, temp -- r4, sum -- r1
.code 0
mov r1 #0
mov r2 #0
mov r3 #100
ld r4 @0 r3
add r1 r1 r4 ; sum += a[0]
ld r4 @1 r3
add r1 r1 r4 ; sum += a[1]
ld r4 @2 r3
add r1 r1 r4 ; sum += a[2]
trap r1 #1 ; print sum
trap r0 #0
.data 100
11 22 33 0 0 0
.end
i = 0
while( i < 3 )
print(i)
i += 1
use i -- r1, temp -- r2
.code 0
mov r1 #0
:while
lt r2 r1 #3 ; boolean result in r2
jf r2 exit
trap r2 #1
add r1 r1 #1
jmp while
:exit
trap r0 #0
.end
if a == 1 then c = 2 else c = 3
use a -- r1, c -- r2, temp -- r3
.code 0
mov r1 #1
eq r3 r1 #1
jf r3 else
mov r2 #2
jmp exit
:else
mov r2 #3
:exit
trap r2 #1 ; print c
.end
... to be continued
last update 1 Feb 2021