funktionen in Assembler

Gast #74716
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
Gast #74717
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. ;-)
Gast #74718
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
Gast #74719
(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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.