我有一个取幂子程序,它进行计算并将结果放在r0中。目前我可以用十六进制打印结果,但我也想用十进制打印它。在网上进行了大量的搜索后,我还没有找到一种直接的方法。这似乎是一项简单的任务,但我无法理解。
感谢
答案 0 :(得分:4)
我很想说“链接到C库并调用printf”。如果那不是一个选项,那么这可能是有用的,给定一个“putchar”函数,它输出r0中的ASCII字符。它重复将数字除以10,将数字写入堆栈中的小缓冲区,然后以相反的顺序输出它们。对于“umull”指令,它需要4M或更好的架构。
print_decimal:
stmfd sp!, {r4,r5,lr}
cmp r0, #0
moveq r0, #'0'
bleq putchar
beq done
mov r4, sp
mov r5, sp
sub sp, sp, #12
rsblt r0, r0, #0 ; r0 = abs(r0)
movlt lr, #1 ; lr = negative ? 1 : 0
movgt lr, #0
ldr r1, =0x1999999a ; r1 = 2^32 / 10
loop: umull r2, r3, r0, r1 ; r3 = r0 / 10
sub r2, r0, r3, lsl #3
sub r2, r2, r3, lsl #1 ; r2 = r0 - 10*r3 = r0 % 10
add r2, r2, #'0'
strb r2, [r4, #-1]!
movs r0, r3
bne loop
cmp lr, #0
movne r0, #'-'
blne putchar
write: ldrb r0, [r4], #1
bl putchar
cmp r4, r5
blt write
add sp, sp, #12
done:
ldmfd sp!, {r4,r5,lr}
mov r0, #'\n'
b putchar