ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
317174 Топик полностью
whale (24.03.2012 00:00, просмотров: 74) ответил SciFi на Ну, про таблицу уже сказано выше :-)
ладно попробую пока так мож успеет... 17 тактов  
.macro div16

;***** Subroutine Register Variables
.def	drem16uL	=r14                       ; остаток мл
.def	drem16uH	=r15                       ; остаток ст 
.def	dres16uL	=r16 			; целое мл  
.def	dres16uH	=r17                        ; целое ст   
.def	dd16uL	=r16 			; делимое мл
.def	dd16uH	=r17			; делимое ст 
.def	dv16uL	=r18			; делитель мл
.def	dv16uH	=r19			; делитель ст 
.def	dcnt16u	=r20
;********************* Code************
div16u:         
	clr	drem16uL 			;clear remainder Low byte
	sub	drem16uH,drem16uH	;clear remainder High byte and carry
	ldi	dcnt16u,17   			;init loop counter
d16u_1:	
	rol	dd16uL			;shift left dividend
	rol	dd16uH	
	dec	dcnt16u	         		;decrement counter	
	brne	d16u_2	         		;if done         
	rjmp	ex_dv16  	      		;return
d16u_2:	
	rol	drem16uL			;shift dividend into remainder
	rol	drem16uH	
	sub	drem16uL,dv16uL    		;remainder = remainder - divisor	
	sbc	drem16uH,dv16uH		;	
	brcc	d16u_3			;if result negative	
	add	drem16uL,dv16uL    		;restore remainder         
	adc	drem16uH,dv16uH	
	clc		         			;clear carry to be shifted into result     
	rjmp	d16u_1	         		;else
 d16u_3:	
	sec					;set carry to be shifted into result	
	rjmp	d16u_1
	
ex_dv16:	

.endmacro