ASL $ll, X
Mnemonic: | ASL $ll,X |
Opcode: | $16 |
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 |
Der Assembler-Befehl ASL $ll,X verschiebt die acht Bits des Zeropage-Speicherstelleninhalts ($ll+X) um eine Bit-Position nach links (von den niederwertigen zu den höherwertigen Bits). Das niedrigstwertige Bit wird 0 und das herausfallende Bit 7 wird im Carry-Flag aufgefangen.
Damit multipliziert dieser Befehl den adressierten Wert mit 2. Der Übertrag wird im Carry-Flag abgebildet.
Die zu dieser nach linksgehenden Operation korrespondierende rechtsgehende Operation (ein hypothetischer ASR-Befehl) ist nicht implementiert und muss entsprechend ausprogrammiert werden (siehe Abschnitt Beispiel).
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
ASL | Arithmetic Shift Left |
Logisches Links-Schieben |
Beispiel
ASR-Nachbildung (das Vorzeichen-Bit bleibt erhalten), ohne den Akkumulator zu verändern, wobei ein anderer Ansatz, beispielsweise mit BIT, wegen des fehlenden Adressierungsmodus nicht möglich ist.
*=$c000 ; Startadresse des Programms asr asl $01,X ; Bit 7 ins Carry bcc istnull ; Bit 7 = 0? inc $01,X ; Bit 7 in Bit 0 duplizieren istnull ror $01,X ; ASL rückgängig, dabei neue Bit 7 in Carry ror $01,X ; ASR: dupliziertes Bit 7, identisch mit Bit 6
Speicherauszug:
.c000 16 01 asl $01,x .c002 90 02 bcc $2006 .c004 f6 01 inc $01,x .c006 76 01 ror $01,x .c008 76 01 ror $01,x
Vergleichbare BASIC-Anweisung
Für BASIC V2:
10 POKE (34+X) AND 255, PEEK((34+X) AND 255) * 2 AND 255
Beispielsweise für die Zeropage-Adresse 34 + X (als X-Register). Sowohl der Inhalt als auch die Adresse der Speicherstelle beschränkt sich dabei auf Werte im Bereich von 0 bis 255, was mit Hilfe des AND-Operators sichergestellt wird.