ARM编程:除法、乘法、程序计数器及调试技巧
1. 除法与余数计算
早期的树莓派版本(如原始的A、B版本以及Zero)不支持除法指令,后续版本的ARM芯片引入了SDIV和UDIV指令。不过,我们也可以不使用特定的除法指令来实现两个32位值的除法。
以下是一个示例程序(Program 12b):
/* Long Divide using no specific Divide instruction */
/* Provides Quotient and Remainder as result */
@ On Entry: R1=Dividend, R2=Divisor
@ On Exit: R3=Quotient, R1=Remainder, R2 Original Divisor
.global _start
_start:
MOV R1, #111 @ Going to do 111/20
MOV R2, #20
MOV R4, R2 @ Preserve Divisor
CMP R4, R1, LSR #1
Div1:
MOVLS R4, R4, LSL #1 @ Double Divisor until
CMP R4, R1, LSL #1 @ 2xR4>divisor
BLS Div1
MOV R3, #0 @ Initialise quotient
Div2:
CMP R1, R4 @ Can we subtract R4?
SUBCS R1, R1, R4 @ Do so if possible
ADC R3, R3, R3 @ Double quotient,
超级会员免费看
订阅专栏 解锁全文
37

被折叠的 条评论
为什么被折叠?



