PHA
Aus C64-Wiki
Zur Navigation springenZur Suche springenMnemonic: | PHA |
Opcode: | $48 |
Anzahl der Bytes: | 1 |
Befehlsgruppe: | Datentransferbefehl |
Adressierung: | implizit |
Beeinflusste Flags im Statusregister: | |
keine | |
Taktzyklen: | 3 |
Der Assembler-Befehl PHA legt den Inhalt des Akkumulators auf dem Stapel ab. Danach wird der Stapelzeiger (Stackpointer) um 1 verringert (siehe Bild).
Der Programmierer muss darauf achten, dass alle Bytes, die mit PHA während eines Unterprogramms auf den Stapel gelangen, wieder mit dem Befehl PLA, PLP oder durch direkte Manipulation des Stackpointer-Registers entfernt werden, bevor der Rücksprung mittels RTS erfolgt.
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
PHA | PusH Accumulator on Stack |
Akkumulator am Stapel ablegen |
Beispiel
; Dieses Programm wartet auf einen Tastendruck. ; Die Register Akku, X und Y werden am Beginn gesichert und am Ende wieder herstellt. ; Programmstart mit SYS 49152 *=$c000 ; Startadresse des Programms GETIN = $ffe4 start pha ; Akku am Stapel sichern. txa pha ; X-Register am Stapel sichern. tya pha ; Y-Register am Stapel sichern. eingabe jsr GETIN ; Zeichen einlesen (veränderte Register A, X, Y) beq eingabe ; warte auf Tastendruck pla tay ; Y-Register wiederherstellen pla tax ; X-Register wiederherstellen pla ; Akku wiederherstellen rts ; Rücksprung zu BASIC
Speicherauszug:
.c000 48 pha .c001 8a txa .c002 48 pha .c003 98 tya .c004 48 pha .c005 20 e4 ff jsr $ffe4 .c008 f0 fb beq $c005 .c00a 68 pla .c00b a8 tay .c00c 68 pla .c00d aa tax .c00e 68 pla .c00f 60 rts
Vergleich des Beispielprogramms mit BASIC
Für BASIC V2:
10 S$=A$ : REM A$ in der Variable S$ zwischenspeichern 20 GET A$ 30 IF A$="" THEN 20 : REM warte auf Tastendruck ... ... 40 A$=S$ : REM A$ wiederherstellen
Es wird hier vereinfacht die Zwischenspeicherung im Gegensatz zum Assembler-Beispiel nicht wirklich auf einem variablen Stack, sondern mit einer fest vorgegebenen Variable realisiert.