[an error occurred while processing this directive]
|
;Деление 16/16
.def delimoe0 =r8
.def delimoe1 =r9
.def delimoe2 =r10
.def delimoe3 =r11
.def ost0 =r12
.def ost1 =r13
.def delitel0 =r14
.def delitel1 =r15
.def res0 =r26 ;регистры X и Y
.def res1 =r27 ;
.def res2 =r28 ;
.def res3 =r29 ;
;***************************************************************************
div32_16:
clr ost1 ;
clr ost0 ;
clr res3 ;
clr res2 ;
clr res1 ;
ldi res0,1d1: lsl delimoe0 ; Ротация влево делимого с сохpанением бита
rol delimoe1 ; пеpеноса в C
rol delimoe2 ;
rol delimoe3 ;
brcc d2
inc delimoe0
d2: rol ost0 ; Получаем текущий остаток деления
rol ost1 ;
brcs d3cp delitel1,ost1 ;remainder = remainder - divisor
brcs d3
brnz d4
cp delitel0,ost0 ;remainder = remainder - divisor
brcs d3
brnz d4
d3: clc
sub ost0,delitel0 ;Вычитаем делитель из текущего остатка
sbc ost1,delitel1 ;
sec
d4: rol res0 ; Сдвиг частного влево
rol res1 ;
rol res2 ;
rol res3 ;
brcc d1
RET
E-mail: info@telesys.ru