segment anweisungen & cs
-
wenn ich die standard-segmentanweisungen benutze um verschiedene segmente anzulegen, muß ich doch später die segmentregister ds,es & ss
(nach segmentzuordnung mit assume) mit den segmentadressen der zugehörigen segmente initialisieren. aber das cs-register muß doch nie direkt mit der segmentadresse vom code-segment initialisiert werden, oder? wenn nicht, dann bitte erklären warum ![ Dieser Beitrag wurde am 16.06.2002 um 20:49 Uhr von tenim editiert. ]
-
Alle Segmentregister werden am Anfang einer Executable vom OS gesetzt.
In einer .com-Datei sind alle Standard-Segmentregister gleich und ip immer =0100h. (cs=ds=es=ss)
In einer .exe-Datei gibt es durch den Header die Moeglichkeit die Segmentregister und ip beim Start mit bestimmten Werten zu initialisieren. Wie das im Einzelfall genau geht, haengt vom Compiler ab.
-
habs gerade in einem mini-taschenbuch nachgelesen. cs & ss müssen nie initialisiert werden, das macht der assembler. nur ds,es,fs,gs müssen manuell initialisiert werden.
irgentwie weiss der assembler welches segment das code-segment ist und lädt dessen adresse in cs. sonst könnte er ja nicht mal den ersten maschienenbefehl im programm ausführen.[ Dieser Beitrag wurde am 16.06.2002 um 21:08 Uhr von tenim editiert. ]
[ Dieser Beitrag wurde am 16.06.2002 um 21:17 Uhr von tenim editiert. ]
-
Soweit ich weiß kann man im MZ EXE Header nur den Entrypoint (CS:IP) und den Stackpointer (SS:SP) festlegen. Diese Angaben sind natürlich relative Angaben soweit ich mich da erinnere. DS und ES zeigen beim Start der EXE auf das PSP.