[HWnews] ASM 51 - deleni 16ti bitoveho cisla

Jaroslav Buchta buchta@compelson.cz
Neděle Duben 4 14:45:49 CEST 2004


Pro deleni bych pouzil standardni kus kodu z nejake knihovny, uz to tu bylo
probirano.
Nebo si napsat vlastni, je to jednoduchy algoritmus na par radku ASM
(odhaduji tak 20-30, 16/8 -> 8 pujde v pohode jen v registrech), inspirace
napr. (nasel jsem v nejakem mem starem kodu)

;---------------------------------------------------------
;procedura pro deleni - 32/16->16 bitu
;vstup  : r2, r3, r4, r5 - delenec
;         r6, r7 - delitel
;vystup : r2, r3 - podil (je-li r4 | r5 != 0, pak preteceni)
;         r0, r1 - zbytek
;nesmi byt volano asynchronne !!!

;dale pouziva r0, r1, B

div_16:     mov    B, #32    ;pocitadlo bitu
            mov    r0, #0    ;nuluje polov. vysl.
            mov    r1, #0
div_16_1:   clr    c         ;op & vysl <<
            mov    a, r2
            rlc    a
            mov    r2, a
            mov    a, r3
            rlc    a
            mov    r3, a
            mov    a, r4
            rlc    a
            mov    r4, a
            mov    a, r5
            rlc    a
            mov    r5, a
            mov    a, r0
            rlc    a
            mov    r0, a
            mov    a, r1
            rlc    a
            mov    r1, a
            clr    c
            mov    a, r0
            subb   a, r6
            mov    a, r1
            subb   a, r7
            jc     div_16_2  ;fragment < delenec
            mov    a, r0     ;fragment > delenec -> skutecne odecte
            subb   a, r6
            mov    r0, a
            mov    a, r1
            subb   a, r7
            mov    r1, a
            mov    a, r2     ;dosadi bit 1
            orl    a, #1
            mov    r2, a
div_16_2:
            djnz   B, div_16_1
            ret



Ledky se zapojuji proti +5V, spina se proti zemi, tam jsou spinace
dostatecne.


-----Original Message-----
From: hw-list-bounces@mailman.nethouse.cz
[mailto:hw-list-bounces@mailman.nethouse.cz]On Behalf Of Dalibor Farný
Sent: Sunday, April 04, 2004 2:35 PM
To: hw-list@mailman.nethouse.cz
Subject: [HWnews] ASM 51 - deleni 16ti bitoveho cisla


Dobry den, opet mam takovy maly problem, potreboval bych vydelit
(celociselne) 16ti bitove cislo 8mi bitovym na AT8C2051. To 16ti bitove
cislo je konkretne 12000 a to 8mi bitove v rozsahu 80-255 cili vysledek bude
vzdy osmibitovy. Nevite jak na to?
ps. A jak je to s primym buzenim led na tomto jednocipu? Brany dokazi
dodavat proud ktery sotva staci na rozsviceni ledky pres tranzisor...

Diky D. Farny







Další informace o konferenci Hw-list