        .data
code:   .byte   0x61 0x73 0x1E 0x49 0x43 0x27 0x1A 0x6C 0x61 0x78 0x1E 0x71 0x6B 0x1B 0x32 0x19 0x27 0x48 0x72 0x24 0x6F 0x1B 0x5B 0x65 0x77 0x60 0x77 0x70 0x1C 0x6E 0x6F 0x67 0x6E 0x78 0x1E 0x66 0x6A 0x1B 0x4A 0x61 0x69 0x6B 0x5F 0x61 0x61 0x67 0x6A 0x61 0x69 0x60 0x2A 0x1D 0x5E 0x70 0x6E 0x19 0x77 0x67 0x5F 0x71 0x1C 0x5C 0x5C 0x68 0x75 0x73 0x1E 0x74 0x64 0x60 0x68 0x19 0x69 0x73 0x1E 0x6F 0x5D 0x64 0x68 0x6C 0x3F 0x26
code_len = 82

        .text
main:
        lea     s0, 0(code)         ; s0 := &code
        andi    s1, s1, 0           ; s1 = i := 0
        li      s2, code_len        ; s2 := code_len
label1:
        jge     s1, s2, label2      ; if i >= 12, we're finished

        add     t0, s0, s1          ; t0 := &code[i]
        lbu     t1, 0(t0)           ; t1 := *t0 = code[i]
        andi    t2, s1, 7           ; t2 := i % 8
        add     t1, t1, t2          ; t1 := t1 + t2 = code[i] + (i % 8)
        putc    t1                  ; print t1

        addi    s1, s1, 1           ; i := i + 1
        jmp     label1
label2:
        li      t1, 10              ; load \n
        putc    t1
        halt
