Assemblierungs Variable

Gast #3487841
Lesenswert?

Hallo,
Habe folgende frage:

Ich möchte eine Variable im assembler einführen die nur für die 
assemblierung genutzt werden soll.
Ich möchte eine Liste von makros schreiben und am ende die Anzahl der 
vorherigen Makros in ein Register laden.

Das ganze soll automatisch gezaält werden, da ich die länge der Liste 
öfter variieren muss und nicht immer abzählen will wie viele Makros es 
sind.

die Makros könnten so aussehen:
1
.MACRO Macro1
2
   ;eigentliches macro
3
   k= k+1
4
.ENDM

und nach der Liste könnte stehen:
1
ldi r16,k

Rein logisch sollte das kein Problem sein, da k ja immer einen festen 
bestimmten wert hat.
Die Frage ist jetzt wie ich diese Variable anlege dass der assembler 
weis wie er sie nutzen soll?

Ich verwende Atmel Studio6.

Wäre super wenn das einer weis.

Grüße
Gast #3487849
Lesenswert?

Es kommt mir sinnlos vor die Anzahl von Makrodefinitionen zu zählen.
Was anderes wäre die Anzahl der Makroanwendungen.

Deine Frage aber ist so formuliert, als wenn Du die Definitionen zählen 
willst. Da stecke ich keine Zeit rein.
Gast #3487852
Lesenswert?

> Ich möchte eine Liste von makros schreiben)

Das habe ich gelesen und danach geschrieben:

>Deine Frage aber ist so formuliert, als wenn Du die Definitionen zählen
>willst.

Man schreibt ein Makro indem man eine Definition schreibt.
Aber gut. Du weisst es besser. Dann komm auch alleine klar.
#3488067
Lesenswert?

Na ja.
Doku lesen hilft. Im speziellen die List der Direktiven, die der 
Assembler versteht. .SET macht genau das.
1
.SET  k = 0
2

3
...
4

5
.SET  k = k + 1
6

7
....

1
SET - Set a symbol equal to an expression
2
The SET directive assigns a value to a label. This label can then be
3
used in later expressions. Unlike the .EQU directive, a label assigned
4
to a value by the SET directive can be changed (redefined) later in
5
the program.  
6

7
Syntax: 
8
.SET label = expression 
9

10
Example: 
11
.SET FOO = 0x114       ; set FOO to point to an SRAM location
12
       lds r0, FOO  ; load location into r0
13
.SET FOO = FOO + 1     ; increment (redefine) FOO. This would be illegal if using .EQU
14
       lds r1, FOO  ; load next location into r1

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