Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать

Пример выделения и освобождения блока памяти

text segment

org 100h

assume cs: text, ds: text, ss: text

main proc

mov sp,offset m ; метка m расположена в конце программы

mov bx,(newstkmain + 10Fh)/16 ; вычисляем размер программы

mov ah,4Ah

int 21h ; ограничение размера памяти для программы

mov bx,10h ;в bx заносим число выделяемых параграфов

mov ah,48h ; номер функции выделения памяти

int 21h ; прерывание по функции 48h

mov es,ax ; адрес блока из ax загружаем в es

mov word ptr es:[di],15h ;работа с блоком

mov ax,word ptr es:[si]

mov ah, 49h ;освобождение

Int 21h ;блока памяти

m:

  1. Дочерние процессы

Программа, загружаемая в оперативную память, состоит из областей:

  • окружение программы

  • префикс программного сегмента

  • сама программа

Окружение – область памяти, в которой в виде символьных строк записаны переменные окружения (загружаются из autoexec.bat). В командном процессоре command.com окружение создано самой операционной системой.

COMSPEC = D:\DOS\COMMAND.COM

PROMT = $p $q

PATH = D:\ ; D:\DOS ; D:\UTIL

Окружение передается из command.com в материнскую программу, затем в дочернюю и далее, если запускаются очередные дочерние процессы. При передаче управления дочерним процессам материнская программа может дополнить передаваемое окружение.

После начала загрузки операционной системы активной программой становится командные процессор, который ждет ввода команды пользователя. Получив команду на запуск программы, command.com активизирует ее и передает ей свое окружение. Если загружаемая программа активизирует дочерний процесс следующего уровня, она еще раз копирует свое окружение, передавая его запускаемой программе.

Основные элементы PSP:

0Ah – 0Dh Вектор прерываний по завершению программы (INT 22h)

0Eh – 11h Прерывание, которое обрабатывается после нажатия Ctrl+C

(INT 23h)

12h – 15h Прерывание по критической ошибке (INT 24h)

2Ch – 2Dh Сегментный адрес окружения

80h – FFh «Хвост» команды, а также дисковая область передачи данных

«Хвост» командной строки это параметры команды, а также имена рабочих файлов, если они содержались в командной строке. Если пользовательскую программу предполагается запускать с передачей ей параметров, то в программе должны быть строки извлечения «хвоста» команды и его анализа.

  1. Особенности структуры материнской программы

В материнской программе для запуска каждой дочерней программы должен быть выделен блок параметров:

parmblk dw envirseg ; адрес сегмента окружения

dd cmdtail ; адрес «хвоста» команды

dd fcb_1 ; блоки, которые необходимы для

dd fcb_2 ; работы файловой системы

chname dbCHILD.EXE’, 0 ; путь к файлу дочернего процесса

cmdtail db 9, ‘FILE.TXT’, 0dh ; текстовый файл

fcb_1 db 37 dup (0)

fcb_2 db 37 dup (0)

envirseg segment para ‘Envir’

db ‘comspec = D:\DOS\command.com’, 0

db ‘WORKFILE = A:\FILES’, 0

envirseg ends

В простейшем варианте, когда хвост команды и fsb не используются, блок параметров уменьшается до двух строк:

parmblk dw 7 dup (0)

chname ‘имя.exe’, 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]