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?
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.
Maren K. schrieb: > was man unter einem H > Register versteht Das steht im User-Manual der von Dir nicht genannten CPU.
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).
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
Das H Register ist das Index Register. Das ist der Pointer. Schau nach wie dessen Funktionalitaet geht.
:
Bearbeitet durch User
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.