[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