diff options
Diffstat (limited to 'tools/builtin.s')
| -rw-r--r-- | tools/builtin.s | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/tools/builtin.s b/tools/builtin.s index 17e262d..7b14d95 100644 --- a/tools/builtin.s +++ b/tools/builtin.s @@ -6,29 +6,41 @@ .text printi: - addi sp, sp, -4 + addi sp, sp, -16 sw s0, 0(sp) sw ra, 4(sp) - addi s0, sp, 4 - - addi t0, a0, 0 - addi a0, a0, '0' - sw a0, 0(s0) - addi a0, x0, 1 - addi a1, s0, 0 - addi a2, x0, 1 - addi a7, x0, 64 - ecall + addi s0, sp, 16 + + addi t1, zero, '\n' + sb t1, -1(s0) + + # t0 - Whole number. + # t1 - Constant 10. + # a1 - Local buffer. + # t2 - Current character. + lw t0, 0(s0) + addi t1, zero, 10 + addi a1, s0, -2 + +.digit10: + rem t2, t0, t1 + addi t2, t2, '0' + sb t2, 0(a1) + div t0, t0, t1 + addi a1, a1, -1 + bne zero, t0, .digit10 - addi t1, x0, '\n' - sw t1, 0(s0) ecall - addi a0, t0, 0 + addi a0, zero, 1 + addi a1, a1, 1 + sub a2, s0, a1 + addi a7, zero, 64 + ecall lw s0, 0(sp) lw ra, 4(sp) - addi sp, sp, 4 + addi sp, sp, 16 ret _start: |
