RJMP relativ eingeben

Gast #18040
Lesenswert?

Hallo

meine Frage bezieht sich auf Assembler für AVR BasicLine

Gibt es die Möglichkeit die relative Sprungadresse im Befehl <rjmp> 
anstatt mit einem Label "numerisch" einzugeben ?

Bsp:  IST      SOLL

  nop      nop
  rjmp Label1     rjmp +0x0002 ;springe zwei Zeilen
  nop      nop
  nop      nop
Label1: ldi r16,0    ldi r16,0
  nop      nop

Im List-File wird die relative Sprungadrese über das Label ja in der 
gezeigten Form umgewandelt, müßte doch auch direkt gehen.
(Beim PIC16F84 geht es zumindest ;-) )

Vielen Dank fürHilfe

gruss
markus
Gast #18048
Lesenswert?

Hallo
brauchte es für ein Macro.

>snip<
.macro ist_x_groesser_neu_y ;x=PortX y=rY
cpi r19,@0+1
brsh PC + 3 ; an dieser Stelle kann ich nicht mit Label arbeiten
hierauf bezog sich meine Anfrage

ldi r18,@1
rjmp start
.endmacro

>snip<

in r19,PINX

ist_x_groesser_neu_y 10,12
;ist r19<=10 schreibe 12 in r18
;ist r19 > 10 gehe zum nächsten Macro

ist_x_groesser_neu_y 25,24
ist_x_groesser_neu_y 156,77
ist_x_groesser_neu_y 245,65
usw...

Solange ich die Reihenfolge einhalte (erster Parameter aufsteigend) und 
nichts zwischen die Macro-Aufrufe reinschreibe
dürfte es keine Probleme geben.

Arbeite erst seit 2 Tagen mit Assembler, davor AVRs nur mit BASCOM 
programmiert.
Meine Lösung ist deshalb bestimmt recht umständlich, aber es läuft.


gruss
markus
Gast #18049
Lesenswert?

ja, das ist ein Argument, daß ich verstehen kann.  Ich habe aber schon 
ewig nichts mehr mit ASM gemacht, wahrscheinlich gibts dafür eine 
elegantere Lösung. Beim 8051-Assembler (ist das lange her :-)), konnte 
man Makro-Sprungmarken mit einem %-Zeichen kennzeichnen, der Assembler 
hat dann bei jedem Makroaufruf dort das Symbol verändert und damit 
einmalig gemacht. Vielleicht weiß ja hier einer, ob das beim 
AVR-Assembler auch irgendwie geht. Aber bei Makro-Programmierung hält 
sich der Aufwand für ein selbstberechnetes Sprungziel auch in Grenzen, 
allzuoft kommt es in Makros ja auch nicht vor.

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