Assembler для начинающих



              

Возврат программы в DOS с сохранением ее резидентности


    Первый способ написания и загрузки постоянной функции в DOS состоит
    в том, чтобы, возвращая управление DOS, программа оставалась в
    памяти резидентной. Такую функцию существляет прерывание INT 27H.
 
      Обычно для выхода в DOS используется прерывание INT 20H, либо
    программа производит переход по адресу 0 программного префикса, как
    мы делали в программах типа .EXE. В результате управление
    возвращается DOS. Операционная система освобождает память,
    предоставленную этой программе. Следующую программу, которая
    загружается после прерывания INT 20H, DOS помещает в ту же область
    памяти, которая использовалась для предыдущей.
 
      Выход в DOS через прерывание INT 27H отличается от
    рассмотренного. Управление возвращается в DOS точно так же, как и в
    случае прерывания INT 20H, но часть памяти, занимаемая программой,
    не возвращается для дальнейшего использования. В регистре DX
    указывает на адрес первой свободной ячейки после той области
    памяти, котрую вы хотите зарезервировать. DOS резервирует эту
    область памяти, как часть системы. Это означает, что ваша программа
    становится частью DOS. Такую программу можно удалить из памяти
    только перезагрузив DOS и начав все сначала.
 
      Если выход в PC DOS осуществляется при помощи прерывания INT
    27H, то в регистре CS должен находиться адрес программного
    префикса. Легче всего это сделать, если писать использующую INT 21H
    программу как .COM программу. Написать программу типа .EXE,
    оставляющую при выходе содержимое регистров CS и DX корректным,
    довольно трудно. Поскольку создание программ типа .COM было
    рассмотрено в гл.5, будем считать, что все наши остающиеся
    резидентными программы имеют тип .COM.
 
      Рассматриваемый для прерывания DOS INT 27H пример довольно
    сложен. Он иллюстрирует не только использование INT 27H, но и
    способы замены существующей BIOS другой версией. В этом примере мы
    даже применим несколько трюков с таймером для увеличения скорости



Содержание  Назад  Вперед