TSX

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Mnemonic: TSX
Opcode: $BA
Anzahl der Bytes: 1
Befehlsgruppe: Datentransferbefehl
Adressierung: implizit
Beeinflusste Flags im Statusregister:
Negative-Flag
Zero-Flag
Taktzyklen: 2


Der Assembler-Befehl TSX kopiert den Stapelzeiger in das X-Register.
Damit hat man über die Adressierungsart absolut indiziert X-Register die Möglichkeit, auf beliebige Elemente des Stapels zuzugreifen, auch ohne diese vom Stapel zu entfernen.
Außerdem nützt dieser Befehl den Stapelverbrauch abzufragen und unter Kontrolle zu halten.

Funktionsprinzip

Ass befehl ba.gif

Bedeutung der Buchstaben im Befehl

TSX Transfer Stackpointer to X-Register
Kopiere Stapelzeiger ins X-Register

Beispiel

; Dieses Programm gibt einen Text als Inline-Parameter zum JSR-Aufruf aus.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms

BSOUT = $ffd2
para  = $fd

start   jsr print          ; folgenden Inline-Text ausgeben
        .text "HALLO ALLERSEITS"
        .byte $0d,$00      ; Zeilenvorschub, Textendemarkierung
        jsr print          ; folgenden Inline-Text ausgeben
        .text "BEI C64-WIKI.DE!"
        .byte $00          ; Textendemarkierung
        rts

print
        tsx
        lda $0101,x        ; Low-Byte der Rücksprungadresse, Stapel in Page 1
        sta para
        lda $0102,x        ; High-Byte der Rücksprungadresse 
        sta para+1
        ldy #1             ; Korrektur, weil Rücksprungadresse um 1 zu niedrig
ausgabe lda (para),y       ; Zeichen holen, die dem JSR folgen
        beq fertig         ; 0 ist Endezeichen, dann Abbruch
        jsr BSOUT          ; Zeichen ausgeben, Register bleiben unverändert!
        iny                ; nächstes Zeichen
        bne ausgabe        ; solange Y ungleich 0, also max. 254 Zeichen erlaubt
fertig  tya                ; Anzahl der ausgegeben 
        clc                ; Übertrag für Addition löschen
        adc para           ; Rücksprungadresse korrigieren
        sta $0101,x        ; Low-Byte am Stack korrigiert
        lda para+1
        adc #0             ; Übertrag beim High-Byte berücksichtigen
        sta $0102,x        ; High-Byte am Stack korrigieren
        rts                ; zurück zur Stelle nach dem Inline-Parameter

Hinweis: Dieses Beispiel befindet sich derzeit noch nicht in der unter Weblinks angegebenen Beispielprogrammsammlung.

Vergleichbare BASIC-Anweisung

Keine vergleichbare BASIC-Befehlsfolge vorhanden.

Weblinks