LDA $hhll, X
Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: | LDA $hhll, X | |||
Opcode: | $BD | |||
Operand(en): | $ll $hh | |||
Anzahl der Bytes: | 3 | |||
Befehlsgruppe: | Transfer-Befehl | |||
Adressierung: | absolut X-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, X lädt den Akkumulator mit dem Inhalt der Speicherzelle ($hhll+X).
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 ldx #$00 ; X-Register = 0 loop lda $8000,x ; Lade Akku mit dem Inhalt der Speicherzelle ($8000+X) sta $9000,x ; Speichere Akku in die Speicherzelle ($9000+X) inx ; X=X+1 bne loop ; Verzweige wenn ungleich 0 auf loop rts ; Rücksprung
.c000 a2 00 ldx #$00 .c002 bd 00 80 lda $8000,x .c005 9d 00 90 sta $9000,x .c008 e8 inx .c009 d0 f7 bne $c002 .c00b 60 rts
Vergleich des Beispielprogramms mit Basic
10 FOR X=0 TO 255 20 POKE 36864+X, PEEK (32768+X) 30 NEXT X