UP | HOME

NOTE: arm64 print number by use svc

NOTE: A problem is single digit print with trailing 0

.global printNumberEntry
printNumberEntry:
// asked two words on stack
    sub sp, sp, #16
    mov x15, #10
    mov x12, x0
// print prepare
// fd(x0) = 1(stdout)
    mov x0, #1
// len(x2) = 1
    mov x2, #1
// Unix write system call
    mov x16, #4
printNumber:
// number = x12
// x14 = x12 / 10
// now x14 is rounded-down quotient of x12
    udiv x14, x12, x15
// x13 = x14 * 10 - x12
    msub x13, x14, x15, x12
// store rounded-down quotient to x12 for next loop
    mov x12, x14
// digit to string
    add x13, x13, #48
    strb w13, [sp]
// buf(x1) = sp
    mov x1, sp
    svc #0
// loop part
    cmp x12, #0
    b.eq exit
    b printNumber
exit:
    mov x13, #10
    strb w13, [sp]
    mov x1, sp
    svc #0
// put used stack back
    add sp, sp, #16
    ret

Date: 2022-01-19 Wed 00:00

Author: Lîm Tsú-thuàn