Assembly programming in S2

topics

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) 

data in register

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

data in memory

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

array of integer

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

branch and loop


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..then..else

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