PLP
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
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?