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
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. ;-)
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
(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()).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.