Parameter in Assemler

Gast #3470342
Lesenswert?

Hallo Jungs,

ich arbeite gerade das Assembler Tutorial durch und programmiere meine 
Controller eigentlich in der Sprache C. Ich frage mich gerade, ob es in 
Assembler eine geschickte Vorgehensweise gibt, wie man Werte an 
Funktionen übergeben und zurückgeben kann. Im Moment nutze ich dazu die 
Register r16-r18. Gerade bei verschachtelten Funktionsaufrufen sind mir 
nun durch Unachtsamkeit einige Fehler passiert, da ich die Register 
überschrieben habe. Ich hoffe, ich habe die Problematik halbwegs 
vernünftig erklärt. Hat jemand von euch eine geschickte Vorgehensweise 
parat ?


Viele Grüße
#3470418
Lesenswert?

Es kommt drauf an, was Dein Assembler und Dein Controller "versteht".
Neben einem bereits erwähntem Stapel kommen Adressen im Ram in Frage, 
die den Routinen als Parametern übergeben werden oder festgelegt sind. 
Man muss z.B. drauf achten, das die Adressen nicht ins Flash oder EEProm 
zeigen.
Wenn genug Speicher da ist, kann man damit beschleunigen.
Ohne Stapel eine Rekursion zu realisieren, ist etwas schwierig.
Man müsste dann schon die Anzahl Rekursionen erfassen, also 
Adresse1.Rekursion, Adresse2.Rekursion, Stand aktualisieren usw..
Man kann ausrechnen, wann sich was lohnt. Man muss ausrechnen, ob genug 
Speicher da ist.
Was sich nicht lohnt(wenn man auswählen kann), das ist, viele Daten auf 
den Stack, mit Rekursion ist das noch ungünstiger. Man gibt dann Zeiger 
von Blocks im Ram auf den Stack oder in ein Register.
Bei Rekursionen gibt es Besonderheiten.
Variable Daten können für jeden Aufruf individuell sein, oder es gibt 
die Daten für eine Funktion/ein Unterprogramm oder für ein Programm nur 
einmal.
Auch kann man kleinere Funktionen ins Ram kopieren, wo sie dann mit 
eigenen Daten arbeiten.
Vergleich C-Assembler:
Beim 80X86 erlaubt Assembler oft eine Verdoppelung der 
Arbeitsgeschwindigkeit von C Programmen. Das ist auch davon abhängig, 
wieviele Register zur Verfügung stehen.

MfG und frohes neues

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren