Witam, znalazłem w sieci taki oto program,
nie umiem jednak z niego skorzystać.
Prosił bym o wytłumaczenie mi w których rejestrach jest dzielna, dzielnik oraz jak odczytać wynik.
Pozdrawiam.
Cytat:
.def dv0 =r0
.def dv1 =r1
.def dv2 =r2
.def dv3 =r3
.def dv4 =r4
.def dv5 =r5
.def dv6 =r6
.def dd0 =r7
.def dd1 =r8
.def dd2 =r9
.def dd3 =r10
.def dd4 =r11
.def dd5 =r12
.def dd6 =r13
.def dr0 =r14
.def dr1 =r15
.def dr2 =r16
.def dr3 =r17
.def dr4 =r18
.def dr5 =r19
.def dr6 =r20
.def counter =r24
;=============================================================
;56 bit divide routine
;=============================================================
div56: clr dr1
clr dr2
clr dr3
clr dr4
clr dr5
clr dr6
ldi counter,57 ;init loop counter, # bits to be divided +1
sub dr0,dr0 ;clears registers and carry bit
d56_1: rol dd0 ;shift left dividend
rol dd1
rol dd2
rol dd3
rol dd4
rol dd5
rol dd6
dec counter ;decrement counter
brne d56_2 ;if done
ret ;return
d56_2: rol dr0 ;shift dividend into remainder
rol dr1
rol dr2
rol dr3
rol dr4
rol dr5
rol dr6
sub dr0,dv0 ;remainder = remainder - divisor
sbc dr1,dv1 ;
sbc dr2,dv2
sbc dr3,dv3
sbc dr4,dv4
sbc dr5,dv5
sbc dr6,dv6
brcc d56_3 ;if result negative
add dr0,dv0 ;restore remainder
adc dr1,dv1
adc dr2,dv2
adc dr3,dv3
adc dr4,dv4
adc dr5,dv5
adc dr6,dv6
clc ; clear carry to be shifted into result
rjmp d56_1 ;else
d56_3: sec ; set carry to be shifted into result
rjmp d56_1
nie umiem jednak z niego skorzystać.
Prosił bym o wytłumaczenie mi w których rejestrach jest dzielna, dzielnik oraz jak odczytać wynik.
Pozdrawiam.