Samsung S3C2440A User Manual

Page 164

Advertising
background image

S3C2440A RISC MICROPROCESSOR

THUMB INSTRUCTION SET

4-43

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.

Thumb Code

udiv10

; Take argument in a1 returns quotient in a1,

;

remainder

in

a2

MOV

a2, a1

LSR

a3, a1, #2

SUB

a1, a3

LSR

a3, a1, #4

ADD

a1, a3

LSR

a3, a1, #8

ADD

a1, a3

LSR

a3, a1, #16

ADD

a1, a3

LSR

a1, #3

ASL

a3, a1, #2

ADD

a3, a1

ASL

a3, #1

SUB

a2, a3

CMP

a2, #10

BLT

%FT0

ADD

a1, #1

SUB

a2, #10

0

MOV

pc, lr

ARM Code

udiv10

; Take argument in a1 returns quotient in a1,

;

remainder

in

a2

SUB

a2, a1, #10

SUB

a1, a1, a1, lsr #2

ADD

a1, a1, a1, lsr #4

ADD

a1, a1, a1, lsr #8

ADD

a1, a1, a1, lsr #16

MOV

a1, a1, lsr #3

ADD

a3, a1, a1, asl #2

SUBS

a2, a2, a3, asl #1

ADDPL

a1, a1, #1

ADDMI

a2, a2, #10

MOV

pc, lr

Advertising