.global _start _start: li a1, 2 csrs sstatus, a1 la a1, _vec csrw stvec, a1 li a7, 1 la a1, _hello jal puts csrr a2, stvec jal putl halt: j halt putl: andi a0, a2, 0xf addi a0, a0, 0x30 slti a1, a0, 0x3A bne a1, zero, _next addi a0, a0, 7 _next: ecall srli a2, a2, 4 beq a2, zero, exit2 j putl exit2: li a0, 0xa ecall ret puts: lb a0, (a1) beq a0, zero, exit ecall addi a1, a1, 1 j puts exit: ret _hello: .ascii "Hello, world!\n" .byte 0 .align 8 _vec: li a7, 1 la a1, _exception jal puts csrr a2, scause call putl loop2: j loop2 _exception: .ascii "exception\n" .byte 0