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



              

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


    Она управляется прерыванием от таймера. При каждом прерывании от
    таймера процедура вывода на печать также получает управление. Если
    в буфере имеется символ, и если устройство печати находится в
    состоянии "готово", то подпрограмма пересылает этот символ на
    принтер. Таким образом, символы извлекаются из буфера и
    пересылаются на принтер со скоростью работы этого устройства.
    Поскольку программа вывода на печать работает в фоновом режиме,
    одновременно могут выполняться другие задания, например,
    редактирование или ассемблирование.
 
      Обратимся к программе, представленной на Фиг. 10.1, и
    рассмотрим, как взаимодействуют ее компоненты. Во-первых, в ней
    описан сегмент ABS0, содержащий вектор прерываний, с которым
    программа имеет дело. Приведенная в примере программа заменяет как
    прерывание вывода на печать INT 17H, так и прерывание от таймера
    INT 8. Заметим также, что в сегменте ABS0 определяется адрес
    PRINTER_BASE. В этой ячейке находится базовый адрес для устройства
    печати 0. В данном примере предполагается, что все операции печати
    производятся на системном устройстве печати.
 
      Сегмент CODE - это та секция программы, которая остается
    резидентной. При помощи команды ORG 100H мы составили эту программу
    как файл типа .COM. Это означает, что для создания из выходного
    файла редактора связей файла типа .COM, необходимо выполнить
    описанную в гл.5 последовательность действий. Для хранения исходных
    значений вектора печати и вектора таймера в программе используются
    области памяти PRINT_VECTOR и TIMER_VECTOR. Хотя программа заменяет
    значения этих векторов, при выводе на печать в ней должны быть
    известны их исходные значения.
 
      Первая часть сегмента CODE, начиная с метки START, является
    инициализирующей частью программы. В ней считываются исходные
    значения векторов прерываний и сохраняются в области данных
    сегмента CODE. В процедуре инициализации векторы прерываний в



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