Konstante und Makro (ASM)

OP #1847369
Lesenswert?

Hallo,

in Asm habe ich eine Kontante festgelegt mit

.equ Zeile1 = $80

Wenn ich diese Konstante in einem Macro aufrufe, z.B.
  ldi temp1, Zeile1
steht dann in temp1 ein anderer Wert als $80. (Zufälliger Wert?)

Wenn ich die Konstante in einem Unterprogramm aufrufe, ist der Wert 
korrekt.



Mache ich da mit dem Makro etwas falsch?


Vielen Dank im Voraus
Gast #1847402
Lesenswert?

Hi

>Wenn ich diese Konstante in einem Macro aufrufe, z.B.
>  ldi temp1, Zeile1
>steht dann in temp1 ein anderer Wert als $80. (Zufälliger Wert?)

Schnell mal getestet: Funktioniert bei mir problemlos.

MfG Spess
OP #1847682
Lesenswert?

Hallo,

habe mittlerweile eine neue Version des AVR-Studios installiert, mit dem 
selben Ergebnis. :(

In meinem Makro steht derzeit nur

.macro locate
  push temp1
  ldi temp1, Zeile1
  rcall lcd_number    ;Wert von Zeile1 im LCD anzeigen
  pop temp1
.endmacro

Angezeigt wird im LCD der Wert 73.

Wenn ich nun push und pop aus dem Makro entferne, zeigt das LCD den Wert 
72 (?)

Was kann das für ein Wert sein?
#1847715
Lesenswert?

Axel Hüser schrieb:
> push temp1
>   ldi temp1, Zeile1
>   rcall lcd_number    ;Wert von Zeile1 im LCD anzeigen
>   pop temp1
[...]
> Angezeigt wird im LCD der Wert 73.
>
> Wenn ich nun push und pop aus dem Makro entferne, zeigt das LCD den Wert
> 72 (?)

Daraus kannst Du getrost schließen, dass das Unterprogramm lcd_number 
nicht das tut, was Du erwartest.  Würde es tatsächlich den Inhalt von 
Register temp1 anzeigen, könnte sich die Anzeige nicht ändern, weil Du 
irgendwas anderes vorher und nachher machst.  Also den gesamten Code, 
bitte.
OP #1847771
Lesenswert?

Hallo,

vielen Dank für Eure Mühe. Ich bin auch nicht beratungsresistent und 
werde mein lcd_number nochmals prüfen. Aber mit dem arbeite ich schon 
längere Zeit und es war immer einwandfrei.

Nochmal:

Im Hauptprogramm steht nur:
ldi temp1, Zeile1
rcall lcd_number

...und da werden die 128 ($80) im LCD richtig angezeigt. Also sollte 
lcd_number doch auch korrekt sein.

Und wenn ich im Hauptprogramm nur den Macro aufrufe mit

locate

...dann zeigt das LCD den Wert 72 an (Im Makro stehen dann auch nur 
diese 2 Zeilen drin, wie vorher im Hauptprogramm).


An welcher Stelle im Programm sollte eigentlich der Verweis auf die 
Macrodatei stehen?

.include "macros.inc" steht bei mir ganz oben im Programm direkt unter
.include "m8def.inc"
Gast #1847785
Lesenswert?

Hi

>Glaskugelmodus an:
>das Macro steht über der Konstantendefinition.
>Glaskugel aus:
>Wenn du hier wirklich Hife erwartest, poste deinen Code!

Glaskugelmodus nochmal aus: Funktioniert auch in diesem Fall.

MfG Spess
OP #1847962
Lesenswert?

Hallo Peter,

das war der entscheidende Hinweis von Dir.

In meinem Macro stand noch eine Sprungmarke Zeile1:

Darunter standen zwar keine Befehle, ist aber der gleiche Name, wie die 
Konstante.

Ein dummer Fehler von mir!!!

Ich werde jetzt alle meine Sprungmarken mit "_" (_Zeile1:) beginnen, 
damit mir das nicht wieder passiert.



Danke an alle!

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