我有一个指数子程序,可以进行计算并将结果放入r0中。目前我可以以十六进制打印结果,但我还想以十进制打印它。在网上搜索了很多后,我没有找到一个简单的方法来完成它。这似乎是一个简单的任务,但我无法弄清楚如何做到这一点。
谢谢
谢谢
我倾向于说“链接一个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