Stackpointer Inhalt und Adressen

#5707048
Lesenswert?

Ich habe euch einmal eine Skizze wie ich mir die Abarbeitung des Push- 
und des Pop-Befehls (PSHAund PULH) eines 8-Bit-Mikrocontrollers 
vorstelle in den anhang gelegt.

Je nach Quelle wächst der Stack nach unten oder nach oben, aber das 
sollte doch an sich kein problem sein, da beide zur niedrigen Adresse 
wachsen, oder?

Könnte mir jemand darüber hinaus erklären, was man unter einem H 
Register versteht und welche aufgaben dies hat bzw. wie es sich mit dem 
Stack verhält?

So wie ich es verstehe wird das H-Register bei einem Interrupt nicht 
automatisch im Stack abgelegt, da die ISR das X Register benutzt. Dann 
muss man als Benutzer (manuell) das H-Reigster (Register High) auf dem 
Stack ablegen (mit Push/Pop befehl) bzw. wieder entnehmen. Wie genau 
kann das aussehen visuell? Wie groß ist das H-Register? Wie groß die 
Datenpakete, die auf dem Stack abgelegt werden und um wieviel Adressen 
muss ich den Stack inkrementieren?  Läuft das gleich ab wie beim 
Interrupt und dem X Register? Wenn es ein HIGH register gibt, gibt es 
dann auch ein "low" register?
#5708018
Lesenswert?

Tut mir leid, diese habe ich versehntlich vergessen. Ich habe meine 
Skizze in den Anhang gelegt.
Tatsächlich steht in der Aufgabenstellung "lediglich" 
8-Bit-Mikrocontroller, was mich ebenfalls gewundert hat, da je nach 
Chip-Architektur andere Register "gerettet" werden müssen.
Es bezieht sich wohl auf den 68HC08. Das Datenblatt habe ich angehangen. 
Dort habe ich auch die Informationen her, die ich oben beschrieben habe. 
Allerdings kann ich daraus immer noch kein "visuelles/inhaltliches" 
Verständis dafür entwickeln, wie genau das H-Register aussieht, was es 
ist und wie dessen Daten genau auf dem Stack abgelegt werden (ähnlich 
wie bei meiner ersten Skizze).
Angehängte Dateien:
#5708023
Lesenswert?

Jörg W. schrieb:
> Erstens fehlt dein Anhang, zweitens scheinen deine Fragen recht
> detailliert auf eine konkrete Architektur zuzutreffen – da müsstest du
> uns schon dazu schreiben, welche Architektur das ist

Neben dem Reference Manual der CPU hier noch meine Skizze vom 
Stackpointer/Stack
Angehängte Dateien:
#5708121
Lesenswert?

Steht doch im Manual:
"To maintain compatibility with the M6805 Family, H (the high byte of 
the
index register) is not stacked during interrupt processing. If the 
interrupt
service routine modifies H or uses the indexed addressing mode, it is 
the user’s responsibility to save and restore it prior to returning. See 
Figure 3-2."

H erweitert X zu H:X, um die vollen 64kB zugreifen zu können.

Der 6805/08 ist ein ziemlicher Sonderfall, viele CPUs sichern nur den PC 
beim Interrupteintritt. Das spart Stackverbrauch, da man so nur die 
Register sichern muß, die man auch wirklich ändert.
#5710104
Lesenswert?

Danke erst einmal für die Hilfreichen Antworten. Das bedeutet für mich, 
dass während einer ISR alle Register byteweise und temporär auf dem 
Stack gespeichert werden (CCR, Akku, X-Register etc.). Dann muss der 
Programmierer das H-Register händisch mit den entsprechneden PSHH 
ablegen, damit dieses nicht verloren geht. Soweit so klar.

Zeigt der Stackpointer wie in meiner Skizze dann immer auf das nächst 
leere (beschreibbare) byte oder auf TOS (Top of Stack)? Je nach Quelle 
zeigt er auf TOS oder auf das bei eins weiter. Des weiteren würde ich 
noch gerne wissen, ob der Stack zur niedrigen oder zur höheren Adresse 
wächst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren