In deinem Beispiel nutzt Du den Speicherplatz x0005 gar nicht. (Ein Lable wird nicht in Maschienensprache übersetzt)
Zwischen x0006 und x0007 hast Du im Programmspeicher 16Bit Platz (Korrigiert mich, es ist bei mir schonwieder lage her) Dein Beispiel Text ist deutlich länger. Kann mich auch nicht erinnern, dass der Assembler, den ich verwendet habe überhaupt Zeichen in Bytecode umgesetzt hat, deshalb habe ich mir auch ein kleines Delphiprogramm geschrieben, das die ASCII Wandelung vorweg vornahm.
P.S.: Huubs geht doch:
.db "Hello\n" // is equivalent to:
.db 'H', 'e', 'l', 'l', 'o', '\\', 'n'
To create the equivalent to the C-string "Hello, world\n", do as follows:
.db "Hello, world", '\n', 0
Es fehlt eine Deklaration, ob Dein geschriebener Code im Programmspeicher oder im EEPROM stehen soll.
Sinnvoll wäre:
Code:
.CSEG
.
.
.
rjmp nach_dem_datensegment
.DSEG
tabelle:
.dw 128, 1078, 4, ....
.CSEG
nach_dem_datensegment:
.
.
.
.ESEG
tabelle2:
.dw 128, 1078, 4, ....
Hier hast Du jetzt die gleiche Tabelle zweimal, eineml zwischen dem Code, und einmal im EEPROM.
die Festlegung mit .ORG ist (meine ich) nicht erforderlich. Ich habe diese nur am Anfang verwendet, um die Interrupt Vektoren zu treffen. (vielleicht etwas übertriben, aber die Interruptvectoren sind die Einzigen Speicheradressen, die wirklich stimmen müssen.
Ob sich Dein Programm jetzt leicht verschiebt oder nicht ist eigentlich egal, hauptsache ist, Du kannst mit dem Lable "tabelle" die Daten im Datensegment addressieren, und dieses steht dicht genug an Stelle, an der Du die Tabelle auslesen möchtest.
Es gab da bei Atmel mal ne ordentliche Anleitung... Developer Tools User Guide oder so... Kanns grad nicht finden, schau mal ob ichs noch hab
Lesezeichen