сегментный адрес, по которому загружается
Таблица 8
(0) 2 | seg_env | сегментный адрес, по которому загружается программа |
(+2) 4 | reloc | фактор перемещения, аналогичен элементу таблицы перемещений в заголовке EXE-файла |
Следующая демонстрационная программа загружает программу PARM.COM_как оверлей без передачи ей управления:
.MODEL small DOSSEG
.STACK 100h
.DATA
path db "PARM.COM",0
epb dw 0 reloc dd 0
.CODE .STARTUP
mov ax,ds mov es,ax
mov bx,SEG buff mov epb,bx
mov bx,OFFSET epb ; ES:BX указывают на EPB mov dx,OFFSET path ; DS:DX указывают на путь ; загружаемой программы
mov ax, 4B03h ; AH = 4Bh ; AL = 0 загрузить оверлей int 21h
.EXIT 0
buff: dd 100 dup(?)
END
Программа загружается в буфер buff.
Пользователи языка Си имеют в своем распоряжении три возможности запустить программу.
Самый простой способ - использовать функцию system(). Эта функция может выполнить любую команду DOS или любую программу, пакетный файл. Например:
system("FORMAT A:");
При использовании этой функции должен быть доступен COMMAND.COM. К сожалению, хотя system и возвращает код завершения, по нему нельзя сделать вывод о том, как была выполнена запускаемая программа. Если в качестве аргумента функции будет передано неправильное имя, на экране появится сообщение:
Bad command or file name
Код возврата в этом случае будет 0 - как будто все нормально!
Другие две возможности запустить программу - использовать функции spawn и exec. Функция spawn и ее разновидности запускают программу как дочерний процесс. Функция exec загружает новую программу как оверлей на место старой и передает ей управление без возврата. После завершения дочерней программе управление будет передано COMMAND.COM или программе, которая запустила родительскую программу.
Семейство функций spawn обеспечивает запуск дочерней программы с родительской или со специально сформированной средой. Кроме того, в файле process.h описаны параметры, которые можно передать функции spawn:
Содержание Назад Вперед