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



              

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


    поместив часть кода от команды START до INT 27H после метки
    BUFFER_END. В этом случае при прерывании INT 27H инициализирующая
    часть программы оказалась бы за пределами защищаемой области
    памяти, и следующая загружаемая DOS программа перекрыла бы
    процедуру инициализации. Экономия около 90 байт из более чем 10000
    байт в нашем примере не впечетляет, но она вполне доступна в случае
    необходимости.
 
      Далее следует процедура PRINT_HANDLER. Эта подпрограмма
    вместо базовой системы ввода-вывода осуществляет управление
    принтером при каждом обращении программ к прерыванию INT 17H для
    вывода данных на печать. Первые три команды управляют перехватом
    управления у BIOS. Наша процедура работает только тогда, когда
    должен быть напечатан символ (AH = 0). При любом другом коде
    функции работу выполняет BIOS, поэтому программа производит
    проверку, не равен ли регистр AH нулю. Если нет, то производится
    косвенный переход с использованием сохраненного значения исходного
    вектора печати. В результате управление передается процедуре
    входящей в BIOS, которая выполняет требуемую функцию. Сказанное
    означает, что в нашей процедуре обработки прерывания достаточно
    написать только поддержку сделанных изменений.
 
      Относительно рассмотренного способа управления печатью следует
    сделать два замечания. Во-первых, передача дальше всех функций
    печати кроме случая AH = 0 - не блестящая идея. Если какая-либо
    программа инициализирует принтер (AH = 2) во время работы механизма
    буферизации, то BIOS берет управление на себя и выдает на принтер
    команду RESET. Эта команда обрывает ту строку, которая в это время
    выводится на печать, что в большинстве случаев приводит к потере
    одного или нескольких символов. Если вы хотите сделать эту
    программу более защищенной от ошибок, то вам придется рассмотреть
    вопрос об управлении всеми функциями печати.
 
      Второе, на что следует обратить внимание - это использование



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