Справочник Пользователя для Samsung S3C2440A

Скачать
Страница из 560
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 

 
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