Welche Schritte führt MS-DOS aus, um eine COM- oder eine EXE-Datei in Arbeitsspeicher zu laden? Gibt es noch online Hinweise darauf, wie dies geschieht? Das Beste, was ich mir vorstellen kann, bezieht sich möglicherweise auf die Dosbox-Quelle.Wie lädt DOS ein Programm in den Speicher?
Antwort
Wenn command.com aufgefordert wird, eine .com- oder .exe-Datei auszuführen, wird der Interrupt-Dienst 21h/AH = 4B, der EXEC-Dienst, aufgerufen. Es liegt an den Aufrufer zu:
- bauen einen DOS EXEC Parameterblock (siehe http://www.delorie.com/djgpp/doc/rbinter/it/90/15.html) (enthält Informationen über Umgebungsvariablen, Kommandozeilen Argumente, FCBs und Registerwerte auf Rückkehr)
- frei bis alle Speicher das aufrufende Programm nicht
- Setup Aufruf Argument Register
- ah = 4Bh ('EXEC' Service-Typ)
- al = 00h ('load und ausführen' -Funktion)
- ds: dx -> Programmname
- es: bx -> ptr Parameterblock für Fehler
- Aufruf Interrupt 21h
- auf Rückkehr Reset-Stapelzeiger und Test von exec.
Wenn Interrupt 21h aufgerufen wird (hier, wo es für mich trüb wird):
- eine Seite ausgerichtet Speicherblock zugeordnet ist
- die Dateierweiterung wird ignoriert, stattdessen wird DOS die erste überprüfen zwei Bytes der Datei für die Signatur "MZ" oder "ZM", wenn eine EXE und keine Signatur für COM.
für exe:
- exe-Header für die erste Register gelesen wird Werte
- Kopie Codeabschnitt von exe in den Speicher
- Relocation Tabelle (siehe http://en.wikipedia.org/wiki/Relocation_table) gelesen und weit Zeiger eingestellt werden im Speicher
- Setup Registerwerte
- AL, AH Laufwerksbuchstaben Status
- DS, ES -> PSP-Segment (siehe http://en.wikipedia.org/wiki/Program_Segment_Prefix)
- SS: SP -> Stapelzeiger (definiert in exe-Header)
- Sprung zu CS: IP -> Einstiegspunkt (in exe-Header definiert, bezogen von Programm zu starten)
für com:
- Kopie gesamte.com-Datei in den Speicher
- Setup-Registerwerte
- AL, Status AH Laufwerksbuchstaben
- CS, DS, ES, SS -> PSP Segment
- SP = der letzte Wort Offset in ersten 64k Segment
- Sprung zu IP = 100h
Programm jetzt ausführen sollte.
Hinweise:
In Microsofts KB Dokument "Order of Precedence in Lokalisierung Executable Files", es erwähnt die Verwendung von "MS-DOS EXEC Funktion (Interrupt 21h Service 4Bh)" für die Ausführung .com und EXE-Dateien http://support.microsoft.com/kb/35284
So können wir bei Ralph Browns Interrupt-Liste auf Int aussehen 21/AH = 4Bh
- http://www.cs.cmu.edu/~ralf/files.html
- Int 21/AH = 4Bh http://www.delorie.com/djgpp/doc/rbinter/id/51/29.html
- Int 21/AH = 4Bh http://www.ctyme.com/intr/rb-2939.htm
und ein Beispiel für die Verwendung:
- Art der Montage/19.1.1.1 Laden und Ausführen http://webster.cs.ucr.edu/AoA/DOS/ch19/CH19-1.html#HEADING1-10
und das dos exe-Header-Format:
(dies wird einige googeln basiert weg, so wenden Sie sich bitte Vorschläge zu machen)
Stellen Sie Paterson, der ursprüngliche Autor von dos: http: // dosmandrivel. blogspot.com/ – vulkanino