Forum: Mikrocontroller und Digitale Elektronik Kennt sich hier noch jemand mit dem GNU Assembler aus?


von Jan (Gast)


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

von Jonas B. (jibi)


Lesenswert?

>Hat da jemand eine Idee?

Dateiname als Prefix in Variablenname verwenden?

also file0_i, file2_i... usw.

von Peter D. (peda)


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.

von J. V. (janvi)


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

von Thomas R. (analogfreak)


Lesenswert?

Vielleicht bringt die “.section” Assembler-Anweisung die gewünschte 
Funktionalität

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.