PLP

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: PLP
Opcode: $28
Anzahl der Bytes: 1
Befehlsgruppe: Datentransferbefehl
Adressierung: implizit
Beeinflusste Flags im Statusregister:
Carry-Flag
Negative-Flag
Overflow-Flag
Zero-Flag
Interrupt-Flag
Break-Flag
Decimal-Flag
Taktzyklen: 4


Der Assembler-Befehl PLP erhöht den Stapelzeiger (Stackpointer) um 1. Danach wird das Statusregister mit dem Inhalt der Speicheradresse, auf die der Stapelzeiger zeigt, geladen.
Der Programmierer muss darauf achten, dass alle Bytes, die mit PHP während eines Unterprogramms auf den Stapel gelangen, wieder mit dem Befehl PLP, PLA oder durch direkte Manipulation des Stackpointer-Registers entfernt werden, bevor der Rücksprung mittels RTS erfolgt.

Im Gegensatz zum PHP benötigt dieser Befehl einen Taktzyklus mehr, da für den Zugriff auf den Wert vorher zuerst der Stapelzeiger erhöht werden muss, was aufeinander folgend abzuarbeiten ist und damit eine etwaige Parallelisierung im Ablauf zunichtemacht.

Funktionsprinzip

Ass befehl 28.gif

Bedeutung der Buchstaben im Befehl

PLP PulL Processor Status from Stack
Hole Statusregister vom Stapel

Beispiel

Die 4 höchstwertigen Bits im Akkumulator (Bit 4 bis 7) verdoppeln, Ergebnis in Speicherstelle $02 (z.B. um eine Grafik auf doppelt Breite zu bringen)

        ldx #4         ; 4 Bits verdoppeln
nextbit asl            ; Bit 7 des Akku ins Carry-Flag
        php            ; Bit 7 (u.a.) im Carry aufheben
        rol $02        ; Carry in Bit 0 von Zeropage-Speicherstelle $02
        plp            ; Bit 7 wieder im Carry herstellen
        rol $02        ; Carry ein 2. mal übernehmen, ist dann auf Bit 1 und Bit 0
        dex            ; Bit-Zähler
        bne nextbit    ; alle 4 Bits durch? 

Beispielprogramme