Seite 3 von 4
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 12:36 am
von nufan
Funktionen mit einer beliebigen Anzahl an Parametern sind eher unüblich. Entweder du setzt dir eine Obergrenze für die du auf deinem Stack speicher reservierst oder du allokierst dir den Speicher dynamisch auf dem Heap.
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 12:39 am
von Architekt
nufan hat geschrieben:Funktionen mit einer beliebigen Anzahl an Parametern sind eher unüblich. Entweder du setzt dir eine Obergrenze für die du auf deinem Stack speicher reservierst oder du allokierst dir den Speicher dynamisch auf dem Heap.
Klar, aber sobald du > 4 Parameter entgegen nimmst, hast du ein Problem will ich damit sagen. Ich denke du hast mein Problem erkannt, oder nicht? Bei meinem derzeitigen Design habe ich ein Problem.
Andere Frage: wäre es eig. möglich/ratsam, direkt auf dem %ebp Speicher aufzubauen, um einen getrennten Stack zu haben?
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 12:54 am
von nufan
Ich frage mich nur grade wieso du deine Parameter dann nicht gleich relativ zu %ebp referenzierst? Das bleibt ja innerhalb deiner Funktion konstant. Dann kannst du die Zwischenergebnis einfach auf den Stack pushen.
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 1:16 am
von Architekt
Wie meinst du das?
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 1:22 am
von nufan
Genau so wie hier:
%ebp sollte innerhalb deiner Funktion ein konstanter Punkt sein. Von dort kannst du deine deine Werte über relative Offsets verwenden. Wenn du was auf den Stack legst oder davon entfernst, bleibt %ebp im Gegensatz zu %esp aber unverändert.
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 1:34 am
von Architekt
Also auch meine Variablen auf %ebp anlegen?
Ja, wie es aussieht klappt das. Aber ist das vergleichbar mit dem Stack von %esp? Und wieso benutzt niemand sonst %ebp? Ich sehe bei Diskussionen _immer_, dass %esp benutzt wird.
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 1:41 am
von nufan
Architekt hat geschrieben:Also auch meine Variablen auf %ebp anlegen?
Wenn du mit "Variablen" deine Zwischenergebnisse meinst dann nein. Diese normal über pushl auf den Stack legen.
Aber deine Werte die du ja irgendwo am Beginn definierst kannst du ja genauso gut über %ebp referenzieren wie über %esp. Deine Formulierung "Variablen auf %ebp anlegen" finde ich auch sehr unpassend. Du schreibst nur Werte in den Speicher, relativ zu einer Adresse in %ebp.
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 10:47 am
von Architekt
Ja, meine Formulierungen diesbezüglich sind sicherlich ausbaufähig... ^^ Sorry.
Also meinst du das in etwa so?
Code: Alles auswählen
.text
.globl _alpha_main
_alpha_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl $42, 0(%esp)
pushl -8(%ebp)
call _println_int
addl $4, %esp
addl $8, %esp
popl %ebp
ret
Wieso ist eig. 0(%esp) an Stelle -8(%ebp)?
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 12:16 pm
von nufan
Architekt hat geschrieben:Also meinst du das in etwa so?
Ja.
Architekt hat geschrieben:Wieso ist eig. 0(%esp) an Stelle -8(%ebp)?
Genau deswegen:
Architekt hat geschrieben:
Re: Assembler: Parameter
Verfasst: So Nov 09, 2014 1:51 pm
von Architekt
Ah, also ist 0(%esp) das gleiche wie -OFFSET(%esp), wobei OFFSET der Speicher ist, den ich für den Stack reserviere?