.global _start _start: li a1, 2 csrs sstatus, a1 la a1, _vec csrw stvec, a1 li a7, 1 la a1, _hello jal puts li a1, 0x20 csrs sie, a1 csrr a2, time lui a0, 0x800 add a0, a0, a2 li a7, 0 ecall 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, _hello jal puts li a7, 0 csrr a2, time lui a0, 0x800 add a0, a0, a2 ecall sret loop2: j loop2 _exception: .ascii "exception\n" .byte 0