Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Макрокоманды отладчика 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
| Задания к лабораторной работе:
Выполнить следующие задания:
- Изучить содержание лабораторной работы (в часы самоподготовки).
- Повторить выполнение разобранных в работе примеров (в часы самоподготовки).
- Законспектировать примеры применения команд (в часы самоподготовки).
- Заполнить диапазон ячеек 120..137 символом «0».
- Заполнить диапазон ячеек 138..147 комбинацией символов «01».
- Заполнить диапазон ячеек 148..157 числами 3 и 9.
- Скопировать диапазон 148..157 в диапазон 158..167.
- Перенести диапазон 148..157 в диапазон 178..187.
- Ввести с адреса 118 строку «00001111», а с адреса 128 ввести строку «22223333». Склеить эти строки, расположив их с адреса 140.
- Подсчитать количество символов «$» в диапазоне 130..9FF.
- Подсчитать количество ассемблерных команд «INT» в диапазоне 300..4FF.
- Сохранить диапазон адресов 100..137 в файле PR_1.COM.
- Сохранить диапазон адресов 120..15F в файле PR_2.COM.
- Загрузить файл PR_1.COM с адреса 160.
- Загрузить файл 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 с.
|
Лабораторная работа № 2
Тема: «Микропроцессор i8086: способы адресации на примере простейших команд».
Краткая аннотация: данная работа посвящена знакомству с важнейшими способами адречации микропроцессора на примере простейших команд. К числу этих важнейших способов адресации относятся:
- прямая адресация;
- косвенная адресация.
Студент должен освоить важнейшие способы адресации процессора, научиться применять их для простейших команд процессора.
Приобретенный в ходе выполнения работы опыт должен позволить в последующем ориентироваться в листингах ассемблерных модулей
ЦЕЛЬ: Знакомство со способами адресации микропроцессора i8086 на примере простейших команд.
Введение.
|