Forum: Mikrocontroller und Digitale Elektronik Macro funktioniert nicht, was mach ich falsch?


von flo (Gast)


Lesenswert?

Hallo


Ich möchte ein Macro aufrufen, dem ich sagen kann, wie oft es wiederholt 
werden muß. Bei mir sieht es so aus:
1
.macro schieben
2
3
ldi temp1, @0
4
mov rl_reg, temp1
5
ldi temp1, @1
6
push temp1
7
rcall same
8
rcall schub
9
pop temp1
10
dec temp1
11
brne pc-5
12
13
.endmacro
14
15
;und hier der Befehl:
16
17
schieben 0b00111000,5

Mit 0b00111000 sage ich, in welche Richtung geschoben wird, hat aber 
nichts mit meinem Problem zu tun.
Also ich lade den Wert 5 in temp1, pushe ihn, da ich temp1 in rcall same 
und rcall schub für andere Berechnungen brauche, danach pope ich temp1 
wieder und dekerementiere temp1. Wenn nicht null, dann springe 5 
Schritte zurück. Bei mir wiederholt sich dann aber die Routine nicht 
5mal sondern 50mal oder so.

Was hab ich da falsch gemacht. Wer kann mir da bitte weiterhelfen?

von Oops (Gast)


Lesenswert?

pushst Du denn den Wert in same und schub wieder nachdem Du ihn dort 
geholt hast?

Guck DIr mal den Stack nach Rückkehr aus den beiden subroutinen an.

Gruss
Oops

von flo (Gast)


Lesenswert?

Hallo Oops.

Bei same und schub benötige ich zwar temp1, muß aber nich pushen und 
popen.

Ehrlich gesagt habe ich es auch schon mit dem Register r23 probiert, das 
ich aber im ganzen Programm nicht brauche. Dadurch brauch ich r23 aauch 
nicht pushen und popen. Funktioniert leider auch nicht.

von Oops (Gast)


Lesenswert?

>Bei same und schub benötige ich zwar temp1, muß aber nich pushen und
popen.

Warum nicht?

Wie sah der Stack aus?

Gruss
Oops

von Joerg W. (joergwolfram)


Lesenswert?

ich nehme mal an, dass "brne pc-5" falsch ist und "brne pc-6" heissen 
muß.
Der neue PC wird aus der aktuellen Adresse (wurde beim Lesen des Befehls 
inkrementiert) und dem Offset berechnet. Zumindest ist das bei den 
meisten Prozessoren so.

Gruß Jörg

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.