.com Datei "nachladen" und ausführen..
-
Hallo Gemeinde,
Ich weiß das es etwas umständlich klingt aber ich möchte gern wissen ob folgendes möglich ist.
Ich erstelle eine normale .com Datei dessen Aufgabe es ist eine andere Datei zu öffnen und an eine bestimmte Stelle im Speicher abzulegen.
Die zu ladende Datei ist ebenfalls eine .com Datei, jedoch mit der Anweisung
ORG 0h
am Anfang und nicht ORG 100h.
Ich hoffe und glaube das der PSP erst von DOS beim laden vor die Datei geschrieben wird und nicht beim erstellen.Da alle Adressen nun bei Null beginnen sollten, müsste ein Far Jump unter Angabe des richtigen Segments möglich sein oder?
Ich benutze MASM und der kann keine .bin Dateien erstellen. Wobei ich bei den .bin und .com Dateien keinen großen Unterschied erkennen kann.
Deshalb meine Frage.Danke und Gruß
Nicky
-
ORG 100h ist nur eine Anweisung an den Assembler, alle Adressen (Labels, Sprungbefehle) so aufzulösen, als ob das COM-Programm (COM = Copy Of Memory) an Offset-Adresse 100h beginnen würde. Das PSP wird vom Lader erstellt. Deine Annahmen treffen also alle zu. Noch ein Stolperstein: Wenn der Lader ein COM-Programm lädt, reserviert er sämtlichen Speicher für dieses Programm. Solltest Du mit einem DOS-Interrupt Speicher anfordern wollen, musst Du zuerst Speicher freigeben.
viele grüße
ralph
-
Hallo nochmal,
ich habs versucht und es geht.
Selbst einen Bootloader kann man auf diesem Weg erstellen.Gruß,
Nicky
-
Zum Ausführen von *.com und auch *.exe Dateien aus einer laufenden Anwendung heraus (ggf. auch mit Übergabe von Parametern) kann man auch folgende Funktion von DOS verwenden:
RBIL->inter61b.zip->Interrup.g
--------D-214B-------------------------------
INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
AH = 4Bh
AL = type of load
00h load and execute
01h load but do not execute
03h load overlay (see #01591)
04h load and execute in background (European MS-DOS 4.0 only)
"Exec & Go" (see also AH=80h)
DS:DX -> ASCIZ program name (must include extension)
ES:BX -> parameter block (see #01590,#01591,#01592)
CX = mode (subfunction 04h only)
0000h child placed in zombie mode after termination
0001h child's return code discarded on terminationReturn: ..... bitte im RBIL weiterlesen, da etwas länger.....
(SS und SP müssen vorher gerettet und danach restauriert werden.)
Die Anwendungen können damit als Child-Anwendung ausgeführt werden und kehren nach deren Beendigung zur Eltern-Anwendung zurück.
Beispiel Parameter-Block:
PARBLOCK equ THIS WORD ; Parameter-Block für die EXEC-Funktion DW 0 ; gleicher Environment-Block DW OFFSET COMLINE ; Offset- und Segmentadresse der DW SEG CODE ; Kommandozeile DD 0 ; keine Daten in PSP #1 DD 0 ; keine Daten in PSP #2 COMLINE DB 80h dup (0) ; Kommandozeile
Dirk