Hallo Boris!
Dein Problem läßt sich glaub' ich ganz einfach lösen:
Es gibt ja in Assembler Compilerdirektiven, die angeben, in welchen
Speicher der Code geschrieben werden soll.
".CSEG" signalisiert, daß es sich um Programmcode handelt
".DSEG" , daß es sich um Daten für das SRAM handelt und
".ESEG" , daß es sich um Daten für das EEProm handelt.
".ORG" legt eine absolute Speicheradresse fest, in die die Daten
geschrieben werden sollen. ".ORG" kann beliebig oft, an beliebiger
Stelle und in jedem Speicherbereich angewandt werden.
.DSEG
.ORG 0x0400
Daten1...
.ORG 0x0500
Daten2...
.CSEG
.ORG 0x0000
Programcode...
Legt also fest, daß die Daten1 ab 0x0400 im SRAM plaziert werden, und
die Daten2 ab 0x0500 im SRAM. Der Programmcode wird ab Adresse 0x0000
des Codespeichers plaziert. Die ".ORG"-Adresse im ".DSEG" bezieht
sich dann natürlich auf den Speicherbereich des SRAM und die
".ORG"-Adresse im ".CSEG" auf den Programmspeicher!
Man sollte nur darauf achten, daß sich mehrere ".ORG" nicht ungewollt
überlappen.
Ich weis jetzt allerdings nicht, ob der Compiler bei einem Wechsel
zwischen den einzelnen Speicherbereichen sich die jeweiligen
".ORG"-Positionen merkt. Wenn man sichergehen will, dann lieber bei
einem Bereichswechsel (also z.B. nach einem ".DSEG" ein ".CSEG")
mit einem ".ORG" beginnen. Evtl. mal in einer Anleitung des Compilers
nachforschen.
Grüße, Martin.