gpt4 book ai didi

printing - ARM 汇编以十进制形式打印寄存器值

转载 作者:行者123 更新时间:2023-12-02 19:34:59 36 4
gpt4 key购买 nike

我有一个求幂子例程,可以进行计算并将结果放入 r0 中。目前我可以以十六进制打印结果,但我也想以十进制打印它。在网上进行了大量搜索后,我还没有找到直接的方法。似乎是一个简单的任务,但我无法弄清楚。

谢谢

最佳答案

我很想说“链接到 C 库并调用 printf”。如果这不是一个选项,那么给定一个在 r0 中输出 ASCII 字符的“putchar”函数,这里可能会起作用。它反复将数字除以 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

关于printing - ARM 汇编以十进制形式打印寄存器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370942/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com