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


         

Отладчик DEBUG - часть 9


 
      Рассмотрим следующую команду отладчика - команда трассировки T.
    Данная команда инициирует выполнение одной команды отлаженной
    программы. В нашем примере команда T выполнена несколько раз. Как
    вы можете убедиться, выполняется несколько первых команд BIOS,
    вызванной по прерыванию INT 10H. Подпрограмма BIOS, естественно,
    находится в ПЗУ. Команда трассировки позволяет "приостановить"
    программу при ее выполнении в ПЗУ.
 
      Перед передачей управления пользовательской программе команда
    трассировки выставляет в регистре флагов соответствующий бит
    трассировки. Этот бит инициирует прерывание INT 1 после выполнения
    каждой команды. Вектор прерывания INT 1 возвращает управление
    программе DEBUG. Выполнение прерывания INT 1 автоматически
    сбрасывает бит трассировки в исходное состояние. Это значит, что
    программа DEBUG не прерывается после выполнения каждой ее команды.
    Команда трассировки служит прекрасным средством "пробиться" через
    трудный участок программы. При этом программа DEBUG выводит на
    экран каждую команду вместе с содержимым регистров как раз в
    момент, предшествующий выполнению этой команды. Так как в данном
    режиме используются не точки прерывания, а собственно прерывания,
    то можно выполнять трассировку даже программ ПЗУ.
 
      Вернемся к нашему примеру. Команда =G 4C5:3E обеспечивает
    полное выполнение подпрограммы BIOS. Обратите внимание, что
    программа вывела на дисплей символ "Э". Вызванная по прерыванию 10H
    подпрограмма BIOS выводит символы на дисплей. В данном случае это
    первый символ выводимого сообщения. Так как теперь можно быть
    уверенными, что наша программа выполняется правильно, то, введя
    символ "G", мы обеспечим выполнение программы до конца без точек
    прерывания.
 
      В данном примере рассматривался файл типа .EXE, и потому для
    возврата управления системе DOS мы не могли использовать прерывание
    INT 20H. Вместо этого программа записала в стек состояние регистра
    DS и значение 0. Управление передается обратно системе DOS в конце
    основной программы с помощью команды возврата типа FAR. Программа
    DEBUG распознает это и фиксирует состояние машины в конце
    тестируемой программы. Если бы это был файл типа .EXE, то
    прерывание INT 20H аналогичным образом вернуло бы управление
    программе DEBUG. Теперь, уделив достаточно времени этому примеру,
    мы можем выйти из программы DEBUG и вернуться в систему DOS с
    помощью команды завершения Q.



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