Kennt sich hier noch jemand mit dem GNU Assembler aus?

Gast #6703280
Lesenswert?

Hi!

Ich nutze den gas für meine AVR Projekte. Viele Module füge ich via 
#include zusammen, da die in verschiedenen Dateien aufgeteilt sind. Mein 
Problem ist, dass Labels von einer Datei nicht out of scope gehen. 
Letztens z.B. wiedermal:

Datei 1 enthält:
1
i = 16
2
ldi i,100
16 ist hier der Register 16, welcher als Zähler in einem Loop verwendet 
wird.

Datei 2 enthält auch einen Loop, der auf i zugreift, dummerweise habe 
ich aber vergessen, in Datei 2 i zu definieren. Einen Fehler gab es 
nicht, da i ja in Datei 1 definiert wurde.

Wenn man jetzt in Datei 1 i auf z.B. 17 ändert, wird Datei 2 nicht mehr 
funktionieren.

Ich möchte gerne lokale Labels haben, die nur in der jeweiligen Datei 
aktiv sind. Sowas wie .local i = 16, wenns das geben würde. (Gibt zwar 
ein .local, aber das macht was anderes.)

Hat da jemand eine Idee? Ausser halt die üblichen Trollsprüche wie 
"Nutze halt eine Hochsprache".
#6703373
Lesenswert?

Jan schrieb:
> Viele Module füge ich via
> #include zusammen, da die in verschiedenen Dateien aufgeteilt sind.

Eleganter wäre es, die Module einzeln zu assemblieren und dann zusammen 
zu linken.
Man kann aber auch den Präprozessor benutzen und damit #define, #undef.
Dazu muß die Datei *.S heißen. *.s wird ohne Präprozessor assembliert.
#6703374
Lesenswert?

GNU as kann doch seperat mit GNU ld gelinkt werden. Mit AVR selbst kenne 
ich mich nicht aus, aber das AVR Studio konnte das (früher) gerade 
nicht. Damit bist du die includes los und Sprungmarken sind File lokal 
und werden erst vom Linker auf extern geprüft

Using as von Dean Elsner, Jay Fenlason & friends ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren