Раздел 3. Управление программами.

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

 

  Большинство  программ  загружаются  в память,  запускаются,  а
затем удаляются операционной системой при завершении. Языки высо-
кого уровня обычно не имеют альтернативы. Но для программистов на
ассемблере имеется другая  возможность и данный раздел демонстри-
рует  ее.   Некоторые программы действуют как драйверы  устройств
или драйверы прерываний и  они  должны  быть  сохранены  в памяти
("резидентными")  даже  после их завершения  (вектора  прерываний
обеспечивают механизм, посредством которого последующие программы
могут  обращаться  к резидентным процедурам).   Иногда  программе
необходимо запустить из себя другую программу.  На самом деле DOS
позволяет программе загрузить в память вторую копию  COMMAND.COM,
которая может использована как  средство интерфейса с пользовате-
лем или выполнения команд типа COPY или DIR.
   Программы могут быть в двух форматах: .EXE или .COM. Программы
первого типа могут  быть  больше  64K,  но  они требуют некоторой
обработки перед тем, как DOS загрузит их в память.  С другой сто-
роны COM программы существуют прямо  в том формате, который нужен
для загрузки в память.  COM программы особенно полезны для корот-
ких утилит. В обоих случаях  код, составляющий программу, предва-
ряется  в памяти префиксом программного сегмента (PSP).  Это  об-
ласть размером 100H байт, которая содержит информацию необходимую
DOS для работы программы; PSP также обеспечивает место для файло-
вых операций ввода/вывода [5.3.5].  При загрузке EXE файла и DS и
ES указывают на PSP. Для COM файлов CS также сначала указывает на
PSP.   Отметим, что MS DOS 3.0 имеет функцию, которая  возвращает
номер сегмента PSP. Это функция  62H прерывания 21H; ей ничего не
надо подавать на входе, а в BX возвращается номер параграфа.
   Одна  из причин, по которой интересно положение PSP, состоит в
том, что его первое слово содержит номер прерывания DOS,  которое
будет приводить к завершению программы. Когда выполняется послед-
ний  оператор RET программы, то значения на вершине стека  указы-
вают счетчику команд  (регистр  IP)  на начало PSP, таким образом
код  завершения  выполняется как следующая инструкция  программы.
Дальнейшее обсуждение этого смотрите в пунктах [1.3.4] и [1.3.6].

   Для справки приводим значение полей PSP:

   Смещение  Размер поля        Значение
     0H       DW           номер функции DOS завершения программы
     2H       DW           размер памяти в параграфах
     4H       DW           резерв
     6H       DD           длинный вызов функции диспатчера DOS
     AH       DD           адрес завершения (IP,CS)
     EH       DD           адрес выхода по Ctrl-Break (IP,CS)
    12H       DD           адрес выхода по критической ошибке
    16H     22 байта       резерв
    2CH       DW           номер параграфа строки среды
    2EH     46 байтов      резерв
    5CH     16 байтов      область параметров 1 (формат FCB)
    6CH     20 байтов      область параметров 2 (формат FCB)
    80H    128 байтов      область DTA по умолчанию/получает
                           командную строку программы



 

Вы находитесь в разделе: 

Добавить коментарий