[zxspectrum] Re: moltiplicazione tra due registri

  • From: megabug <megabug@xxxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Wed, 24 Mar 2004 03:05:13 +0100

On Tue, Mar 23, 2004 at 08:27:15PM +0100, Enrico Maria Giordano wrote:
> megabug wrote:
> > Si puo' sfruttare l'istruzione RLD per shiftare di 4 bit in colpo solo:
> > 
> > LD      A,0
> > LD      L,C     ; Assert (C<8)
> > RLD
> 
> Non capisco come possa funzionare. RLD sposta tra l'accumulatore e la
> locazione di memoria puntata da HL. Ma tu in HL non hai messo un
> indirizzo.

Hai ragione, ho letto male l'instruction set e non mi ero accorto di quei
strani piccoli caratteri intorno ad HL (le parentesi :)) e ho pensato
che la rotazione avvenisse con il contenuto diretto di HL.
Troppo comodo eh?
Mmmmm..... vediamo, si potrebbe cmq. sfruttare in questo modo:

LD      HL, x           ; dove x e' una locazione di memoria libera
LD      (HL), 0
LD      A, C            ; Assert (C<8)          A=C
RLD                     ;                       A=C*16
ADD     A, A            ;                       A=C*32
ADD     A, B            ; Assert (B<32)         A=C*32+B
LD      L, A
LD      H, 88           ; HL = C*32+B+22528

Se poi la locazione x e' nel range $58xx si puo' eliminare anche
l'ultima istruzione.
E' corretto oppure ho detto fesserie anche stavolta?
(No. Non ho fumato. Si'. Sono un feticista dell'assembly.)

saluti
--
megabug


Other related posts: