Mit der .byte Anweisung teile die High- und Lowbytes von
Programmadressen in zwei Listen auf. Das mag der Assembler nicht und
gibt zwei Fehlermeldungen aus. Was ist falsch an der .byte Anweisung?
.byte hi8(Element1), hi8(Element2)
.byte Lo8(Element1), Lo8(Element2)
grafik.S:251: Error: illegal relocation size: 1
grafik.S:251: Error: junk at end of line, first unrecognized character
is `('
Markus schrieb: > Mit der .byte Anweisung teile die High- und Lowbytes von > Programmadressen in zwei Listen auf. Das mag der Assembler nicht und > gibt zwei Fehlermeldungen aus. Was ist falsch an der .byte Anweisung? Dass du nicht einfach so eine Adresse aus einem anderen Bereich in high- und low-Byte aufteilen kannst. Die wirkliche Adresse wird ja erst vom Linker eingetragen, daher muss es im Objektformat für dein Ansinnen einen relocation record geben. Ich hab' nur gerade keine Zeit rauszusuchen, wie man das richtig aufschreiben muss. Schreib doch einfach mal etwas mehr von deinem Ansinnen auf derweil.
@Jörg Vielen Dank für deine Antwort. Das Programm habe ich auf den AVR-Assembler (AVR Studio 4) umgestellt, die Pseudo-OP angepasst und siehe - es funktioniert.
Du kannst die Adresse eines Symbols laden mit
1 | x: .word y |
Das entspricht in C einem
1 | extern char y; |
2 | void *x = &y; |
Falls es eine Word-Adresse sein soll, geht
1 | .word pm(y) |
2 | .word gs(y) |
Der Unterschied zeischen pm und gs ist, daß gs mit Relaxing und für Devices >= 256k Flash nicht die Word-Adresse von y hinterlegt, sondern die Adresse zu einem eigens angelegten Jump-Pad (auch "Trampolin" genannt [1] hinterlegt, das einen absoluten Sprung zu y enthält. [1] Diese Trampolins nicht mit Trampolins in GCC verwechseln! avr-gcc kennt nämlich keine Trampolins und selbst wenn wären die was komplett anderes!
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.