calculator/hex.s

29 lines
776 B
ArmAsm

.global btohex
.section .rodata
hexchars:
.ascii "0123456789ABCDEF"
.text
# Convert byte to ASCII hex
# arguments:
# a0: value to format
# temporaries used:
# t0, t1
# return:
# a0: value in ASCII hex
btohex:
andi t0, a0, 0xF # Mask off lower nybble
la a1, hexchars # load address of hexchars
add a2, a1, t0 # offset to nybble
lbu t0, 0(a2) # load hex char at offset
srli t1, a0, 4 # shift upper nybble down
andi t1, t1, 0xF # mask off upper nybble
add a2, a1, t1 # offset to nybble
lbu t1, 0(a2) # load hex char at offset
mv a0, t1 # copy upper char to a0
slli a0, a0, 8 # shuft upper char up
or a0, a0, t0 # OR the lower char into a0
ret