AVR assemblerfråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Mr M
Inlägg: 165
Blev medlem: 20 januari 2006, 21:35:14

AVR assemblerfråga

Inlägg av Mr M »

Nu har jag sysslar med C-programmering väldigt länge. Men är sugen på att koda lite i assembler också.

Funderar på en sak om labels. Måste man hela tiden komma på nya labels vid hopp och loopar? Eller kan man ange lokala labels också?

Jag hade en assemblator till commodore 64 en gång där man kunde ange lokala labels.

Typ så här

Kod: Markera allt

LOOP_FUNC1:
    LDX #$0A
.loop
    DEX
    BNE .loop
    RTS

LOOP_FUNC2:
    LDX #$1F
.loop
    DEX
    BNE .loop
    RTS
Punkten anger att det är en lokal label. Så att samma label-namn kan användas i två olika funktioner.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Nu kan jag inte just AVR, men jag har aldrig sett lokala lablar på det sättet. Hus skulle det fungera? I assembler har du ju inga funktioner och därmed heller inget sätt för assemblern att avgöra när en label ska gälla och inte. Isåfall måste man ha nya assemblerdirektiv för att ange start och slut på funktion och liknande. Skulle bli väldigt kladdigt.

Dom flesta assemblerlistor genererade av C-kompilatorer har istället massor av likartade labelnamn, men som ändå skiljer på någon siffra eller så.
Mr M
Inlägg: 165
Blev medlem: 20 januari 2006, 21:35:14

Inlägg av Mr M »

Jag tror de lokala symbolerna knyter till den senaste symbolen

Så att:

.loop

blir egentligen

LOOP_FUNC1loop

och

LOOP_FUNC2loop
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag gör alltid så att jag namnger "lokala" labels med en förkortning av funktionen och lägger till "_xx". Ett exempel:
Bin2Dec: ; Converts binary to printable decimal
bla bla bla
B2D_01: ; Local label
bla bla bla
goto B2D_01

Då kan man "alltid" säga var en loop hör till, jag försöker oftast att ge loopen ett underfunktionsnamn om jag kan för tydlighetens skull.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag vet inte hur det är i AVR-asm, men i PIC-asm kan macron ha
lokala labels. Olika källkodsfiler (i samma projekt) har dessutom
naturligtsvis helt skillda name-spaces...
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

PIC-asm kan macron ha lokala labels

Japp. Det var lite det jag syftade på när jag skrev "på det sättet". Ett makro är ju en väl innesluten bit kod, i motsats till en subrutin. Att basera en lokal variabel bara på "senaste symbolen" låter lite farligt. Skulle vara lätt att göra fel, tycker jag. Exempelvis vid dubbelloopar eller liknande.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

Min gamla Atari ST assembler hade också lokala
variabler.
De funkade så att de relaterade till närmsta övre Globala label
Så det uppstod inte direkt några "farliga" situationer.

Min_rutin:

\Loop1:

\Loop2:

..osv

Min_andra_rutin:
\Loop1:

\Loop2:

Det bör väl vara så det funkar på PIC.
Är med högt på önskelistan för AVR Studio.

Swech
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Det bör väl vara så det funkar på PIC.

Nja, inte *på* PIC, en PIC har inte en aning om vad en label är. :-)

Men OK, i PIC-assembler då...

Om "Min_rutin" och "Min_andra_rutin" är i samma .ASM fil, så fungerar det inte.
Varje komplett ASM fil utgör ett "name-space". (Det inkluderar naturligtsavis
då man gör #include av en fil i en annan.)

Macron är ett undantag, det går att koda i macron så att labels blir lokala
till macrot, även om det används på flera ställen i samma ASM fil.

Olika ASM filer i samma projekt (som ju assembleras separat till olika
OBJ filer) har egna lokala name-spaces, som kan överridas med
GLOBAL coh EXTERN (för att "exportera" resp "importera" symboler
mellan filerna)...
Skriv svar