Hum, eigentlich finde ich, dass das so in ASM am Besten und vor alle am Übersichtlichsten geht Variablen zu definieren. Eine Andere Möglichkeit ist das "equ" wobei ich den wirklich nicht mag, da ich persönlich Variablen gruppieren möchte, also zB alle Variablen, die mit Datumsberechnung oder so zu tun haben, sind schön hintereinander aufgelistet (und bei cblock sind sie immer auch gleich im gleichen Memorybereich ).
Ein weiterer riesen Vorteil ist es, dass man im cblock sehr einfach Buffer generieren kann, also man kann sagen "recbuf:30" und damit belegt man einen Speicher von 30 Bytes. Das kann man dann natürlich wundervoll mit einem #define und indirekter adressierung verbinden und man hat pltzölich um einiges weniger Sorgen, wenn man zum Beispiel ganze Protokolle über die serielle Schnittstelle empfangen will (und vor allem, wenn sich dann während dem Programmieren die größe des Protokolls verändert ).
Einziger riesengroßer Nachteil ist, dass man die Variablen durchzählen muss, ob man schon am Ende den gesamten Speicher aufgebraucht hat . Da hilft nur das Durchnummerieren in dem Kommentar.
Und wo du den CBLOCK nun hinlegen musst, das steht im Datenblatt, also von wo die GPR (General Purpose Register) anfangen. Natürlich wird der Code nicht gehen, wenn du ihn auf reservierte Register legst und da hilft dann auch eine Lösung mit "equ" nicht weiter .
Was man noch sehr schön machen kann ist, zwei Cblock "dynamisch" zu verbinden.
Und wenn sich nun zum Beispiel var1 verändert, so "rückt" das 2. cblock wieder nach .Code:cblock 0x20 var1:20 var2 var3 loop_block endc cblock loop_block loop1:2 loop2 irgendwas endc
MfG
Mobius
Lesezeichen