Режимы работы отладчика DEBUG.

    Макрокоманды отладчика DEBUG (примеры применения команд).

    Краткие сведения об отладчике DEBUG :

    Debug – 16-разрядная утилита операционной системы MS DOS.

    Название программы происходит от Bugs – насекомые. На программистском слэнге Bugs означает «ошибки в программе».

    Используя Debug для пошаговой трассировки тестируемого кода, эти ошибки можно найти и исправить.

    Процедура загрузки отладчика DEBUG :

    Располагается отладчик Debug в системной папке system32 папки WINDOWS (файл debug.exe).

    Запуск отладчика удобнее всего выполнять из меню Пуск/Выполнить.

    Режимы работы отладчика DEBUG :

    • Основной режим работы отладчика Debug (характерная особенность – присутствие чёрточки и мигающего справа от неё курсора). Основной режим работы устанавливается автоматически после загрузки отладчика.


    В этом режиме можно набирать любые макрокоманды отладчика от A до W. Выход из этого режима означает завершение работы отладчика.

    • Режим ассемблирования. Вход в режим ассемблирования из основного режима работы отладчика осуществляется набором команды A. Признак нахождения в этом режиме – наличие адреса (например, 0CC0:0100) перед знаком курсора:


    После набора команды необходимо нажатием клавиши Enter ввести её в память (пока не нажата клавиша Enter команда в память не введена).

    Если команда набрана с ошибкой и нажата клавиша Enter, эта команда в память не вводится. Вместо этого отладчик предлагает ввести её повторно, по тому же самому адресу:


    Возвращение из режима ассемблирования в основной режим работы отладчика – нажатие клавиши Enter в пустой строке (когда не набрано ни одного символа), например, в строке 0CFC:0103.

    • Режим ввода данных. Данный режим может быть реализован во время выполнения макрокоманд E и R. В этом режиме вводятся данные в ячейки оперативной памяти или в регистры процессора:


    Возвращение из этого режима в основной режим работы отладчика – нажатие клавиши Enter. Продолжение работы в режиме ввода данных – нажатие клавиши пробел. Нажимая клавишу пробел, можно попасть на любую ячейку памяти и ввести в неё нужное число. Ввод значений завершается нажатием клавиши Enter.

    • Режим выполнения кода. Вход в режим выполнения кода из основного режима работы отладчика осуществляется набором команды G. Как правило, время нахождения в данном режиме – считанные мгновенья. Исключение – зависание программы или выполнение огромных циклов.

    Возвращение в основной режим работы отладчика осуществляется автоматически, без участия работающего с этим отладчиком человека.

    • Режим ввода информации с клавиатуры во время работы в режиме выполнения кода. Завершение этого режима и продолжение выполнения кода осуществляется нажатием клавиши Enter.

    • Режим трассировки выполняемого кода. В данном режиме процессор выполняет заранее заданное ограниченное количество команд. Вход в режим трассировки осуществляется набором команды T. Возвращение в основной режим работы осуществляется автоматически, без участия работающего с отладчиком человека.

    • Аварийное прекращение работы отладчика. Имеет место в случае, когда процессор пытается исполнить запрещённый в режиме эмуляции работы микропроцессора i8086 программный код. Например, пытается выполнить команды работы с портами ввода-вывода данных.

    Команды отладчика Debug:



    В приведённом выше окне фигурирует полный перечень команд отладчика. Ниже тот же перечень приведён в более удобном для чтения виде:

    -?
    Assemble       A  [адрес]
    Compare        C  диапазон адрес
    Dump           D  [диапазон]
    Enter          E  адрес [список]
    Fill           F  диапазон список
    Go             G  [=адрес] [адреса]
    Help           ?
    Hex            H  значение1 значение2
    Input          I  порт
    Load           L  [адрес] [диск] [первый_сектор] [число]
    Move           M  диапазон адрес
    Name           N  [путь 1 [список_аргументов]
    Output         О  порт байт
    Proceed        P  [=адрес] [число]
    Quit           Q
    Register       R  [регистр]
    Search         S  диапазон список
    Trace          Т  [=адрес] [значение]
    Unassembled    U  [диапазон]
    Write          W  [адрес] [диск] [первый_сектор] [число]

    Параметры макрокоманд отладчика DEBUG :

    1. Значения задаются в 16-ой системе счисления (отметки типа hex или h не ставятся).
    1-байтовые значения задаются двузначными 16-ми числами.
    2-байтовые значения задаются четырёхзначными 16-ми числами.
    Например, 80 (1-байтовое), 1A80 (2-байтовое).

    2. Адреса задаются в 16-ой системе счисления.
    Например, 0100

    3. Диапазоны адресов задаются тремя способами:
    Например, диапазон 0100..011F:
    1-ый способ: 0100 L20

    2-ой способ: 0100 011F
    3-ий способ: 0100,011F

    4. Списки задается набором своих элементов (строк или однобайтовых чисел). Элементы списка отделяются друг от друга запятыми или пробелами.

    Например (приводятся 4 варианта задания одного и того же списка):
    1-ый способ: 'AA','BB','CC'
    2-ой способ: 'AA' 'BB' 'CC'
    3-ий способ: 41,41,42,42,43,43
    4-ый способ: 41 41 42 42 43 43

    В приводимом ниже комментарии дана краткая характеристика каждой макрокоманды отладчика:

    A  Вход в режим ассемблирования (набора ассемблерных команд)
    C  Сравнение содержимого ячеек двух диапазонов
    D  Вывод содержимого ячеек заданного диапазона
    E  Ввод данных в ячейки оперативной памяти
    F  Заполнение ячеек диапазона заданным рядом значений
    G  Запуск на исполнение
    ?  Вызов списка команд отладчика
    H  Калькулятор: вычисление суммы и разности заданных операндов
    L  Загрузка файла
    M  Перемещение ячеек указанного диапазона
    N  Задание имени сохраняемого / загружаемого файла (до выполнения команд L и W)
    Q  Выход из отладчика
    R  Просмотр регистров / изменение содержимого указанного регистра
    S  Поиск образца в заданном диапазоне
    Т  Трассировка с заданного адреса указанного количества команд
    U  Вывод списка ассемблерных команд заданного дипазона
    W  Запись на диск заданного фрагмента кода

    Макрокоманда ? отладчика DEBUG :

    Выводит на экран перечень макрокоманд отладчика от A до W.

    Результат её выполнения приведён выше.

    Макрокоманда D отладчика DEBUG :

    Выводит на экран содержимое ячеек заданного диапазона. Ниже приведены образцы выполнения команды без параметров, с одним параметром, с двумя параметрами.

    Выполнение команды D:


    Повторное выполнение команды D:


    Видно, что начальный адрес автоматически увеличился на 80 (80= 10*8 - система 16-ричная, то есть выведено 8 рядов по 16 значений в каждом ряду).

    Смысл приведённых выше данных:


    Команда D может использоваться с параметром – начальным адресом диапазона:


    Команда D может использоваться с двумя параметрами. Возможные варианты:


    Выше приведены 3 способа задания параметров диапазона.


    Выше приведено соотношение адресов и чисел, располагающихся в ячейках с этими адресами.

    Макрокоманда F отладчика DEBUG :

    Позволяет заполнять ячейки памяти элементами задаваемого списка значений.


    В данном случае ячейки заданного диапазона заполнены нулями.

    Макрокоманда E отладчика DEBUG :

    Предназначена для ввода значений в ячейки оперативной памяти. Ниже приведены образцы выполнения команды с одним параметром и двумя параметрами.

    Варианты выполнения команды E приведены ниже.


    Выше приведена команда ввода в ячейки 120..129 строки '0123456789'.


    Выше приведена команда ввода в ячейку 12A числа 24 (ASCII-код знака '$').


    Выше приведена команда ввода в ячейки 130..139 строки чисел 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.


    Выше приведена команда ввода в ячейки, начиная с адреса 140, значений непосредственно с клавиатуры. В ячейке с адресом 140 находится 0. Запечатлён момент ожидания ввода какого-либо значения.


    Выше приведена команда ввода в ячейки 140..147, чисел 40, 41, 42, 43, 44, 45, 46, 47, которые представляют собою ASCII -коды символов строки '@ABCDEFG'. Ввод осуществляется непосредственно с клавиатуры.


    Выше приведена команда ввода в ячейку 148 символа '$'.

    Макрокоманда A отладчика DEBUG :

    Макрокоманда предназначена для входа в режим ассемблирования. В этом режиме осуществляется набор ассемблерных команд. Ниже приведены образцы выполнения этой команды.


    Выше: вход в режим ассемблирования состоялся, однако, пока не набрано ни одного символа.


    Выше: первая команда набрана, однако, клавиша Enter не нажата. Это означает, что команда в ячейки оперативной памяти не введена.


    Выше: первая команда набрана и клавиша Enter нажата. Введённая в память команда MOV DX,140 занимает в памяти ячейки с адресами 100, 101, 102. Отладчик ожидает ввода следующей команды с адреса 103.


    Выше: 4 команды набраны и введены в ячейки оперативной памяти. Отладчик ожидает либо ввода 5-ой команды, либо выхода из режима ассемблирования.


    Выше: выход из режима ассемблирования (нажатие клавиши Enter) состоялся.

    Макрокоманда U отладчика DEBUG :

    Макрокоманда U дисассемблирует код, расположенный в указанном диапазоне, обеспечивая вывод на экран содержимого ячеек этого диапазона, интерпретируемого как набор ассемблерных команд.


    Выше: набор 4-х команд. Рассмотрим содержимое ячеек памяти, занятых кодами этих команд.

    MOV DX,0140 занимает 3 ячейки памяти 100..102

    100 – код команды MOV DX,... (число BA)
    101 – младший байт (40) числа 140
    102 – старший байт (1) числа 140

    MOV AH,09 занимает 2 ячейки памяти 103..104

    103 – код команды MOV AH,... (число B4)
    104 – 1-байтовый операнд (9) команды

    INT 21 занимает 2 ячейки памяти 105..106

    105 – код команды INT (число CD)
    106 – 1-байтовый операнд (21) команды

    NT 20 занимает 2 ячейки памяти 107..108

    107 – код команды INT (число CD)
    108 – 1-байтовый операнд (20) команды

    Псевдокоманды отладчика DEBUG :

    Псевдокоманды отладчика набираются в режиме ассемблирования (Assemble) отладчика. Псевдокоманды не компилируются в машинные коды.

    Псевдокоманда DB:

    позволяет заполнить текущие байты числами или строкой. Например:

    0138 DB 41 - ввод числа 41 (ASCII-код символа 'A') в ячейку памяти (адрес смещения = 0138)

    0139 DB 'A' - ввод символа 'A' в ячейку памяти (адрес смещения = 0139)

    013A DB 42 43 44 45 - ввод ряда чисел (42,43,44,45) в ячейки памяти (адреса смещения = 013A, 013B, 013C, 013D)

    013E DB 'BCDE' - ввод строки 'BCDE' в ячейки памяти (адреса смещения = 013E, 013F, 0140, 0141)



    Псевдокоманда DW:

    позволяет заполнить текущие пары байтов числами или строкой. Например:

    0138 DW 4142 - ввод слова 4142 в ячейки памяти (адрес смещения = 0138)

    013A DW 'AB' - ввод символов 'A' и 'B' в ячейки памяти (адреса смещения = 013A..013B)

    013C DW 4243 4445 - ввод ряда чисел (4243 и 4445) в ячейки памяти (адреса смещения = 013C и 013E)

    0140 DW 'BCDE' - ввод строки 'BCDE' в ячейки памяти (адреса смещения = 0140..0143)



    Псевдокоманда ORG:

    позволяет осуществлять передачу управление в режиме ассемблирования. Например:

    0100 ORG 0110 - передача управления в режиме ассемблирования на адрес смещения 0110

    0110 ▄ - после передачи управления адрес смещения принял значение 0110

    Макрокоманда G отладчика DEBUG :

    Макрокоманда запускает на исполнение код с указанного адреса.

    Рассмотрим запуск на исполнение программы ввода с клавиатуры строки.


    Комментарий к приводимому выше результату выполнения макрокоманд:

    E 150 4 - занесение в ячейку 150 числа 4 (ограничитель на количество вводимых с клавиатуры символов)

    E 101 50 - корректировка содержимого ячейки 101 (исправление адреса на 150)

    E 104 A - корректировка содержимого ячейки 104 (исправление номера функции прерывания INT 21 на 0A – ввод строки с клавиатуры)

    D 150 L10 – просмотр ячеек 150..15Fдо запуска на исполнение приводимого выше кода.

    U 100 108 – дисассемблирование диапазона 100..108 с целью просмотра команд.


    Команда запуска кода с адреса 100 набрана, но не запущена. Отладчик ожидает нажатия клавиши Enter.


    Программа запущена и ожидает ввода с клавиатуры строки.


    Строка 'ABC' набрана, но в память ещё не введена (не нажата клавиша Enter).


    Работа программы завершилась нормально. Смотрим результаты:



    Работа с файлами в отладчике Debug:

Работа с файлами в DEBUG может начинаться с момента загрузки самого отладчика.

Запуск отладчика DEBUG:

Запуск отладчика можно осуществлять двумя способами:

1-ый способ:

Debug Запуск отладчика

2-ой способ:

Debug prim.com Запуск отладчика с последующей загрузкой файла prim.com с адреса смещения 0100 (при этом, в пару регистров BX:CX заносится размер загружаемого файла)

Загрузка и запись файлов в отладчике DEBUG:

Загрузка и запись файлов в отладчике осуществляется командами отладчика:

L [адрес] - команда загрузки файла с указанного адреса смещения

W [адрес] - команда записи файла с указанного адреса смещения

Перед выполнением этих команд следует выполнить два действия:

1. Командой N задать полное имя файла и путь к нему.

2. В пару регистров BX:CX занести размер загружаемого / записываемого файла.

Пример: сохранить диапазон адресов 100..11B в файле PRIMER.COM.

-N C:\TEMP\PRIMER.COM  – ввод имени файла PRIMER.COM (расположен в папке TEMP диска C)

-R – просмотр содержимого регистров процессора (интерес представляет пара регистров BX:CX)

-R CX – вход в режим изменения содержимого регистра CX (с целью занесения в регистр числа 1C - количества сохраняемых ячеек диапазона адресов 100..11B)

-W 100 – запись в файл PRIMER.COM содержимого 1C ячеек памяти, начиная с адреса 100

Задания к лабораторной работе:

Выполнить следующие команды и прокомментировать результаты их выполнения:

-G= 100

-D 140 L40

-A 118

-U 100,11B

-E 140 41 42

-E 140 'ABCD'

-E 140

-F 140 L40 0