Re: AVR - celočíselné dělení 2 čísel
Jiří Reček
recek.jiri@quick.cz
Úterý Duben 10 11:04:41 CEST 2007
Používám dělení 24bitových čísel, tak kdyžtak by se to dalo zkrátit.
Jirka
; *****************************************************************
; Dělení 3 byty / 3 byty = 3 byty
; Vstup:
; Delenec r16,r17,r18
; Dělitel r19,r20,r21
; Výstup:
; Výsledek r16,r17,r18
; Zbytek r19,r20,r21
; Zásobník: 8 úrovní
Div24:
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
clr r26 ; Dělitel
clr r27
clr r28
mov r22,r16 ; Dělenec
mov r23,r17
mov r24,r18
clr r25
; Vynulovat výsledek
clr r16
clr r17
clr r18
ldi r29,24 ; Počet bitů
Div24Loop:
; Posunutí dělitele
lsr r21
ror r20
ror r19
ror r28
ror r27
ror r26
; porovnání
cp r22,r26
cpc r23,r27
cpc r24,r28
cpc r25,r19
cpc r25,r20
cpc r25,r21
clc
brmi Div24NoSubst
; odečtení
sub r22,r26
sbc r23,r27
sbc r24,r28
sec ; nastavení přenosu
Div24NoSubst:
; posunutí výsledku
rol r16
rol r17
rol r18
dec r29 ; Další bitík
brne Div24Loop
; Zbytek
mov r19,r22
mov r20,r23
mov r21,r24
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
ret
Další informace o konferenci Hw-list