Stack is Weg

Gast #4443880
Lesenswert?
• ▲
▼
Hallo zusamme,

mir fehlt eine kleine Information um den Stack im ATMEGA16 zu verstehen. 
Vielleicht kann einer weiterhelfen.


RAM Adress | Bezeichner          | Wert
---------------------------------------
0x005D     | Stackpointer HB     |0x01
0x005E     | ""           LB     |0x30
-----------------------------------------
0x0130     |   ????              |


Worauf zeigt der Stackpointer? Dachte er zeigt auf die Rücksprungadresse 
und ist dann 2 Byte groß. Wenn ich im Debugger den Speicher mit dem 
Disassambly vergleiche stimmt der Wert auf den der Stackpointer zeigt 
nicht mit der Rücksprungadresse im RAM überein.



Bsp.


ProgrammCounter         Code

0x05                    Funktion();
0x06                    a=b;

RAM Adress | Bezeichner          | Wert
---------------------------------------
0x005D     | Stackpointer HB     |0x01
0x005E     | ""           LB     |0x30
-----------------------------------------
0x0130     |Rücksprungadresse    | hier sollte doch die Adresse (0x06) 
stehen die auf die nächste Zeile nach der Funktion() zeigt.

hoffentlich versteht jemand was hier steht :D
#4443904
Lesenswert?
• ▲
▼
@ gye (Gast)

>RAM Adress | Bezeichner          | Wert
>---------------------------------------
>0x005D     | Stackpointer HB     |0x01
>0x005E     | ""           LB     |0x30
>-----------------------------------------
>0x0130     |   ????              |


>Worauf zeigt der Stackpointer?

Auf die nächste freie RAM-Zelle.

>Dachte er zeigt auf die Rücksprungadresse

Nö, er ist schon eins weiter.

>und ist dann 2 Byte groß. Wenn ich im Debugger den Speicher mit dem
>Disassambly vergleiche stimmt der Wert auf den der Stackpointer zeigt
>nicht mit der Rücksprungadresse im RAM überein.

Beim call wird der PC erst auf dem stack gespeichert und DANACH dieser 
vermindert! In C nennt man das Postdekrement.

*stack-- = pc;   // Kurzform

Bei push ist es ebenso.

Beim return wird ZUERST der Stackpointer erhöht und danach der PC 
geladen.

pc = *++stack;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.