mikrocontroller.net

Forum: Compiler & IDEs funktionen in Assembler


Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe mal eine Frage zu folgendem Quelltext:

;void lcd_gotoxy(u08 x, u08 y);
  .global lcd_gotoxy
  .func  lcd_gotoxy
lcd_gotoxy:
      mov    r24, r26
      rcall    lcd_wrcmd
      mov    r24, r25
      rcall    lcd_wrcmd
      ret
  .endfunc

So nun zur Frage: Woher weiß ich in welcher Variable z.b. der wert x
hinterlegt wird. Also hier sollte er in die Variable r24 kommen, wie
kann ich das festlegen?

MFG Jörn

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst das nicht festlegen, der Compiler legt das fest:

http://savannah.nongnu.org/download/avr-libc/doc/a...

Dementsprechend kommen Deine Parameter in r24 und r22 rein.  r24
kannst Du gleich weiterreichen (falls der erste Aufruf der für den
x-Wert sein soll), danach mov r22, r24.  Den letzten rcall und das
folgende ret kannst Du durch einen rjmp ersetzen -- wenn Du sowas
schon unbedingt in Assembler nageln mußt. ;-)

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal Danke für die schnelle Antwort, das habe ich soweit kapiert:

Also:  1. Wert der Funktion = r24
       2. Wert der Funktion = r22

Doch wo kommt der 3. oder eventuell auch 4. oder 5. rein??

MFG Jörn

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Ja, soweit es sich um 8-Bit-Werte handelt.)

Nun, das steht doch eigentlich auch dort: bis zu r8 hinab werden sie
in Registern übergeben, wobei für die Benutzung von MOVW jeweils
eine Ausrichtung auf 16 Bits erfolgt: also r20, r18, r16, ...

Parameter mit mehr als 16 Bits benötigen entsprechend mehr Register.

Noch mehr Parameter müssen aufwendig über den Stack übergeben werden,
gleichfalls `variadic function parameters', also variable Argument-
listen (wie bei printf()).

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.