# Here is a sample program. main: # function main and $1 $0 $0; # clear r1 llo $2 54; # r2 = 00110110 = 0x36 addi $1 $0 -1; # set r1 = 0xFFFF xor $3 $2 $1; # set r3 = 0xFFC9 and $3 $2 $1; # r3 = 036 lhi $5 512; # r5 = 0x0002 addi $4 $3 4; # r4 = 0x003A lhi $6 counter; # get upper address of counter llo $7 counter; # lower portion in LSB rotr $6 $6 8; # move it to MSB or $7 $7 $6; # build full adress ld $8 0($7); # load the initial value into r8 st $8 2($7); # store it into temp lhi $14 decr; # get upper address of counter llo $15 decr; rotr $14 $14 8; # move it to MSB or $14 $14 $15; loop: bz $8 done; or $2 $8 $8; # move to arg register jr $15 0($14); # call decr or $8 $1 $0; # move from result reg jmp loop; done: jmp done; # stuck here decr: addi $1 $2 -1; jr $0 2($15); # return foo: jmp foo; counter:.data 2; temp: .data 0;