Stackpointer Inhalt und Adressen

OP #5707048
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?
OP
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:
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.
OP
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.