Relativer Sprung ohne Sprungmarke

Gast #2469888
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?
#2469905
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
Gast #2469983
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

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