hallo,
ich habe leider ein problem mit der Sprungweite beim breq.
> cpi prog,0> breq prog0_neustart> cpi prog, 1> breq prog1_neustart> cpi prog, 2> breq prog2_neustart> cpi prog, 3> breq prog3_neustart> cpi prog, 4> breq prog4_neustart> cpi prog, 5> breq prog5_neustart> cpi prog, 6> breq prog6_neustart> cpi prog, 7> breq prog7_neustart> cpi prog, 8> breq prog8_neustart> cpi prog, 9> breq prog9_neustart> rjmp prog0_neustart; default error prog...>> prog0_neustart:> ; nutzcode> [...]> prog1_neustart:> ; nutzcode> [...]> prog2_neustart:> ; nutzcode> [...]> [......]
leider kann ich mit dem breq prog0_neustart noch zum label springen,
aber spätestens ab dem breq prog3_neustart bekomme ich Probleme mit der
Sprungreichweite. Unter einem Label Zwischensprunglabe_prog0_neustart:
kann ich zwar einen rjmp befehl einsetzen, der dann zu prog0_neustart
springt, aber irgendwie sieht das doof und umständlich aus und erhöht
nicht unbedingt die übersichtlichkeit. Gibt es einen anderen weg, mach
ich mir das leben vielleicht unnötig schwer?
für anregungen bin ich gern zu haben, vielen Dank,
Martin
Vielen dank für die Antworten, 'ne Sprungtabelle ist wohl das, was ich
bei mir einbauen werde, um zig labels zu vermeiden.
Super, dass einem hier immer so prompt geholfen wird. Schönen Abend noch
Eine Frage hab ich zu der Lösung von Peter noch gefunden. Gibt es einen
Vorteil, die negative Label adresse abzuziehen und nicht die positive
drauf zu addieren? das müsst doch genau so funktionieren, oder hab ich
da was übersehen.
@ Martin
> Eine Frage hab ich zu der Lösung von Peter noch gefunden. Gibt es einen> Vorteil, die negative Label adresse abzuziehen und nicht die positive> drauf zu addieren? das müsst doch genau so funktionieren, oder hab ich> da was übersehen.
Das ist ein Trick, weil es keine passenden ADD Befehle im AVR gibt
(Addieren von Konstanten bzw, addieren von Konstanten mit Carry Flag).
Addieren würde auch gehen, braucht aber auf dem AVR mehr Befehle.
MfG
Falk
Hi!
Wenn man, wie ich jedenfalls, fast immer ein Null-Register braucht/hat
geht auch:
.def Null R2
ldi zl, low(sprungtab)
ldi zh, high(sprungtab)
add zl,prog
adc zl,Null
ijmp
.
.
.
Peters Variante geht aber immer.
MFG Uwe
> ldi zl, low(sprungtab)> ldi zh, high(sprungtab)> add zl,prog> adc zl,Null
Es macht natürlich mehr Sinn, Null (mit Carry) zu zh zu addieren als zu
zl...
Duck & wech...
...