lis $1
; Modify the line below to change the starting address passed to your loader
.word 0x2410

; Save $31 because we're calling procedures
lis $4
.word 4
sw $31, -4($30)
sub $30, $30, $4

; Call the loader
lis $5
.word loader
jalr $5

; Print out the loaded code
lis $5
.word printHex
lis $11
.word 1
add $10, $1, $0
LAPloop: beq $3, $0, LAPend
lw $1, 0($10)
jalr $5
add $10, $10, $4
sub $3, $3, $11
beq $0, $0, LAPloop

; Restore $31 and return
LAPend:
add $30, $30, $4
lw $31, -4($30)
jr $31

printHex:
sw $1,  -4($30)
sw $2,  -8($30)
sw $3, -12($30)
sw $4, -16($30)
sw $5, -20($30)
sw $6, -24($30)
sw $7, -28($30)
sw $8, -32($30)
lis $8
.word 32
sub $30, $30, $8
lis $2
.word 0x10000000
lis $3
.word 0x10
lis $4
.word 0x30
lis $6
.word 10
lis $7
.word 0x27
lis $8
.word 0xffff000c
PHloop:
divu $1, $2
mflo $1
slt $5, $1, $6
bne $5, $0, PHskip
        add $1, $1, $7
PHskip: add $1, $1, $4
sw $1, 0($8)
mfhi $1
divu $2, $3
mflo $2
bne $2, $0, PHloop
sw $6, 0($8)
lis $8
.word 32
add $30, $30, $8
lw $1,  -4($30)
lw $2,  -8($30)
lw $3, -12($30)
lw $4, -16($30)
lw $5, -20($30)
lw $6, -24($30)
lw $7, -28($30)
lw $8, -32($30)
jr $31
