ASL $ll
Mnemonic: | ASL $ll | ||
Opcode: | $06 | ||
Operand(en): | $ll | ||
Anzahl der Bytes: | 2 | ||
Befehlsgruppe: | Rotations- und Schiebebefehl | ||
Adressierung: | Zeropage | ||
Beeinflusste Flags im Statusregister: | |||
Carry-Flag | |||
Negative-Flag | |||
Zero-Flag | |||
Taktzyklen: | 5 | ||
1 | PC | R | Lese Befehl, inkrementiere PC |
2 | PC | R | hole Adresse, inkrementiere PC |
3 | Adresse | R | lese von effektiver Adresse |
4 | Adresse | W | schreibe bisherigen Wert auf effektive Adresse zurück und führe Operation auf den Wert aus |
5 | Adresse | W | schreibe neuen Wert auf effektive Adresse |
Der Assembler-Befehl ASL $ll verschiebt die acht Bits des Inhalts der Zeropage-Speicherstelle $ll 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 Beispiel bei ASL $ll,X).
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
ASL | Arithmetic Shift Left |
Logisches Links-Schieben |
Beispiel
Siehe auch Beispiel bei ASL $ll,X.
Dieses Programmfragment multipliziert den vorzeichenlose 16-Bit-Wert an Speicherstelle $0022/$0023 mit 2 und zeigt dabei die Kaskadierung für über 8 Bit hinausgehende Werte.
*=$c000 ; Startadresse des Programms asl $22 ; niederwertiges Byte in Zeropage, Bit 7 im Carry rol $23 ; höherwertiges Byte, nimmt das Carry mit bcs zugross ; Übertrag zeigt gesprengten 16-Bit-Wertebereich (Overflow) an ... zugross:
Speicherauszug:
.c000 06 22 asl $22 .c002 26 23 rol $23 .c004 b0 02 bcs $c008
Vergleichbare BASIC-Anweisung
Für BASIC V2:
10 POKE 34, PEEK(34) * 2 AND 255
Beispielsweise für die Zeropage-Adresse 34. Der Inhalt der Speicherstelle beschränkt sich dabei auf Werte im Bereich von 0 bis 255, was mit Hilfe des AND-Operators sichergestellt wird.