Gast
#446596
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
|
Anzeige
|
Stackpointer? Im RAM-Bereich oder eigenes Register
Gast
#446596
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
Gast
#446606
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
Gast
#446627
supi, vielen Dank für die Erklärung! Grüße lupi
Gast
#446632
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 ?
Gast
#578924
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?
Gast
#578932
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 Antwort schreiben |
Anzeige
|