ASL $ll

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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


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

Ass befehl 06.gif

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.

Beispielprogramme