Warum initialisiert MS-DOS die DS- und ES-Register nicht?

8

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?

    
mohammad mahed 01.12.2012, 21:15
quelle

2 Antworten

9

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).

    
SomeWittyUsername 01.12.2012 21:20
quelle
-1

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

    
aliCna 16.05.2017 11:57
quelle

Tags und Links