Ich habe da ein kleine Wissenslücke. Ich will mit dem Assembler
folgendes machen. Ich habe gewisse sachen die ich im Display augeben
möchte, z.B. die Buchstabenfolge "Hauptmenue" habe ich jetzt
folgendermaßen im Assembler angelegt:
hauptm:
db. "Hauptmenue";00
Wie kann ich dem Assembler beibringen, daß er die Anfangsadresse, die ja
der Assembler selber vergibt, in zwei Speicherzellen meiner Wahl, im
Programmspeicher, ablegt.
Linuxdxs schrieb:> hauptm:> db. "Hauptmenue";00>> Wie kann ich dem Assembler beibringen, daß er die Anfangsadresse, die ja> der Assembler selber vergibt, in zwei Speicherzellen meiner Wahl, im> Programmspeicher, ablegt.
1
menu1:
2
.db low( hauptm )
3
.db high( hauptm )
geht nicht? Das wär das erste was ich probieren würde.
1
menu1:
2
.dw hauptm
müsste auch gehen, allerdings weiß ich dann nicht in welcher Reihenfolge
die Bytes abgelegt werden.
Aber im Grunde ist es ganz einfach: Auch wenn der Assembler eine
konkrete Speicheradresse festlegt verknüpft er dann doch den Labelnamen
mit dieser Adresse. Für dich als Programmierer ist dieser Labelname die
Adresse im Speicher, an der etwas abgelegt ist. Überall dort, wo du eine
Zahl benutzen kannst (in deinem Fall eine Adresse) kannst du klarerweise
auch den Labelnamen nehmen. Er fungiert als Platzhalter für eine
spezifische Adresse.
Ja, schon klar. Ich möchte aber eine Tabelle generieren lassen, in der
ich das erste Element anspringe und dann alle zwei Bytes eine Adresse
habe, die dann nacheinander in die Z-Register eingedragen werden und
dann auf die reele Anfangsadresse des Wortes zeigen.
z.B.:
Adresse von Hauptmenu
Adresse des Schriftzuges "Hauptmenue"
Adresse des Schriftzuges "Uhr stellen"
Adresse des Schriftzuges "Temp einstellen"
.
.
.
.
Also ich mach das bei kleinen Menüs so, dass ich z.B. für die
Überschriften überall die selbe Länge habe, notfalls mit Leerzeichen
aufgefüllt.
Dann alle hintereinander ins Flash, die Startadresse lässt sich dann aus
Startadresse + gemeinsame Länge * Index
ansprechen.
Ist meist ganz praktisch, da man sich das Löschen des Displays spart.
Linuxdxs schrieb:> Ja, schon klar. Ich möchte aber eine Tabelle generieren lassen, in der> ich das erste Element anspringe und dann alle zwei Bytes eine Adresse> habe, die dann nacheinander in die Z-Register eingedragen werden und> dann auf die reele Anfangsadresse des Wortes zeigen.> z.B.:>> Adresse von Hauptmenu> Adresse des Schriftzuges "Hauptmenue"> Adresse des Schriftzuges "Uhr stellen"> Adresse des Schriftzuges "Temp einstellen"> .> .> .> .
Ja, und?
Was hindert dich jetzt daran?
Zum besseren Verständnis sei noch erwähnt, dass meine LCD-Routine
"lcd_data" noch ein paar Formatierungszeichen erkennt und abarbeitet.
Dies wären (Auszug aus Kommentar zur Routine):
1
; lcd_data ;Übergibt das Byte (ASCII-Zeichen) im Register "tmp"
2
;zur Textausgabe. Dabei sind folgende Steuerzeichen
3
;möglich:
4
;1: Blinken ausschalten
5
;2: akt. Ausgabe-Position als Blinkanfang setzen
6
;3: akt. Ausgabe-Position als Blinkende setzen
7
;4: Bildschirm löschen
8
;8: Cursor home (ohne Löschen)
9
;13: CR, Zeilenwechsel, Rest der Zeile wird gelöscht