Warum muss die Initialisierung der Register DS
und ES
manuell vom Programmierer vorgenommen werden?
Zum Beispiel:
%Vor% Auf der anderen Seite werden die Register CS
und SS
vom Betriebssystem initialisiert (in MS-DOS
). Warum ist das so?
Weil die Register CS
und SS
wesentlich für die Programmausführung sind, im Gegensatz zu DS
und ES
Registern, die auf benutzerdefinierte Datensegmente zeigen. Standardmäßig sind im ausführenden Programm keine Daten vorhanden, um die DS
und ES
mit initialisieren zu können. Als Programmschreiber können Sie angeben, wo sich Ihre Daten befinden, indem Sie die Register für Datensegmente festlegen.
Bearbeiten : Wie von @FrankKotler korrekt bemerkt, in .com
file (die gesamte Programmgröße überschreitet nicht das einzelne Segment), DS
und ES
werden initialisiert und sind gleich %Code%. Für andere Ausführungsmodelle werden CS
und DS
durch Zeiger auf ES
initialisiert (was nicht der Zeiger auf echte Benutzerdaten ist).
Die richtige Antwort auf deine Frage (die ich glaube, dass Meister V.Aghazarian dich in der Schule gefragt hat) ist nicht, weil CS und SS für die Programmausführung essentiell sind.
Das Problem in MS-DOS war mit Programmsegmentpräfix
Aus Wikipedia:
Die Segmentadresse des PSP wird beim Ausführen des Programms im DS-Register übergeben. Es kann auch später bestimmt werden, indem Int 21h Funktion 51h oder Int 21h Funktion 62h verwendet wird. Beide Funktionen geben die PSP-Adresse im Register BX zurück. 1