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