Forum: Compiler & IDEs funktionen in Assembler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jörn (Gast)


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

von Joerg Wunsch (Gast)


Lesenswert?

Du kannst das nicht festlegen, der Compiler legt das fest:

http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/FAQ.html#faq_reg_usage

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. ;-)

von Jörn (Gast)


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

von Joerg Wunsch (Gast)


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]
  • [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.