FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Technische Informatik

Der Befehl "SAVE" und das Thema "Stack"...

Der Befehl "SAVE" und das Thema "Stack"... 2002-11-03 23:10
Fred
Finde ich ziemlich verwirrend oder zumindest nicht direkt einleuchtend. Was heisst z.B. die -104 im Beispiel mit den Quadratzahlen? Hier zwei nette Seiten, ich hoffe dort finde ich die Antwort [img]http://www.sternenvolk.de/symb/7.gif[/img]

http://www.sics.se/~psm/sparcstack.html
http://www.cs.indiana.edu/~crcarter/SPARC/save.html



Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-03 23:35
Fred
Was heisst z.B. die -104 im Beispiel mit den Quadratzahlen?
Also das Prinzip SAVE/RESTORE ist im Grunde genommen klar, aber ich verstehe nicht, warum wir 104 Bytes auf dem Stack reservieren und nicht nur die minimal benoetigten 64. Wozu die zusaetzlichen 40 Bytes?



Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-03 23:52
TriPhoenix
Redest du shconwieder von Übungszetteln die fast keiner hat? [img]http://www.sternenvolk.de/symb/28.gif[/img]

Wenns net allzulang ist poste doch mal das Beispiel, vielelicht kann dir dann wer helfen [img]http://www.sternenvolk.de/symb/22.gif[/img]

Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-04 13:43
Fred
Redest du schon wieder von Übungszetteln die fast keiner hat?
Na ich mein das Uebungsblatt 2, dazu gibt's doch auch nen Post. Hatte nen neuen Thread gemacht, weil ich erst nur auf die sehr guten Links aufmerksam machen wollte, aber damit hat sich meine Frage leider nicht geklaert [img]http://www.sternenvolk.de/symb/9.gif[/img]


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-04 17:18
TriPhoenix
Redest du schon wieder von Übungszetteln die fast keiner hat?
Na ich mein das Uebungsblatt 2, dazu gibt's doch auch nen Post. Hatte nen neuen Thread gemacht, weil ich erst nur auf die sehr guten Links aufmerksam machen wollte, aber damit hat sich meine Frage leider nicht geklaert [img]http://www.sternenvolk.de/symb/9.gif[/img]
Ach ja…dann guck ich mir das doch gleihc mal an (mit meinem eigenen Blatt :)

Mein erster Rateversuch: irgendwelche Internen geschichten, wenn man nämlich mitm gcc kompiliert oder den auch ncoh optimieren lässt, zieht er jeweils andere Werte vom Stack ab


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-04 18:10
Fred
Redest du schon wieder von Übungszetteln die fast keiner hat?
Na ich mein das Uebungsblatt 2, dazu gibt's doch auch nen Post. Hatte nen neuen Thread gemacht, weil ich erst nur auf die sehr guten Links aufmerksam machen wollte, aber damit hat sich meine Frage leider nicht geklaert [img]http://www.sternenvolk.de/symb/9.gif[/img]
Ach ja…dann guck ich mir das doch gleihc mal an (mit meinem eigenen Blatt :)
Naja aufm Blatt steht ja nicht viel, nur der C Code. Hast Du ne Moeglichkeit, den auf intel Rechnern in SPARC Assembler zu uebersetzten, Du meintest da doch mal was von wegen Emu?


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-04 19:18
TriPhoenix
Naja aufm Blatt steht ja nicht viel, nur der C Code. Hast Du ne Moeglichkeit, den auf intel Rechnern in SPARC Assembler zu uebersetzten, Du meintest da doch mal was von wegen Emu?

Der emu emuliert das ganze halt nur, kompilieren tu ich atm auch noch auffer sparc

Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-04 22:09
TriPhoenix
Finde ich ziemlich verwirrend oder zumindest nicht direkt einleuchtend. Was heisst z.B. die -104 im Beispiel mit den Quadratzahlen? Hier zwei nette Seiten, ich hoffe dort finde ich die Antwort [img]http://www.sternenvolk.de/symb/7.gif[/img]

Also bisher hab ich keinen Grund gefunden für Stack-Verschiebungen :> Scheint halt ein Mystery-Grund zu sein :)

.section ".rodata" quadratstring: .ascii "Quadrat: %d\n\0" .section ".text" .align 8 .global main unter: save %sp, -64, %sp mov 5, %l0 sethi %hi(quadratstring), %l1 or %l1, %lo(quadratstring), %l1 .schleife: smul %l0, %l0, %o1 call printf mov %l1, %o0 sub %l0, 1, %l0 cmp %l0, 0 bg .schleife nop .fertig: jmp %i7+8 restore main: save %sp, -64, %sp call unter nop jmp %i7+8 restore
Man kann sogar noch das save in main weglassen und es läuft,
nur das restore am ende darf komischerweise nicht weg, auch
wenn das save fehlt [img]http://www.sternenvolk.de/symb/28.gif[/img]

(spuddliges CODE-Tag)

Nachtrag: ist shcon irgendwo unsicher fällt mir jetzt auf, weil die Unterroutine dasselbe Registerfenster benutzt wie main (wa snun hier nichts ausmacht, soll man aber denke ich nicht unbedingt machen). Trotz allem reihct auch ein save %sp, -64, %sp


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-09 15:21
Fred
Nachtrag: ist shcon irgendwo unsicher fällt mir jetzt auf, weil die Unterroutine dasselbe Registerfenster benutzt wie main
Nee, es werden doch nur lokale Register in unter benutzt.


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-09 16:07
TriPhoenix
Nachtrag: ist shcon irgendwo unsicher fällt mir jetzt auf, weil die Unterroutine dasselbe Registerfenster benutzt wie main
Nee, es werden doch nur lokale Register in unter benutzt.

Trotzdem, jeder Call speichert eine Rücksprungaddresse in %i7, d.h. eine eventuelle alte Rücksprungadresse wird geplättet.

Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-09 17:27
Fred
jeder Call speichert eine Rücksprungaddresse in %i7, d.h. eine eventuelle alte Rücksprungadresse wird geplättet.
Nein, nach jedem Call wird ja das Registerfenster durch "save" verschoben und vor jedem jmp %i7+8 per restore wieder hergestellt. Da kann nix verloren gehen in Unterprogrammen, jedes hat sein eigenes Registerfenster und damit auch sein eigenes %i7.


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-09 18:39
TriPhoenix
jeder Call speichert eine Rücksprungaddresse in %i7, d.h. eine eventuelle alte Rücksprungadresse wird geplättet.
Nein, nach jedem Call wird ja das Registerfenster durch "save" verschoben und vor jedem jmp %i7+8 per restore wieder hergestellt. Da kann nix verloren gehen in Unterprogrammen, jedes hat sein eigenes Registerfenster und damit auch sein eigenes %i7.

Nein, ein call enthält keinen impliziten save, aus dem SPARC-Manual:

Beschreibung von call:
The CALL instruction causes an unconditional, delayed, PC-relative control transfer to address “PC + (4 ´ disp30)”. Since the word displacement (disp30) field is 30 bits wide, the target address can be arbitrarily distant. The PC-relative displacement is formed by appending two low-order zeros to the instruction’s 30-bit word displacement field.
The CALL instruction also writes the value of PC, which contains the address of the CALL, into r[img]http://www.sternenvolk.de/symb/15.gif[/img] (out register 7).

(Ich korrigiere mich, call speichert in %o7, was wenn die Subroutine sich ein neues Registerfenster holt dann ja %i7 ist)

Seite 53:
Programming Note:
A procedure is invoked by executing a CALL (or a JMPL) instruction. If the procedure requires a register window, it executes a SAVE instruction. A routine that has not allocated a register window of its own (possibly a ‘‘leaf’’ procedure) should not write on any windowed registers except out
registers 0…6.

Ergo: wenn eine Prozedur ein Registerfenster BRAUCHT, soll sie ein save ausführen (und das steht auch immer im generierten Quelltext drin), ansonsten nicht, dann aber nur die Register %o0 bis %o6 benutzen.

Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-10 00:40
Fred
Nein, ein call enthält keinen impliziten save
Klar, aber deswegen ist bei unserer Aufgabe der erste Befehl in "main" und "unter" ja ein save.


Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-10 01:21
TriPhoenix
Nein, ein call enthält keinen impliziten save
Klar, aber deswegen ist bei unserer Aufgabe der erste Befehl in "main" und "unter" ja ein save.

Ja, aber meine aussage war ja auch dass rücksprungaddressen geplättet werden, wenn man das save weglässt [img]http://www.sternenvolk.de/symb/28.gif[/img]

Re: Der Befehl "SAVE" und das Thema "Stack"... 2002-11-10 12:27
Fred
Nein, ein call enthält keinen impliziten save
Klar, aber deswegen ist bei unserer Aufgabe der erste Befehl in "main" und "unter" ja ein save.

Ja, aber meine aussage war ja auch dass rücksprungaddressen geplättet werden, wenn man das save weglässt [img]http://www.sternenvolk.de/symb/28.gif[/img]
Ach so! Wer lesen kann, ist klar im Vorteil…