Hallo miteinander, unter Assembler gibt es die Möglichkeit mittels ".org 0x0400" Daten im Programmspeicher an einer bestimmten Stelle zu plazieren. Wie kann ich dies im SRAM realieren? Ein Zeiger soll ein Datenfeld durchlaufen. Wenn dieses Feld z.B. an der o.g. Adresse beginnt ist der Zeiger leichter zu initalisieren und kann ganze 255 Daten mit einem Byte ansprechen. Danke! Gruß Boris
na du deklarierst dir nen pointer in den du die ardresse lädst und dann auf die stelle speicherst auf die der pointer zeigt. aba das würd ich lieber dem compiler überlassen (mit ne datenfeld ) mfg eugen
"aba das würd ich lieber dem compiler überlassen" Wieso denn das? Bei vielen Sachen unpraktisch und erzeugt unnötigen Overhead.
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.
Hi und wie sollen die Daten im SRAM landen? Das SRAM kann man nur zur Laufzeit beschreiben. Wenn da bestimmte Daten liegen sollen muß man diese beim Programmstart aus dem Flash oder dem EEPROM dorthin buxieren. Und diese Arbeit wird einem vom Assembler nicht abgenommen. Matthias
Außerdem sind wir hier im GCC-Forum, und für den GNU assembler gibt's weder .cseg/.dseg/.eseg (heißt dort anders, insgesamt flexibler) noch ist es für verschiebliche Objektmodule in irgendeiner Form sinnvoll, .org zu benutzen, da die endgültige Lage der Objekte erst vom Linker festgelegt wird. Folglich muß man Linkerdirektiven bemühen, wenn man irgendwas auf irgendwelche festen Adressen binden will. .org ist ein Relikt aus der Zeit der Absolutassembler. Mit Absolutassemblierung hat man aber eigentlich selbst unter CP/M auf dem Z80 bereits nicht mehr gearbeitet...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.