Wie macht man das folgende eleganter?
.cseg
tabelle: .db 1, 2, 3, 4, low(foo * 2), high(foo *2)
foo: mach irgendwas
ret
main: ldi r30, low(tabelle *2)
ldi r31, high(tabelle *2)
lpm
.....
Irgendwie sieht das "*2" blöde aus. Geht das schöner?
Gast
#4107484
Hi
>Irgendwie sieht das "*2" blöde aus. Geht das schöner?
Wenn eine 1 schöner aussieht. Dann
tabelle << 1
MfG Spess
If it looks stupid but works it ain't stupid.
Gast
#4107880
Georg G. schrieb: > Wie macht man das folgende eleganter? > > .cseg > tabelle: .db 1, 2, 3, 4, low(foo * 2), high(foo *2) > > foo: mach irgendwas > ret > > main: ldi r30, low(tabelle *2) > ldi r31, high(tabelle *2) > lpm > ..... > > Irgendwie sieht das "*2" blöde aus. Geht das schöner? man schreibt anstatt: "tabelle:" "foo:" einfach ".EQU tabelle=PC<<1" ".EQU foo=PC<<1" Oder, noch hübscher, man verpackt das noch in ein eingängiges Macro .MACRO PMDATA .EQU @0=PC<<1 .ENDMACRO und schreibt dann insgesamt: PMDATA tabelle .db 1, 2, 3, 4, low(foo), high(foo) PMDATA foo mach irgendwas ret main: ldi r30, low(tabelle) ldi r31, high(tabelle) lpm ..... Man darf dann aber natürlich nicht auf die Idee kommen, zu schreiben: ..... rcall foo Das ginge dann fürchterlich gegen den Baum. Und auch: ldi ZL,Low(foo) ldi ZH,High(foo) icall Das würde genauso knallen. Ich würde die Idee mit dem PMDATA-Macro also wirklich nur für reine Datenkonstanten-Adressen empfehlen, wie in dem Beispiel für "tabelle" (wie ja auch schon der Name des Macros suggeriert), sobald die Daten aber (ggf. auch) als Sprungziel verwendet werden sollen, würde ich bei der klassischen Schreibweise bleiben, hier im Beispiel also für "foo".