STA ($ll, X)
Aus C64-Wiki
Zur Navigation springenZur Suche springen
| Mnemonic: | STA ($ll, X) | |||
| Opcode: | $81 | |||
| Operand(en): | $ll | |||
| Anzahl der Bytes: | 2 | |||
| Befehlsgruppe: | Transfer-Befehl | |||
| Adressierung: | indirekt X-indiziert | |||
| Beeinflusste Flags im Statusregister: | ||||
| keine | ||||
| Taktzyklen: | 6 | |||
| 1 | PC | R | Lese Opcode, inkrementiere PC | |
| 2 | PC | R | Lese Zeigeradresse, inkrementiere PC | |
| 3 | Pointer | R | Lese von der Adresse, addiere X dazu | |
| 4 | Pointer + X | R | lese effektive Adresse Low | |
| 5 | Pointer + X + 1 | R | lese effektive Adresse High | |
| 6 | Adresse | W | schreiben auf effektive Adresse | |
| Anmerkung: | Die effektive Adresse wird immer aus der Zeropage gelesen | |||
Der Assembler-Befehl STA ($ll,X) speichert den Wert des Akkumulators in die Speicherzelle jener Adresse, die sich aus der Zeigeradresse (LSB= $ll+X ; MSB= $ll+X+1) bildet.
Man beachte, dass die Adresse selbst in einem Zwei-Byte-Block (Word) innerhalb der Zeropage liegt!
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
| STA | STore Accumulator |
| Speichere Akkumulator |
Beispiel
Auszug aus dem 1541 CBM-DOS 2.6 ROM-Listing: bei Adresse $F3C0 von $F3B1/62385: Read block header, verify ID
CFF1: 48 PHA ; save data byte CFF2: 20 93 DF JSR $DF93 ; get buffer number CFF5: 10 06 BPL $CFFD ; associated buffer? CFF7: 68 PLA CFF8: A9 61 LDA #$61 CFFA: 4C C8 C1 JMP $C1C8 ; 61, 'file not open' Jump from $CFF5, $DD92: CFFD: 0A ASL ; buffer number times 2 CFFE: AA TAX ; as index CFFF: 68 PLA ; data byte D000: 81 99 STA ($99,X) ; write in buffer D002: F6 99 INC $99,X ; increment buffer pointer D004: 60 RTS
