LDA $hhll, Y
Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: | LDA $hhll, Y | |||
Opcode: | $B9 | |||
Operand(en): | $ll $hh | |||
Anzahl der Bytes: | 3 | |||
Befehlsgruppe: | Transfer-Befehl | |||
Adressierung: | absolut Y-indiziert | |||
Beeinflusste Flags im Statusregister: | ||||
Negativ-Flag | ||||
Zero-Flag | ||||
Taktzyklen: | 4 | |||
1 Extra-Takt bei Grenzüberschreitung | ||||
1 | PC | R | Lese Befehl, inkrementiere PC | |
2 | PC | R | lese Adress-Lowbyte, inkrementiere PC | |
3 | PC | R | hole Highbyte der Adresse, addiere Indexregister zum Adress-Lowbyte, inkrementiere PC | |
4 | Adresse + I | R* | lese von effektiver Adresse, korrigiere Highbyte der effektiven Adresse | |
5+ | Adresse + I | R | lese erneut von effektiver Adresse | |
Anmerkung: | I bezeichnet das Index-Register (X oder Y) | |||
Anmerkung: | * das Highbyte der effektiven Adresse könnte zu diesem Zeitpunkt ungültig sein | |||
Anmerkung: | + dieser Takt wird nur ausgeführt, wenn die effektive Adresse im Zyklus 4 ungültig war |
Der Assembler-Befehl LDA $hhll, Y lädt den Akkumulator mit dem Inhalt der Speicherzelle ($hhll+Y).
Der Akkumulator ist ein 8-Bit Register mit einem Wert zwischen 0 und 255 ($ff).
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
LDA | LoaD Accumulator |
Lade Akkumulator |
Beispiel
; Kopiert den Adressbereich $8000-$80ff in den Adressbereich $9000-$90ff. ; Programmstart mit SYS 49152 *=$c000 ldy #$00 ; Y-Register = 0 loop lda $8000, y ; Lade Akku mit dem Inhalt der Speicherzelle ($8000+Y) sta $9000, y ; Speichere Akku in die Speicherzelle ($9000+Y) iny ; Y=Y+1 bne loop ; Verzweige wenn ungleich 0 auf loop rts ; Rücksprung
.c000 a0 00 ldy #$00 .c002 b9 00 80 lda $8000,y .c005 99 00 90 sta $9000,y .c008 c8 iny .c009 d0 f7 bne $c002 .c00b 60 rts
Vergleich des Beispielprogramms mit Basic
10 FOR Y=0 TO 255 20 POKE 36864+Y, PEEK (32768+Y) 30 NEXT Y