Читайте также:
|
|
В однопрограммной MS DOS нет блока управления процессом. Вместо PCB используется префикс программного сегмента PSP. Перед загрузкой программы MS DOS в самом ее начале располагает PSP. PSP - это таблица из 256 байтов (100h), имеющая ряд важных полей, например, таких:
- команда int 20h для выхода в DOS - смещение 0, длина 2 байта;
- вершина доступной памяти в параграфах (начало - это адрес PSP) - смещение 2, длина 2;
- CALL FAR к диспетчеру функций DOS - смещение 05, длина 5;
- адрес п/п обработки ^Break (его можно переопределять) в формате CS:IP. Стандартный int 23h. - смещение 0eh, длина 4;
- адрес п/п обработки критических ошибок. Его можно переопределять. Стандартный int 24h. Формат CS:IP. - смещение 012h, длина 4 байта;
- длина области пользовательских параметров, переданных в командной строке (UPA) (не более 127). При отсутствии командной строки длина равна 1 для кода CR - смещение 80h, длина 1;
- буфер с командной строкой, кроме имени программы, т.е. сами параметры командной строки (UPA). Буфер называется DTA.- смещение 81h, длина 7fh.
MS DOS для размещения программы выбирает наименьший доступный адрес, размещая в нем PSP. Другая управляющая программа, например, WINDOWS 3.11, может выбрать любую часть памяти. При входе в программу DS:0000 и ES:0000 указывают на PSP.
В.COM файлах один общий сегмент, поэтому он размещается вслед за PSP по адресу PSP:100h. В этом случае CS, DS, ES, SS имеют одинаковые значения и ссылаются на PSP. Доступ к полям PSP проводится с указанием только смещения относительно DS. Например, чтобы получить длину UPA, можно записать
MOV CH,[80h],
так как MOV по умолчанию использует DS.
В.EXE файлах только DS:0 и ES:0 на входе имеют адрес PSP. Перед кодовым сегментом размещают сегмент данных, поэтому кодовый сегмент будет не первым и не по адресу PSP:100h. Для доступа к PSP, если содержимое DS не изменено, можно использовать смещение относительно DS. DS можно запомнить и восстанавливать, когда необходим доступ к PSP.
Есть функция DOS 1ah, вызываемая через int 21h, которая возвращает адрес DTA в регистровой паре DS:DX (DTA обычно совпадает с UPA).
При работе с DTA необходимо помнить, что эту же область использует ряд функций DOS, помещая свои данные. Поэтому лучше обработать командную строку до обращения к функциям DOS, особенно таким, как выход - 4ch, поиск файла на устройстве - 4еh.
Наиболее часто используется PSP для доступа к параметрам из командной строки и ее разбора.
Дата добавления: 2015-10-02; просмотров: 171 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ПРОЦЕССЫ В UNIX | | | Создание дочерних процессов |