Szybie mnozenie w asm Z80

Mam procedure mnozenia dwubajtowego rejestru HL przez rejestr A Wynik w HL Jak widac mnozenie jest zrobione przez wielokrotne dodawanie > PPP0 add hl,bc Potrzebuje szybsza metode - moze nie krotsza w sensie dlugosci kodu ale szybsza

;------------------------------------------------------------------ ; mnozy hl przez a ; wynik w hl ;------------------------------------------------------------------ POMNOZ push bc push de ld d,a or a jr z,POMW0

ld a,h or l jr z,POMW0 ld a,d

ld b,h ld c,l dec a jr z,PEND0 PPP0 add hl,bc dec a jp nz,PPP0 jp PEND0 POMW0 ld hl,0

PEND0 pop de pop bc ret

Reply to
z80
Loading thread data ...

Dnia Thu, 23 Nov 2006 05:17:47 +0100 na fali pl.misc.elektronika stacja z80 snipped-for-privacy@interia.pl nadała:

Klasyczny przesuń i dodaj. Zderujesz BC (wynik) Sprawdzasz najmłodzszy bit A, jeżeli jest 0 to nic nie robisz, jeżeli jest jeden to dodajesz HL do BC Przesuwasz HL o jeden bit w lewo (mnożysz przez dwa). Sprawdzasz następny bit A itd., osiem razy. Pamiętaj tylko, że wynik może ci się nie zmieścić w szesnastu bitach.

Reply to
Tomasz Szcześniak

Wygodniej nieco inaczej. Wynik trzymac w HL - bo sie do niego dodaje. I tenze wynik przesuwac. najstarsze [16-23] bity wyniku trzymac w A ... i jak jednoczesnie tam trzymac mnoznik, to juz w ogole wychodzi pieknie:

;mnozenie DE przez A, wynik w AHL

ld b,8 ld hl,0 ld a,l ; tez zerowanie. M1: add hl,hl ; przesuniecie AHL adc a,a jr nc,m2 add hl,de adc A,0 M2: djnz M1

Za poprawnosc nie recze, bo zeta nie uzywalem od strasznie dawna.

J.

Reply to
J.F.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.