mikrocontroller.net

Forum: Compiler & IDEs ASM Funktion, welche Register zwischenspeichern?


Autor: Yaro G. (yaro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich bin gerade dabei, eine ASM Funktion zu schreiben und 
sie in meinen C-Code einzubinden.
Dabei bin ich im Zusammenhang mit der Parameterübergabe auf einen 
Widerspruch gestoßen, den ich nciht recht verstehe:
http://www.gnu.org/savannah-checkouts/non-gnu/avr-...
hier steht nämlich:
Function call conventions:
Arguments - allocated left to right, r25 to r8. All arguments are 
aligned to start in even-numbered registers (odd-sized arguments, 
including char, have one free register above them). This allows making 
better use of the movw instruction on the enhanced core.

und...

Call-saved registers (r2-r17, r28-r29):
May be allocated by gcc for local data. Calling C subroutines leaves 
them unchanged. Assembler subroutines are responsible for saving and 
restoring these registers, if changed. r29:r28 (Y pointer) is used as a 
frame pointer (points to local data on stack) if necessary. The 
requirement for the callee to save/preserve the contents of these 
registers even applies in situations where the compiler assigns them for 
argument passing.

Wenn die Register r8 - r25 durch Parameterübergabe an eine Funktion 
geändert wurden, dann kann die Funktion die alten Werte doch überhaupt 
nicht zwischenspeichern! Soll man die Register dann trotzdem 
zwischenspeichern?
Wie soll man das verstehen?

Gruß, Yaro

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist doch ganz einfach:
Wenn deine ASM-Funktion in den Registern r8-25 Parameter bekommt, dann 
muss am Ende deiner Funktion in r8-17 das Gleiche stehen wie zu Beginn, 
r18-25 dürfen verändert sein.

Autor: Yaro G. (yaro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, danke schön

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.