Forum: Mikrocontroller und Digitale Elektronik Stackpointer? Im RAM-Bereich oder eigenes Register


von lupi (Gast)


Lesenswert?

Guten Abend,

ich würde gerne mal wissen, ob der Stackpointer ein im RAM definierter 
Bereich ist oder ob es ein eigenes Register ist? (Nicht unbedingt 
Controllerabhängig sondern eher generell)

Grüße

lupi

von TheMason (Gast)


Lesenswert?

der stackpointer ist i.d.r. ein eigenes register.

von Franko P. (sgssn)


Lesenswert?

Da gibts 2 Begriffe die man nicht verwechseln darf: Der "Stackpointer" 
ist ein Register, das auf aktuelle Adresse oder Position des "Stack" 
zeigt. der Stack ist Teil des Speichers.

Gerhard

von lupi (Gast)


Lesenswert?

supi, vielen Dank für die Erklärung!

Grüße

lupi

von Walter (Gast)


Lesenswert?

Meistens ist der Stack Teil des Speichers, aber nicht immer:
es gibt auch Controller die für den Stack ein paar Extraregister haben. 
Dann sind z.B. nur 3 Unterprogrammaufrufe möglich.

Grüße
Walter

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Lesenswert?

Der Stackpointer ist ein wichtiges Arbeitsregister, auf das ständig 
zugegriffen werden muß. Da es sich nur um ein einziges Wort handelt, 
kann man das problemlos im CPU-Bereich unterbringen. Eine Auslagerung in 
den Arbeitsspeicher würde wegen der zusätzlichen Zugriffe auf das RAM 
die CPU unnötig ausbremsen. Der Stack selbst befindet sich dagegen 
meistens im RAM. Bei PIC-Controllern besteht z.B. auch der Stack aus 
eigenen Registern.

Jörg

von Maxim (maxim) Benutzerseite


Lesenswert?

Was genau bewirke ich mit dem Befehl

MOV SP, #7Fh

?

von ich (Gast)


Lesenswert?

Lade den Stackpointer unmittlebar mit der Konstanten 7Fh.

von Maxim (maxim) Benutzerseite


Lesenswert?

Er zeigt nun also auf die Adresse 7Fh? Wenn ich jetzt etwas PUSHe, zeigt 
er dann auf 7Eh?

Auf welche Adresse zeigt er normalerweise?

von Michael U. (Gast)


Lesenswert?

Hallo,

was meinst Du mit "normalerweise"?

Wenn es einen Default-Wert gibt, den er nach Reset enthält, steht es im 
Datenblatt des konkreten Prozessors.

Wenn es eine 8Bit-CPU ist und Du ein 8Bit-Register gePUSHd hast, sollte 
er auf 7Eh zeigen.

Das konkrete Verhalten bei den stackbeeinflussenden Befehlen (PUSH, POP, 
CALL, RET, RETI oder wie sie jeweils heißen), verrät auch das 
Datenblatt.

Üblich ist post-decrement/increment, also erst den Wert in die Adresse 
speichern, auf die der SP zeigt, dann diesen verringern und erst den 
Wert von Stack holen und dann den SP erhöhen.
Es gab auch CPUS, die das anders gemacht haben (6502/6510 z.B.).

Gruß aus Berlin
Michael

von Peter D. (peda)


Lesenswert?

Maxim W. wrote:
> Was genau bewirke ich mit dem Befehl
>
> MOV SP, #7Fh

Wenn man jetzt noch errät, welchen Core Du im Kopf hast.

Ich rate mal, es ist ein 8052-Core, denn beim 8051 ist bei 7F ja schon 
Schluß.

SP = 7F bedeutet beim 8052, daß von 80..FF der Stack liegt.

In der Regel setzt man aber den Stack einfach unmittelbar hinter die 
letzte Variablenadresse.


Peter

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.