Assembler: Parameter

Pascal, Basic und andere nicht aufgelistete
nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Assembler: Parameter

Beitrag von nufan » So Nov 09, 2014 12:36 am

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.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: Assembler: Parameter

Beitrag von Architekt » So Nov 09, 2014 12:39 am

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?

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Assembler: Parameter

Beitrag von nufan » So Nov 09, 2014 12:54 am

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.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: Assembler: Parameter

Beitrag von Architekt » So Nov 09, 2014 1:16 am

Wie meinst du das?

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Assembler: Parameter

Beitrag von nufan » So Nov 09, 2014 1:22 am

Genau so wie hier:
nufan hat geschrieben:

Code: Alles auswählen

movl 8(%ebp), %ecx
lea 12(%ebp), %esi
%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.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: Assembler: Parameter

Beitrag von Architekt » So Nov 09, 2014 1:34 am

Also auch meine Variablen auf %ebp anlegen?

Code: Alles auswählen

subl $4, %ebp
movl $42, 0(%ebp)
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.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Assembler: Parameter

Beitrag von nufan » So Nov 09, 2014 1:41 am

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.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: Assembler: Parameter

Beitrag von Architekt » So Nov 09, 2014 10:47 am

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)?

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Assembler: Parameter

Beitrag von nufan » So Nov 09, 2014 12:16 pm

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:

Code: Alles auswählen

	movl	%esp, %ebp
	subl	$8, %esp

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: Assembler: Parameter

Beitrag von Architekt » So Nov 09, 2014 1:51 pm

Ah, also ist 0(%esp) das gleiche wie -OFFSET(%esp), wobei OFFSET der Speicher ist, den ich für den Stack reserviere?

Antworten