Немного поправлю. Что-то у тебя неправильно с флагом C. Так как я не знаю всех условий задачи, особо вникать не буду.
.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
breq ex_dv16
d16u_2:
rol drem16uL ;shift dividend into remainder
rol drem16uH
sub drem16uL,dv16uL ;remainder = remainder - divisor
sbc drem16uH,dv16uH ;
brsh d16u_1 ;if result negative
add drem16uL,dv16uL ;restore remainder
adc drem16uH,dv16uH
rjmp d16u_1 ;else
ex_dv16:
.endmacro
-
- у меня вроде считает ) - whale(24.03.2012 12:45)