Division By A Constant - Samsung S3C2501X User Manual

32-bit risc microprocessor
Table of Contents

Advertisement

INSTRUCTION SET

3.39.3 DIVISION BY A CONSTANT

Division by a constant can often be performed by a short fixed sequence of shifts, adds and subtracts.
Here is an example of a divide by 10 routine based on the algorithm in the ARM Cookbook in both Thumb and
ARM code.
3.39.3.1 Thumb Code
udiv10
MOV
LSR
SUB
LSR
ADD
LSR
ADD
LSR
ADD
LSR
ASL
ADD
ASL
SUB
CMP
BLT
ADD
SUB
0
MOV
3.39.3.2 ARM Code
udiv10
SUB
SUB
ADD
ADD
ADD
MOV
ADD
SUBS
ADDPL
ADDMI
MOV
3-100
a2, a1
a3, a1, #2
a1, a3
a3, a1, #4
a1, a3
a3, a1, #8
a1, a3
a3, a1, #16
a1, a3
a1, #3
a3, a1, #2
a3, a1
a3, #1
a2, a3
a2, #10
%FT0
a1, #1
a2, #10
pc, lr
a2, a1, #10
a1, a1, a1, lsr #2
a1, a1, a1, lsr #4
a1, a1, a1, lsr #8
a1, a1, a1, lsr #16
a1, a1, lsr #3
a3, a1, a1, asl #2
a2, a2, a3, asl #1
a1, a1, #1
a2, a2, #10
pc, lr
; Take argument in a1 returns quotient in a1,
; remainder in a2
; Take argument in a1 returns quotient in a1,
; remainder in a2
S3C2501X

Advertisement

Table of Contents
loading

Table of Contents