0 # Here is a sample program. 1 main: # function main 2 and $1 $0 $0; # clear r1 0000 3010 3 llo $2 54; # r2 = 00110110 = 0x36 0002 8236 4 addi $1 $0 -1; # set r1 = 0xFFFF 0004 401F 5 xor $3 $2 $1; # set r3 = 0xFFC9 0006 2231 6 and $3 $2 $1; # r3 = 036 0008 3231 7 lhi $5 512; # r5 = 0x0002 000A 8502 8 addi $4 $3 4; # r4 = 0x003A 000C 4344 9 lhi $6 counter; # get upper address of counter 000E 8600 10 llo $7 counter; # lower portion in LSB 0010 8734 11 rotr $6 $6 8; # move it to MSB 0012 5668 12 or $7 $7 $6; # build full adress 0014 1776 13 ld $8 0($7); # load the initial value into r8 0016 7780 14 st $8 2($7); # store it into temp 0018 6782 15 lhi $14 decr; # get upper address of counter 001A 8E00 16 llo $15 decr; 001C 8F2E 17 rotr $14 $14 8; # move it to MSB 001E 5EE8 18 or $14 $14 $15; 0020 1EEF 19 loop: bz $8 done; 0022 B805 20 or $2 $8 $8; # move to arg register 0024 1828 21 jr $15 0($14); # call decr 0026 CEF0 22 or $8 $1 $0; # move from result reg 0028 1180 23 jmp loop; 002A F011 24 done: 25 jmp done; # stuck here 002C F016 26 27 decr: addi $1 $2 -1; 002E 421F 28 jr $0 2($15); # return 0030 CF02 29 foo: jmp foo; 0032 F019 30 counter:.data 2; 0034 0002 31 temp: .data 0; 0036 0000