Forum: Mikrocontroller und Digitale Elektronik Relativer Sprung ohne Sprungmarke


von Steffen Hausinger (Gast)


Lesenswert?

Hallo zusammen,

ich schreibe gerade für einen 8051 einen Assembler-Code um. Dabei möchte 
ich gerne einen relativen Sprungbefehl verwenden, wie bspw.
1
jb ACC.0, 0x02 ; Bei gesetztem LSB nächsten Befehl überspringen

Leider klappt das nicht, weil der Assembler (AX51 von Keil) unbedingt 
die Sprungweite selbst auflösen möchte! Er gibt mir deshalb die 
Fehlermeldung aus:
"ERROR #A51: TARGET OUT OF RANGE"

Zugegeben, normalerweise ist die automatische Auflösung der Sprungmarken 
sehr komfortabel. In meinem Fall muss ich sie aber manuell angeben.

Wie kann ich das erreichen? Gibt es einen Trick?

von Matthias L. (matze88)


Lesenswert?

Warum musst du das manuell tun?

Code Replikation?

Schau dir mal die Macros an, die können locale Sprungmarken verwenden.

Sonst sagt dir das Handbuch des Assemblers, dass du den "Location 
Counter" ($) benutzen kannst:
1
jb ACC.2, $+2

http://www.keil.com/support/man/docs/a51/a51_wp_locationcounter.htm

Edit:

Bitte denke daran, dass du ausreichend gut kommentierst, das eine 
Veränderung des folgenden Befehls eine Änderung der Sprungweite nach 
sich ziehen muss! Denke dabei auch an eventuelle "automatische" 
Änderung durch Macros oder so

von Steffen Hausinger (Gast)


Lesenswert?

Klasse, vielen Dank! Das löst genau mein Problem!

Matthias Larisch schrieb:
> Warum musst du das manuell tun?

Ich muss einen Parser schreiben, der bestimmte Befehle durch 
Befehlssequenzen ersetzt. Wenn die Befehle häufiger auftauchen, führt 
das natürlich automatisch zu Mehrfachdefinitionen der Sprungmarke.

Da die Befehlssequenzen sehr kurz und logisch geschlossen sind, ist der 
"$" Verweis nun aber genau das Richtige!

Nochmals danke für Deine Hilfe!
Steffen

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.