#
# test.s
#
# program to demonstrate RiSC-16 core
# (uses all opcodes)
#
| addr | code | source
|
|---|
| 00 | a411 |
lw r1, r0, arg1
| 01 | ac10 |
lw r3, r0, count
| 02 | 1000 |
add r4, r0, r0
| 03 | aa12 | loop: lw r2, r4, arg2
| 04 | 7c00 |
movi r7, sub
| 05 | 3f8c
| | 06 | ff80 |
jalr r7, r7
| 07 | 2dff |
addi r3, r3, -1
| 08 | 3201 |
addi r4, r4, 1
| 09 | cc79 |
bne r3, 0, loop
| 0A | 8417 |
exit: sw r1, r0, diff
| 0B | e071 |
halt
#
# subtract function
#
| 0C | 4902 |
sub: nand r2, r2, r2
| 0D | 2901 |
addi r2, r2, 1
| 0E | 0482 |
add r1, r1, r2
| 0F | e380 |
jalr r0, r7
#
# data:
#
# count is the number of items to subtract from arg1
# (in this case, 3: arg2 and two beyond it)
# diff is where the result is placed
#
| 10 | 0003 |
count: .fill 3
| 11 | 211c |
arg1: .fill 8476
| 12 | 0002 |
arg2: .fill 2
| 13 | 0003 |
.fill 3
| 14 | 0004 |
.fill 4
| 15 | 0001 |
.fill 1
| 16 | 0159 |
.fill 345
| 17 | 0000 |
diff: .fill 0
| | | | | | | | | | | | | | | | | | | | | | | | | |