Assembler: Parameter
Re: Assembler: Parameter
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
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.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.
Andere Frage: wäre es eig. möglich/ratsam, direkt auf dem %ebp Speicher aufzubauen, um einen getrennten Stack zu haben?
Re: Assembler: Parameter
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
Wie meinst du das?
Re: Assembler: Parameter
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.nufan hat geschrieben:Code: Alles auswählen
movl 8(%ebp), %ecx lea 12(%ebp), %esi
Re: Assembler: Parameter
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.
Code: Alles auswählen
subl $4, %ebp
movl $42, 0(%ebp)
Re: Assembler: Parameter
Wenn du mit "Variablen" deine Zwischenergebnisse meinst dann nein. Diese normal über pushl auf den Stack legen.Architekt hat geschrieben:Also auch meine Variablen auf %ebp anlegen?
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
Ja, meine Formulierungen diesbezüglich sind sicherlich ausbaufähig... ^^ Sorry.
Also meinst du das in etwa so?
Wieso ist eig. 0(%esp) an Stelle -8(%ebp)?
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
Re: Assembler: Parameter
Ja.Architekt hat geschrieben:Also meinst du das in etwa so?
Genau deswegen:Architekt hat geschrieben:Wieso ist eig. 0(%esp) an Stelle -8(%ebp)?
Architekt hat geschrieben:Code: Alles auswählen
movl %esp, %ebp subl $8, %esp
Re: Assembler: Parameter
Ah, also ist 0(%esp) das gleiche wie -OFFSET(%esp), wobei OFFSET der Speicher ist, den ich für den Stack reserviere?