Als Datensegment bezeichnet man den Teil von Objektdateien oder eines laufenden Prozesses, in dem globale und statische Variablen abgelegt sind. Diese Variablen müssen beim Start des Programms bereits im Speicher vorhanden und initialisiert sein, außerdem ist ihr Speicherplatzbedarf bereits zur Übersetzungszeit bekannt. Daher wird bereits beim Übersetzen ein Datenblock erstellt, der später als Teil des Programms beim Starten in den Speicher geladen und sofort verwendet werden kann. Manchmal werden Daten-, BSS-, Stack-, und Heap-Bereiche gemeinsam als „Datensegment“ bezeichnet.
In Maschinensprache bestehen dann getrennte Segmente für Daten und ausführbaren Code. Dafür halten zum Beispiel Intel-Prozessoren Register CS (CodeSegment) und DS (DataSegment) bereit. Einzelne Befehle beziehen sich dann entweder auf das Daten- oder Codesegment. So bezeichnet die Sprunganweisung JMP 0120 zum Beispiel die absolute Adresse 0120, die in dem durch das Segmentregister CS vorgegebenen Segment anzuspringen ist. Bei Befehlen zum Datenaustausch wie zum Beispiel MOV DX, [BX] dagegen bezieht sich die Adresse in BX als Zeiger auf das Datensegment. Assemblersprachen stellen eigene Anweisungen zur Definition von Segmenten für Daten, Code, Stack, und deren Reihenfolge bereit (zum Beispiel .DATA, .CODE, .STACK, u. a.).
In manchen Betriebssystemen (z. B. in z/OS) ist die Trennung von Code- und Datensegmenten nicht erforderlich. Die Maschinenbefehle unterscheiden diese beiden Bereichstypen nicht, sondern adressieren Daten und Codeteile mit identischen Verfahren, Registern etc. Ein Maschinenprogramm kann demzufolge Daten und Code gemischt enthalten; aus Gründen der Softwarequalität (Wartbarkeit) werden jedoch Datendeklarationen und der Befehlsteil des Programms meist strukturell getrennt implementiert.
View More On Wikipedia.org