LSR $ll, X
Mnemonic: | LSR $ll,X | |||
Opcode: | $56 | |||
Operand(en): | $ll | |||
Anzahl der Bytes: | 2 | |||
Befehlsgruppe: | Rotations- und Schiebebefehl | |||
Adressierung: | Zeropage X-indiziert | |||
Beeinflusste Flags im Statusregister: | ||||
Carry-Flag | ||||
Negative-Flag | ||||
Zero-Flag | ||||
Taktzyklen: | 6 | |||
1 | PC | R | Lese Befehl, inkrementiere PC | |
2 | PC | R | hole Adresse, inkrementiere PC | |
3 | Adresse | R | lese von Adresse und addiere Index-Register | |
4 | Adresse + X* | R | lese von effektiver Adresse | |
5 | Adresse + X* | W | schreibe Wert auf effektive Adresse zurück und führe Operation auf den Wert aus | |
6 | Adresse + X* | W | schreibe neuen Wert auf effektive Adresse | |
Anmerkung: | * das Highbyte der effektiven Adresse ist immer Null, d.h. Seitenüberschreitungen werden nicht beachtet |
Der Assembler-Befehl LSR $ll,X verschiebt die acht Bits des Zeropage-Speicherstelleninhalts ($ll+X) um eine Bit-Position nach rechts (von den höherwertigen zu den niederwertigen Bits). Das höchstwertige Bit wird 0 und das herausfallende Bit wird im Carry-Flag aufgefangen.
Damit teilt dieser Befehl den Inhalt der Speicherstelle durch 2. Der Divisionsrest wird im Carry-Flag abgebildet.
Das Negative-Flag wird dabei immer zurückgesetzt, da das Ergebnis stets einem positiven Wert entspricht.
Die zu dieser logischen Operation korrespondierende arithmetische Operation (ein hypothetischer ASR-Befehl) ist nicht implementiert und muss entsprechend ausprogrammiert werden (siehe ASL-Beispiel).
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
LSR | Logical Shift Right |
Logisches Rechts-Schieben |
Beispiel
Siehe auch Beispiele bei LSR $ll.
Vergleichbare BASIC-Anweisung
Für BASIC V2:
10 POKE (34+X) AND 255, PEEK((34+X) AND 255) / 2
Beispielsweise für die Zeropage-Adresse 34 + X (als X-Register). Die Adresse der Speicherstelle beschränkt sich dabei auf Werte im Bereich von 0 bis 255, was mit Hilfe des AND-Operators sichergestellt wird.