SEGMENT - was steckt dahinter?
-
Hi,
ich wollt eigentlich nur fragen was der Assembler bei der Mnemonic "segment" macht? Es ist ja keine CPU Instruktion.
Also wie registriert man denn über die CPU ein Segment?
Ach und was macht der Assembler bei "db" ? ^^
Ist ja auch keine Instruktion...hoffe einer kann mir helfen
cu,
André
-
Hi!
8086:
Es gibt 3 verschiedene Segmente:
Code-Segment (CS)
Stack-Segment (SS)
Daten-Segment (DS)
Und noch ein zusätzliches, das Extra-Segment (ES).Seit dem 80386, gibt es noch 2 weitere Extra-Segmente, nämlich FS und GS.
Die SEGMENT-Anweisung wird bei der direkten Segmentierung verwendet. Ein Segment-Ende wird mit ENDS abgeschlossen:
SEGMENT_NAME segment .... SEGMENT_NAME ends
Das Stack-Segment hat bei MASM hinter SEGMENT noch STACK stehen.
Die direkte Segmentierung hat den Vorteil das man damit ein eigenes 'Speichermodell' erstellen kann. Mittlerweile gibt es die Speichermodelle, welche mittels .model/model (mit '.' bzw. ohne) festgelegt werden können.db legt im Daten-Segment eine Byte-Variable an:
my_DS segment var1 db ? ; uninitialisierte Byte-Variable var2 db 20 dup (0) ; Variable (eher Feld) 20-Byte groß, initialisiert mit 0 my_DS ends
Im Stacksegment legt man damit den Speicherplatz des Stacks fest:
my_SS segment stack db 128 dup (?) my_SS ends
Code-Hacker
-
Wow, sehr gut erklärt.
Ich denk, dass müsste jeder verstanden haben. ^^
~Pointer
-
hm.. thx
nich ganz das wass ich wollte, aber trotzdem danke
ps:
lowlevel team rulz:"Segment" is dafür gedacht das, das OS diese Segmente zuweisen kann.
---
wenn du schreibst "db 0x90" dann setzt der Assembler einfach an dieser Stelle wos steht ein Byte mit dem Wert 0x90, wenn du das in den Codebereich schreibst würde der Prozi das als Code auffassen 0x90 heisst nop in dem Falle also egal, aber kann gefährlich werden. Ein Assembler ist kein C Compiler der die Variablen vor den Code sortiert, das muss der Herr Programmierer da schon selbst tun