ладно попробую пока так мож успеет... 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