RTV forum PL | NewsGroups PL

Szybsza metoda mnożenia dwubajtowego rejestru HL przez rejestr A w ASM Z80?

Szybie mnozenie w asm Z80

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Szybsza metoda mnożenia dwubajtowego rejestru HL przez rejestr A w ASM Z80?

z80
Guest

Thu Nov 23, 2006 5:17 am   



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

Tomasz Szcześniak
Guest

Thu Nov 23, 2006 7:40 am   



Dnia Thu, 23 Nov 2006 05:17:47 +0100 na fali pl.misc.elektronika stacja
z80 <z80@interia.pl> nadała:
Quote:
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

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.
--
Tomasz Szczesniak

tszczesn@pay.com.pl
FIDO: 2:480/127.134 HYDEPARK moderator
http://www.pay.com.pl/oldradio

J.F.
Guest

Thu Nov 23, 2006 10:41 pm   



On Thu, 23 Nov 2006 06:07:40 +0000 (UTC), Tomasz Szcześniak wrote:
Quote:
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.

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.

elektroda NewsGroups Forum Index - Elektronika Polska - Szybsza metoda mnożenia dwubajtowego rejestru HL przez rejestr A w ASM Z80?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map