Forum: Offtopic Stackpointer Inhalt und Adressen


von Maren K. (maren_knappig)


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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Maren K. schrieb:
> was man unter einem H
> Register versteht

Das steht im User-Manual der von Dir nicht genannten CPU.

von Maren K. (maren_knappig)


Angehängte Dateien:

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).

von Maren K. (maren_knappig)



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

von Purzel H. (hacky)


Lesenswert?

Das H Register ist das Index Register. Das ist der Pointer. Schau nach 
wie dessen Funktionalitaet geht.

: Bearbeitet durch User
von Peter D. (peda)


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.

von (prx) A. K. (prx)


Lesenswert?

Peter D. schrieb:
> Der 6805/08 ist ein ziemlicher Sonderfall, viele CPUs sichern nur den PC
> beim Interrupteintritt.

Oft wird auch das Statusregister automatisch gesichert.

von Maren K. (maren_knappig)


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.

von Maren K. (maren_knappig)


Angehängte Dateien:

Lesenswert?

Ich habe das ganze einmal Skizziert. Könnte Ihr mir ein Feedback dazu 
geben? Der SP Zeigt doch auf den TOS. Bevor ein neues Datenwort abgelegt 
werden soll wird dieser doch erniedrigt damit zeigt er auf die nächste 
speicherzelle auf der dann das Datenwort abgelegt wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.