русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ОПИСАНИЕ КОМАНД ОТЛАДЧИКА DEBUG


Дата добавления: 2014-11-28; просмотров: 11319; Нарушение авторских прав


 

Отладчик DEBUG предназначен для решения широкого круга задач. К ним относятся, например, следующие задачи: изучение текущего содержимого оперативной памяти; дизассемблирование .COM и .EXE-файлов;разработка и отладка собственных программ на языке ассемблера; изучение работы программ и их модификация; тестирование периферийного оборудования, для работы с портами ввода/вывода напрямую (в диалоговом режиме); изучение системы команд процессора, прерываний BIOS и MS-DOS.

Существует два способа запуска отладчика:

debug (Enter) или debug filename (Enter)

После запуска отладчик загружается в оперативную память, а содержимое сегментных регистров CS, DS, ES, SS - на первый свободный параграф сразу после самого отладчика. Регистр IP устанавливается равным 100.

Отладчик DEBUG имеет специальный указатель адреса данных, который используется по умолчанию во многих командах отладчика.

После запуска отладчика слева на экране появляется черта [-], которая указывает на то, что отладчик ждет команду. Все числа интерпретируются отладчиком в шестнадцатеричной системе исчисления.

КОМАНДЫ ОТЛАДЧИКА DEBUG

А - команда ассемблирования. Эта команда позволяет вводить программы с использованием мнемокода команд в оперативную память. Ввод команды отладчика

А <число> (Enter)

заставляет его перейти в режим приема команд с клавиатуры и последовательного размещения их, начиная с адреса, равному указанному в команде. При вводе можно использовать две популярные инструкции ассемблера DB и DW. Например:

DB 1,2,3,”EXAMPLE”

DW 1000,2000,”FFFF”

Отладчик поддерживает мнемоники всех команд процессора, а также и сопроцессора 80Х87. При ассемблировании команд JMP и CALL по умолчанию, если это возможно, используется SHORT - вариант этих команд. Но можно указывать перед адресом перехода NEAR или FAR, что приведет к генерации соответствующих команд. Мнемоникой оператора RET, соответствующего дальнему вызову CALL FAR является RETF. Возможно, а в сомнительных случаях необходимо, использовать указатели WORD PTR или BYTE PTR. При вводе программы допускается печать префиксов CS:, ES:, SS: впереди команды в той же строке.



Пример. Программа заполнения экрана символом “!”.

Наберите А 200 (Enter), затем введите программу

MOV CX, 1000

MOV AX, 0E21

INT 10

LOOP 203

INT 20

В конце программы стоит команда INT 20, обеспечивающая возврат управления обратно на монитор команд отладчика. Запустите эту программу по команде

G=200(Enter).

С - сравнение. Зта команда сравнивает побайтно две области памяти и печатает все различия между ними в форме

<адрес> <содержимое> <содержимое> <адрес>

В данной записи слева приведена информация о первой области памяти, а справа - о второй.

Пример. Сравнить два блока памяти длинной 256 байт. Первый начинается с адреса 100, второй с адреса 300.

Для этого надо набрать

С 100L100 300 (Enter)

Эта команда может быть полезна, например, при проверке на идентичность двух дискет. Для этого в соседние области памяти загружаются интересующие нас соответствующие блоки этих дискет, которые затем анализируются командой С.

D - дамп оперативнойй памяти. Эта команда дает на дисплее распечатку указанной области оперативной памяти, представленной в шестнадцатеричной системе счисления, а справа дает их символьное представление. Причем, кодовые комбинации, не имеющие символьного представления в стандарте ASCII, изображаются точками. В строке отображается шестнадцать байт. При этом справа указывается полный адрес самого левого бaйта. Таким образом, в одной строке приводится шестнадцатеричный дамп, а также ASCII-дамп шестнадцати байт оперативной памяти. Если команда D дана без параметров, то всего на экране отображается 128 байт (80Н) в восьми строках. В каждой строке имеется знак “-“, разделяющий 16 байт пополам: между восьмым и девятым байтами.

Пример. Просмотреть указатели-вектора первых тридцати двух прерываний (20Н).

Необходимо ввести команду

D 0:0,7F (Enter)

Е - команда изменения содержимого байтов. Эта команда позволяет побайтно просматривать содержимое памяти вперед и назад, и в случае необходимости, изменять содержимое просматриваемых байтов.

Ввод команды:

Е <адрес> (Еnter)

вызывает переход отладчика в режим редактирования отдельных байтов. При этом печатается содержимое текущего байта в шестнадцатеричной форме, за которым следует точка. После этого можно набрать величину нового содержимого байта, но можно и оставить содержимое байта прежним, не набирая ничего. Затем необходимо набрать один из трех управляющих символов:

а) “пробел”, что означает переход к редактированию следующего байта;

б) “Enter”. Это приведет к выходу из режима побайтного редактирования на командный уровень отладчика;

в) “-“. Нажатие этого знака приведет к переходу на редактирование предыдущего байта.

Пример. Изменить значение счетчика системных часов.

Введем команду

E 40:6C (Enter)

и наберем четыре числа 70 70 70 70, разделенных пробелами, затеv символ возврата каретки 0D. Далее необходимо выйти из отладчика и выполнить команду time операционной системы.

F - команда заполнения. Эта команда позволяет заполнить содержимоt указанного диапазона оперативной памяти повторяющейся цепочкой байтов заданным и значениями. В частности, когда цепочка состоит из одного байта, эта команда позволяет обнулить нужную область памяти, когда байт равен нулю, а также занести во все биты единицу, заполняя байтом равным FF.

Команда имеет следующий синтаксис:

F <диапазон_памяти> <цепочка байтов> (Enter)

Пример. Заполнить область памяти, начинающуюся с адреса DS:0100 нулями общим числом 16384 байта (400016).

F 100L4000 00 (Enter)

Проверить командой

D 100L4000 (Enter)

G - команда запуска программы programmy. Эта команда предназначена для запуска программы на исполнение. При этом, если той области памяти, где хранятся данные, передается управление как программе, компьютер “зависает”, и требуется его повторный запуск. В случае, когда в программе имеются серьезные ошибки (например, отсутствует оператор INT 20 возврата на командный уровень отладчика), попытка исполнить ее с помощью оператора G также приводит к зависанию компьютера.

Этот оператор обычно используется в одной из следующих четырех форм:

а) G (Enter)

Исполнение этого оператора сводится к передаче управления адресу CS:IP. Значения CS и IP можно узнать набрав команду R (Enter)дампа всех регистров процессора;

б) G=<адрес> (Enter)

При этом производится запуск программы по указанному адресу.

в) G <адрес> (Enter)

В этом случае программа запускается с адреса CS:IP и при достижении оператора с указанным адресом осуществляется BREAK- остановка исполнения программы. Распространенной ошибкой начинающих является пропуск знака “равно” при использовании команды G. В этом случае указанный адрес воспринимается как адрес останова, и если CS:IP указывал, например на область данных, то компьютер “зависнет”.

г) G=<адрес> <другой_адрес> (Еnter)

в этом случае производится запуск программы с указанного после знака “=” адреса и в случае достижения программой команды с величиной адреса, указанного вторым (другой адрес), происходит остановка. Такой способ остановки программы называется введением контрольной точки останова. При указании контрольной точки останова соответствующий байт команды по этому адресу заменяется командой INT 3, имеющей размер 1 байт. При достижении контрольной точки исходное значение байта восстанавливается.

Пример

Сначала введем программу (с помощью команды А 100):

MOV BX,10

MOV [BX+110],1234

DEC BX ;здесь поставить контрольную точку

DEC BX

JNE 103

INT 20

Запустим программу командой G=100 109 (Еnter) Программа, дойдя до адреса 109, остановилась и дала полный дамп регистров.

Н - команда шестнадцатиричной арифметики. Эта команда позволяет получить сумму и разность двух указанных в команде шестнадцатеричных чисел.

Пример

Н 0 1 (Enter)

В ответ получим 1 (сумма) и FFFF (разность).

I - команда ввода из порта. Эта команда позволяет прочесть содержимое порта ввода/вывода с указанным адресом, распечатав его на экране в шестнадцатиричном виде.

Синтаксис команды:

I <адрес_порта> (Enter)

Пример

I 61 (Enter)

При этом мы получим содержимое порта В из программируемого периферийного интерфейса 82 .

L - команда загрузки с диска. Эта команда позволяет загружать как логические сектора с флоппи-дисков и винчестеров, так и отдельные файлы. Загрузка секторов с диска производится командой:

L<адрес><номер_диска><начальный_сектор><число_секторов> (Enter)

Здесь “адрес” означает начальный адрес в оперативной памяти, начиная с которого будет последовательно размещаться содержимое блоков-секторов. Переменная “номер диска” указывает с какого диска будет производиться загрузка. Число 0 означает диск А, число 1 - диск В, число 2 - диск С и т.д. Следующие две переменные соответственно указывают с какого сектора начинается чтение и общее число прочитанных секторов.

Пример

Загрузить BOOT-блок с флоппи-диска А: в оперативную память, начиная с адреса DS:1000, для чего необходимо выполнить команду

L 1000 0 0 1 (Enter)

Затем содержимое ВООТ-блока можно распечатать командой

D 1000L200 (Enter)

а также дизассемблировать

U 1000L200 (Enter)

Загрузка файлов в оперативную память производится двумя командами N и L. Сначала надо командой N указать отладчику имя необходимого файла:

N <имя_файла> (Enter)

Далее необходимо исполнить команду L без аргументов. В результате этих действий файл (за исключением файлов с расширением ЕХЕ), будет загружен в оперативную память начиная с адреса CS:100. Если загружаемый файл имеет расширение ЕХЕ, то отладчик загрузит файл, начиная с адреса СS:0. Число прочитанных байтов хранится в регистровой паре ВХ:СХ после выполнения команды L.

M - команда копирования.Эта команда копирует содержимого части оперативной памяти в другую область оперативной памяти. Синтаксис команды следующий:

М <диапазон> <начальный_адрес> (Enter)

Здесь “диапазон” указывает на копируемую область памяти, а “начальный_адрес” - на адрес первого байта, начиная с которого размещаются скопированные данные. Эту команду можно использовать для временного сохранения содержимого оперативной памяти с ее последующим восстановлением.

Пример

В начале просмотрим содержимое памяти:

D 100L100 (Enter)

Затем сохраним часть памяти, начиная с адреса

M 100L100 1000 (Enter)

Затрем исходное содержимое

F 100L100 0 (Enter)

Проверим обнуление

D 100L100 (Enter)

И наконец восстановим исходное содержимое

M 100L100 100 (Enter)

N - команда указания имени. Эта команда прежде всего, определяет имя файла, который далее либо будет считываться с диска командой L, либо записываться на диск командой W. Синтаксис этой команды следующий:

N <имя_файла> (Enter)

Пример

Прочитаем с диска в оперативную память файл AUTOEXEC.BAT. Для этого выполним

N C:\AUTOEXEC.BAT (Enter)

L (Enter)

В регистровую пару ВХ:СХ, будет занесена длина загруженного файла в байтах.

О - команда вывода данных в порт. Эта команда позволяет вывести указанный байт в порт с заданным адресом. Она полезна для тестирования работы периферийных устройств и корпусов на системной плате в диалоговом режиме. Синтаксис команды:

О <адрес_порта> <величина> (Enter)

Здесь вместо «адреса_порта» подставляется адрес необходимого порта в диапазоне 0-FFFF, а вместо “величина” - значение, которое затем загружается в порт. Если порт шестнадцатибитный, то “величина” может быть четырехразрядным шестнадцатиричным числом, которое загружается в порт.

Пример

Мотор дисковода А: для флоппи-диска можно включить следующей командой

О 3F2 10 (Enter)

Р - команда высокоуровневой трассировки. Эта команда также, как и команда Т, предназначена для трассировки программ. Однако, в отличие от Т трассировки, эта трассировка менее детальна. Она не отслеживает досконально подпрограммы и программные прерывания, а также циклы LООР и строковые команды с повторением. Как и в случае Т-трассировки после каждой команды печатается содержимое всех регистров и следующая исполняемая команда. Синтаксис команды:

Р=<адрес> <число_команд> (Enter)

Можно опустить любой из двух параметров командной строки: <адрес> и/или <число_команд>. Параметр<адрес> задает начальный адрес, начиная с которого будет производиться трассировка, а параметр <число_команд> будет указывать общее число команд, которые будут исполнены после нажатия клавиши (Enter). Обязателен ввод символа “=” при указании адреса для того, чтобы не спутать адрес с числом исполняемых команд. Этот тип Р -трассировки крайне полезен при изучении общей логики выполнения программы, избавляя от утомительного отслеживания деталей. При начальном изучении программы необходимо начинать именно с Р -трассировки.

Пример

Введем, начиная с адреса 100, следующую программу

MOV AX,B800

MOV DS,AX

MOV BX,0

MOV CX,800

MOV AX,0321

M1: MOV [BX],AX

INC BX

INC BX

LOOP M1

INT 20

Затем проведем Р-трассировку. Для этого сначала введем команду Р=100 (Enter) и далее последовательные

Р (Enter)

После этого проведем обычную детальную Т-трассировку

Т=100 (Enter)

Т (Enter)

Q - команда выхода из отладчика. Команда Q приводит к выходу из отладчика на следующий верхний программный уровень. При этом рабочие файлы не сохраняются.

R - команда дампа/коррекции регистров. Эта команда позволяет просматривать содержимое всех регистров сразу, а также флаги, или просматривать значения отдельных регистров и регистра флагов с возможностью их изменения.

Команда:

R (Enter)

дает распечатку всех регистров, а также команды, на которую указывает CS:IP.

Команда:

R <имя_регистра> (Enter)

дает распечатку содержимого указанного регистра, и затем печатает двоеточие на следующей строке. После этого пользователь может нажать клавишу (Enter ) и выйти обратно на монитор команд отладчика, либо задать новое значение регистра перед нажатием клавиши (Enter). В последнем случае старое значение регистра заменится на новое. Возможные имена регистров: AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, IP, F (регистр флагов).

При использовании команды

R F (Enter)

надо учитывать, что кодирование значений флагов производится весьма специфическим образом. Ниже приводится таблица кодировки, где символьная пара слева соответствует значению 0 соответствующего флага, а справа - значению, равному 1 (флаг установлен):

 

Флаг Флаг сброшен Флаг установлен
флаг переноса NC CY
флаг паритета PO PE
флаг дополнительного переноса NA AC
флаг нуля-результата NZ ZR
флаг знака PL NG
флаг маскирования прерывания OI EI
флаг направления UP DN
флаг переполнения NV OV

 

При исполнении команды

R F (Enter)

значения флагов печатаются в строку в порядке, обратном к порядку в таблице. Сразу же за этим в строке печатается знак черты <->, отладчик переходит в состояние ожидания ввода с клавиатуры. Если пользователь нажмет только клавишу (Enter), то значения флагов не изменятся и произойдет возврат на монитор команд отладчика. Однако, перед этим пользователь может набрать новые значения некоторых флагов согласно кодировочной таблицы. Порядок следования при этом не существенен.

S - команда поиска. Команда поиска упорядоченного набора байтов позволяет провести поиск указанной цепочки байт в заданном диапазоне оперативной памяти и имеет синтаксис:

S <диапазон_памяти> <цепочка_байтов> (Enter)

Ответ выдается в виде списка адресов, начиная с которых располагается указанная цепочка байтов.

Пример

Предположим, нужно определить встречается ли цепочка символов “DOS” в первых 32К оперативной памяти. Для этого необходимо ввести команду

S 0:0L8000 44 4F 53 (Enter)

Т - команда трассировки. Эта команда позволяет исполнить одну или несколько команд в режиме трассировки с печатью содержимого всех регистров и мнемоники следующей декодированной исполняемой команды. После трассировки текущей команды указатель IР сдвигается так, что он указывает на следующую команду. Команда

Т (Enter)

производит трассировку одной текущей команды, на которую указывает CS:IP, с соответствующим изменением IP.

Команда

T <число> (Enter)

производит последовательную трассировку нескольких команд, общее число которых задается в команде.

Команда

Т=<адрес> (Enter)

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

Общий вид команды Т следующий:

Т=<адрес> <число_команд> (Enter)

Пример

Команда: Т=FFFF:0 (Enter)

производит трассировку первой исполняемой команды при первоначальном запуске компьютера.

U - команда дизассемблирования. Эта команда позволяет дизассемблировать программы, загруженные в рабочую область отладчика.Общий синтаксис:

U <начальный_адрес> <длина> (Enter)

или

U <начальный_адрес>,<конечный_адрес> (Enter)

Команда

U (Enter)

вызывает дизассемблирование 32 байт, начиная с байта, на который указывает CS:IP с выводом результирующего листинга на дисплей.

W - команда записи на диск. Эта команда позволяет записывать на диск (флоппи-диски или винчестер) в последовательные блоки указанный диапазон оперативной памяти, а также записывать в файлы. Запись в секторы на диск производится командой

W<адрес><номер_диска><начальный_сектор><число_секторов> (Enter)

Эта команда записывает на диск не более 80Н секторов, число секторов не более 80. Параметр <адрес> означает адрес оперативной памяти, начиная с которого содержимое памяти копируется на диск. Параметр <номер диска> указывает диск, на который производится запись (0-диск А:, 1-диск В:, ..., 80 - винчестер С:). Параметр <начальный сектор> указывает номер логического сектора, начиная с которого будет производиться загрузка образа оперативной памяти. Параметр <число секторов> указывает общее количество записываемых на диске секторов.

Пример

Скопируем в файл на диске содержимое ВIОS-области оперативной памяти. Предполагая наличие РС/АТ со стандартным ВIОS размером 64К, обнулим сначала регистр ВХ, а затем занесем в регистр СХ 2000Н. Далее зададим имя файла, куда будем копировать старшую половину ВIОS, командой

N ВIОS.СОМ (Enter)

И наконец, команда

W F000:Е000 (Enter)

занесет в файл ВIОS.СОМ содержимое BIOS.

 


Приложение



<== предыдущая лекция | следующая лекция ==>
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ | КОМАНДЫ ПРОЦЕССОРА 8086


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.009 сек.