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
der stackpointer ist i.d.r. ein eigenes register.
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
supi, vielen Dank für die Erklärung! Grüße lupi
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
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
Was genau bewirke ich mit dem Befehl MOV SP, #7Fh ?
Lade den Stackpointer unmittlebar mit der Konstanten 7Fh.
Er zeigt nun also auf die Adresse 7Fh? Wenn ich jetzt etwas PUSHe, zeigt er dann auf 7Eh? Auf welche Adresse zeigt er normalerweise?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.