Forum: PC-Programmierung Assemblierungs Variable


von august (Gast)


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

von Oi (Gast)


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.

von august (Gast)


Lesenswert?

Oi schrieb:
> Was anderes wäre die Anzahl der Makroanwendungen.

genau das meine ich.

(august schrieb:
> Ich möchte eine Liste von makros schreiben)

von Oi (Gast)


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.

von august (Gast)


Lesenswert?

Falls es andere Leute gibt die verstehen was ich meine wäre ich für 
sachdienliche Kommentare dankbar.

Grüße

von Karl H. (kbuchegg)


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

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.