Макрокоманды отладчика DEBUG.
Краткие сведения об отладчике DEBUG :
Debug – 16-разрядная утилита операционной системы MS DOS. Название программы происходит от Bugs – насекомые. На программистском слэнге Bugs означает «ошибки в программе». Используя Debug для пошаговой трассировки тестируемого кода, эти ошибки можно найти и исправить. |
Процедура загрузки отладчика DEBUG :
Располагается отладчик Debug в системной папке system32 папки WINDOWS (файл debug.exe). Запуск отладчика удобнее всего выполнять из меню Пуск/Выполнить. |
Режимы работы отладчика DEBUG :
o Основной режим работы отладчика Debug (характерная особенность – присутствие чёрточки и мигающего справа от неё курсора). Основной режим работы устанавливается автоматически после загрузки отладчика. В этом режиме можно набирать любые макрокоманды отладчика от A до W. Выход из этого режима означает завершение работы отладчика. o Режим ассемблирования. Вход в режим ассемблирования из основного режима работы отладчика осуществляется набором команды A. Признак нахождения в этом режиме – наличие адреса (например, 0CC0:0100) перед знаком курсора: После набора команды необходимо нажатием клавиши Enter ввести её в память (пока не нажата клавиша Enter команда в память не введена). Если команда набрана с ошибкой и нажата клавиша Enter, эта команда в память не вводится. Вместо этого отладчик предлагает ввести её повторно, по тому же самому адресу: Возвращение из режима ассемблирования в основной режим работы отладчика – нажатие клавиши Enter в пустой строке (когда не набрано ни одного символа), например, в строке 0CFC:0103. o Режим ввода данных. Данный режим может быть реализован во время выполнения макрокоманд E и R. В этом режиме вводятся данные в ячейки оперативной памяти или в регистры процессора: Возвращение из этого режима в основной режим работы отладчика – нажатие клавиши Enter. Продолжение работы в режиме ввода данных – нажатие клавиши пробел. Нажимая клавишу пробел, можно попасть на любую ячейку памяти и ввести в неё нужное число. Ввод значений завершается нажатием клавиши Enter. o Режим выполнения кода. Вход в режим выполнения кода из основного режима работы отладчика осуществляется набором команды G. Как правило, время нахождения в данном режиме – считанные мгновенья. Исключение – зависание программы или выполнение огромных циклов. Возвращение в основной режим работы отладчика осуществляется автоматически, без участия работающего с этим отладчиком человека. o Режим ввода информации с клавиатуры во время работы в режиме выполнения кода. Завершение этого режима и продолжение выполнения кода осуществляется нажатием клавиши Enter. o Режим трассировки выполняемого кода. В данном режиме процессор выполняет заранее заданное ограниченное количество команд. Вход в режим трассировки осуществляется набором команды T. Возвращение в основной режим работы осуществляется автоматически, без участия работающего с отладчиком человека. o Аварийное прекращение работы отладчика. Имеет место в случае, когда процессор пытается исполнить запрещённый в режиме эмуляции работы микропроцессора 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 значений в каждом ряду). Смысл приведённых выше данных: Примечание. В колонке адресов ячеек оперативной памяти формат адресов таков: XXXX:YYYY. XXXX – сегментная часть логического адреса (эта часть адреса в наших примерах не меняется, поэтому в последующем мы на неё внимания не обращаем). YYYY – смещение логического адреса (адрес смещения), именно на эту часть логического адреса мы в последующем постоянно будем обращать внимание. В приведённом выше примере XXXX = 0CFC (сегментная часть логического адреса), YYYY = 0100, 0110, 0120, 0130, 0140, 0150, 0160, 0170 (адреса смещений). Команда 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). Работа программы завершилась нормально. Смотрим результаты: |
Условие примерного задания :
Задание. Приступить к работе в отладчике: — очистить диапазон ячеек оперативной памяти: 100..17F; — просмотреть очищенный диапазон ячеек; — войти в режим ассемблирования и ввести код (вывод строки на экран); — выйти из режима ассемблирования; — просмотреть введённую программу; — ввести строку с предусмотренного программой адреса; — просмотреть диапазон ячеек, заполненных кодом; — выполнить запуск программы на исполнение. |
Порядок выполнения примерного задания :
Решение. — очистка диапазона ячеек оперативной памяти: 100..17F: F 100 17F 0 — просмотр очищенного диапазона ячеек: D 100 17F — вход в режим ассемблирования (с целью ввода простейшей программы): A 100 — выход из режима ассемблирования: в ожидании выхода из режима ассемблирования: по возвращении в основной режим из режима ассемблирования (нажата клавиша Enter): — просмотр введённой программы: U 100 108 — ввод строки с предусмотренного программой адреса: E 140 "Veni, vidi, vici.$" — просмотр диапазона ячеек, заполненных кодами программы: D 100 15F — запуск программы на исполнение: G=100 Выполнение задания завершено. |
Работа с файлами в отладчике 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 |
Задания к лабораторной работе:
Выполнить следующие задания:
|
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА:
1. Абель П. Язык ассемблера для IBM PC и программирования. - М.: Высшая школа, 1992.- 447 с. 2. Лямин Л.В. Макроассемблер MASM. - М.: Радио и связь, 1994.- 320 с. 3. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. – М.: "Компьютер", Финансы и статистика, 1992. –352 с. 4. Сван Т. Освоение Turbo Assembler. – Киев: "Диалектика", 1996. 5. Юров В. Assembler: учебный курс. – СПб: Питер, 1998. 6. Юров В., Хорошенко С. Assembler : учебный курс.-Санкт-Петербург: Питер, 1999. -672 7. Юров В. Assembler: Специальный справочник. – СПб: Питер, 2000. 8. Юров В. ASSEMBLER : практикум. (с дискетой).-Санкт-Петербург: Питер, 2002. -400 9. Юров В. Assembler: практикум – СПб: Питер, 2003.- 400 с. 10. Пирогов В.Ю. Ассемблер на примерах. - СПб.: БХВ-Петербург, 2005. - 416 с. 11. Пирогов В.Ю. Ассемблер для Windows. - 3-е изд. - СПб.: БХВ-Петербург, 2005. - 864 с. 12. Шнайдер О. Язык ассемблера для персонального компьютера фирмы IBM. Пер. с англ. под ред. Е.К.Масловского.-Москва: Мир, 1988. -405C. 13. Юров В.И. Assembler. Учебник для вузов. 2-ое изд. – СПб: Питер, 2005. - 637 с. 14. Использование Turbo Assembler при разработке программ. – Киев: "Диалектика", 1994. - 288 с. |
Дата добавления: 2016-06-29; просмотров: 2036;