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.


Anmelden zum Antworten