Hallo ich habe eine Frage zum Thema Stack Pointer und Link Register AVR Cortex M0 also wir sollen die Register ausfüllen und der Code fängt an mit push {R2, R3, lr} Warum pusht man das Link Register auf den Stack was bringt das für vorteile wie verändert sich das Link Register und wann genau? Die subroutine ist doch dort gespeichert ? Wenn ich auf den Stack Pointer 3 Register lade geht dieser 3 Bytes runter richtig? Also wenn der Stack bei 0x20001000 ist 3 Byte runter geht ist er dann auf 0x20001400 Wie kann man das schnell Rechnen ? Ich bedanke mich bei euch für eure Hilfe.
:
Bearbeitet durch User
Angenommen, es geht um ARM (A32/T32)... Henrik G. schrieb: > Warum pusht man das Link Register auf den Stack Wenn man das LR in der Funktion verändert, z.B. weil man weitere Funktionen aufruft, kann man sonst nicht mehr zum Aufrufer zurück kehren. Henrik G. schrieb: > was > bringt das für vorteile Das Programm stürzt bei der Rückkehr nicht ab. Henrik G. schrieb: > wie verändert sich das Link Register Dadurch gar nicht. Henrik G. schrieb: > und wann > genau? Wenn man es explizit beschreibt z.B. mit "mov lr, ..." oder wenn man einen Sprung mit "bl" oder "blx" macht, bei manchen ARM-Prozessoren macht der Kern das bei Exceptions auch automatisch. Henrik G. schrieb: > Die subroutine ist doch dort gespeichert ? Nein, die Rücksprungadresse. Henrik G. schrieb: > Wenn ich auf den Stack Pointer 3 Register lade geht dieser 3 Bytes > runter richtig? Nein, 3 Words, d.h. 3*4 Bytes. Henrik G. schrieb: > Also wenn der Stack bei 0x20001000 ist 3 Byte runter geht ist er dann > auf > 0x20001400 Wie kommst du denn darauf? 0x20001000 - 3 ist 0x20000FFD. Ist aber wie gesagt falsch, der SP ist danach 0x20001000 - 12 = 0x20000FF4. Henrik G. schrieb: > Wie kann man das schnell Rechnen ? Mit einem Taschenrechner.
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.