Макрокоманды отладчика 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. Изучить содержание лабораторной работы (в часы самоподготовки).
  2. Повторить выполнение разобранных в работе примеров (в часы самоподготовки).
  3. Законспектировать примеры применения команд (в часы самоподготовки).
  4. Заполнить диапазон ячеек 120..137 символом «0».
  5. Заполнить диапазон ячеек 138..147 комбинацией символов «01».
  6. Заполнить диапазон ячеек 148..157 числами 3 и 9.
  7. Скопировать диапазон 148..157 в диапазон 158..167.
  8. Перенести диапазон 148..157 в диапазон 178..187.
  9. Ввести с адреса 118 строку «00001111», а с адреса 128 ввести строку «22223333». Склеить эти строки, расположив их с адреса 140.
  10. Подсчитать количество символов «$» в диапазоне 130..9FF.
  11. Подсчитать количество ассемблерных команд «INT» в диапазоне 300..4FF.
  12. Сохранить диапазон адресов 100..137 в файле PR_1.COM.
  13. Сохранить диапазон адресов 120..15F в файле PR_2.COM.
  14. Загрузить файл PR_1.COM с адреса 160.
  15. Загрузить файл PR_2.COM с адреса 190.

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА:

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; просмотров: 1881;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.