||
许多单片机都没有除法指令,如果用C语言开发则不必考虑这个问题,编译器会帮你处理除法运算;如果用汇编,则需要一个除法子程序。下面是arm的除法宏。
$dividend:运算前存放被除数,运算后存放余数;
$divisor:除数;
$quotient:运算后存放商;
$temp:临时变量,存放中间结果;
这里假定$dividend,$divisor,$quotient,$temp都是寄存器。
$Lab DivCal $dividend,$divisor,$quotient,$temp
$Lab
MOV $temp,$divisor
CMP $temp,$dividend, LSR #1
0 MOVLS $temp,$temp, LSL #1 ; double it until 2 * $temp > $dividend
CMP $temp,$dividend ,LSR #1
BLS %B0
MOV $quotient,#0
1 CMP $dividend,$temp
SUBCS $dividend,$dividend,$temp
ADC $quotient,$quotient, $quotient
MOV $temp,$temp, LSR #1
CMP $temp,$divisor
BHS %B1
MEND