Forum: Compiler & IDEs GSS-Assembler: Liste Fehlermeldung


von Markus (Gast)


Lesenswert?

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 `('

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

@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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.