Quick introduction to assembly language

We use S2 version 1 processor (simulator).

local variable

main()
  b = 1
  c = 2
  a = b + c

assembly

mov r1 #1
mov r2 #2
add r4 r1 r2

global variable

A, B, C

main()
  B = 11
  C = 22
  A = B + C


assembly

.symbol
 A 1100
 B 1101
 C 1102

mov r1 #11
st r1 B
mov r1 #22
st r1 C
ld r1 B
ld r3 C
add r2 r1 r3
st r2 A

control flow

main()
  b = 1
  if ( b == 2 )
     a = 3
  else
     a = 4


assembly

mov r1 #1
eq r3 r1 #2
jf r3 L102
mov r2 #3
jmp L103
:L102
mov r2 #4
:L103

loop

main()
  a = 3
  b = 0
  while (a > 0)
    b = b + 1
    a = a - 1


assembly

mov r1 #3
mov r2 #0
jmp L102
:L103
add r2 r2 #1
add r1 r1 #-1
:L102
gt r3 r1 #0
jt r3 L103


function call

myadd(x)
  return x + 1

main()
  a = 1
  b = myadd(a)


assembly

:myadd
st r1 @1 fp
st r2 @2 fp
add fp fp #3
st rads @0 fp

pop sp r1
add r2 r1 #1

mov retval r2
jmp L101
:L101
ld rads @0 fp
sub fp fp #3
ld r2 @2 fp
ld r1 @1 fp
ret rads


:main
st r1 @1 fp
st r2 @2 fp
add fp fp #3
st rads @0 fp

mov r1 #1
push sp r1
jal rads myadd
mov r2 r28

ld rads @0 fp
sub fp fp #3
ld r2 @2 fp
ld r1 @1 fp
ret rads

data structure

ax[10]

main()
  ax[0] = 1
  ax[1] = 2
  b = ax[1]

 
assembly

r3 is index

mov r2 #1
mov r3 #0
st r2 @ax r3
mov r2 #2
mov r3 #1
st r2 @ax r3
mov r3 #1
ld r2 @ax r3
mov r1 r2


S2 instruction set

RZ compiler version 3.6       the package rz36-3.zip

How to use tools

rz36  is a compiler.    It outputs assembly language to standard out. 
as21 is the assmbler for S2.  It outputs two files:  listing file and object file
sim21 is the S2.1 simulator.  It takes the object file and run it. 
simple command in sim21:  t - single step, r - view registers, g - go, q - exit, h - help

Sample session

C:\rz36-3\test>rz36 ex6.txt > ex6-s.txt
C:\rz36-3\test>as21 ex6-s.txt
C:\rz36-3\test>sim21 ex6-s.obj

load program, last address 200
>t
PC   0 mov r30 #3500     r0:0 r1:0 r2:0 r3:0 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:0 r28:0 r29:0 r30:3500 r31:0
...

>t
PC   9 mov r2 #1         r0:0 r1:0 r2:1 r3:0 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  10 mov r3 #0         r0:0 r1:0 r2:1 r3:0 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  11 st r2 @1100 r3    r0:0 r1:0 r2:1 r3:0 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  12 mov r2 #2         r0:0 r1:0 r2:2 r3:0 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  13 mov r3 #1         r0:0 r1:0 r2:2 r3:1 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  14 st r2 @1100 r3    r0:0 r1:0 r2:2 r3:1 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  15 mov r3 #1         r0:0 r1:0 r2:2 r3:1 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  16 ld r2 @1100 r3    r0:0 r1:0 r2:2 r3:1 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
>t
PC  17 mov r1 r2         r0:0 r1:2 r2:2 r3:1 r4:0 r5:0 r6:0 r7:0 r8:0 r9:0
                         r27:3 r28:0 r29:3000 r30:3504 r31:0
...
>q
stop, clock 18, execute 18 instructions

C:\rz36-3\test>

Happy coding

last update 20 Aug 2019