20.02.2019

Что такое пафосная. Что такое пафос, что означает это слово? Пафосные люди и выражения. Помпезность в речи


Debug — что это? Debug, или отладка. в компьютерном программировании и разработке, — это многоэтапный процесс, который включает определение проблемы, выявление ее источника, а затем исправление сбоя или выбор способа дальнейшей работы. Последним шагом отладки является проверка корректного исправления.

Введение

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

Debug — что это и как работает? Тактика может включать интерактивную отладку, анализ потока управления, модульное и интеграционное тестирование, анализ файлов журналов, мониторинг на уровне приложений или системы, дампы памяти и профилирование.

Debug — что это? Описание процесса

Debug — это штатный процесс поиска и удаления сбоев, ошибок или аномалий компьютерной программы, которые программисты обрабатывают с помощью инструментов отладки. Отладка проверяет, обнаруживает и исправляет ошибки, чтобы обеспечить правильную работу приложения в соответствии с установленными спецификациями.

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

Debug в контексте MS-DOS

В MS-DOS Debug — что команда, которая позволяет программистам исследовать и изменять источники содержимого памяти, которые происходят в операционной системе. Методика предоставления инструкций по компьютерным задачам через интерфейс командной строки изначально использовалась в средах MS-DOS для перевода кода ассемблера в рабочий код и машинного языка в исполняемые (debug.exe) файлы.

Debug позволяет разработчикам просматривать содержимое памяти, вносить изменения, а затем выполнять COM, .exe и другие типы файлов.

История

Microsoft впервые представила команду debug в MS-DOS 1.0 в качестве метода Была добавлена ​​дополнительная функциональность — инструмент ориентировался на различные операционные задачи, такие как отображение содержимого части памяти, ввод данных по указанному адресу, запуск исполняемых файлов памяти, шестнадцатеричная арифметика и манипуляция регистрационной памятью.

Важный этап обнаружения ошибок

После выявления программного сбоя необходимо найти ошибку в коде (Debug error). На этом этапе полезно просмотреть ведение журнала кода и использовать автономный инструмент отладчика или компонент отладки интегрированной среды разработки (IDE). Изначально обнаруживаются и фиксируются ошибки в наиболее популярных функциях. В некоторых случаях модуль, представляющий проблему, очевиден, а сама строка кода — нет. В этом случае модульные тесты, такие как JUnit и xUnit, которые позволяют программисту запускать определенную функцию с конкретными входами, могут быть полезны при отладке.

Процесс отладки

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

Общие инструменты отладки

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

Поиск и удаление ошибок программного обеспечения

Некоторые инструменты, особенно инструменты с и языки сценариев, не запускаются в среде IDE и требуют ручного подхода к отладке. Такие методы включают в себя сброс значений в журнал, расширенные «печатные» заявления, добавленные во время выполнения кода или жестко закодированные debug-команды (например, wait), которые имитируют точку остановки, ожидая ввода клавиатуры в определенное время.

Debug Dump Files — можно ли удалить?

Многие пользователи после возникновения сбоя обнаруживают в месте хранения программы системные файлы. Документы носят наименование Debug Dump Files. Можно ли удалить их? Это отладочные файлы, которые создаются после нарушения работы ПО, чтобы помочь определить причину возникновения ошибки. Если вы не пытаетесь устранить проблему, то можете удалить их.

Отладчик 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), затем введите программу

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

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

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

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

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

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

С 100L100 300 (Enter)

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

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

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

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

D 0:0,7F (Enter)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

F 100L4000 00 (Enter)

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

D 100L4000 (Enter)

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

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

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

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

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

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

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

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

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

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

MOV ,1234

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

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

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

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

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

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

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

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

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

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

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

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

L 1000 0 0 1 (Enter)

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

D 1000L200 (Enter)

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

U 1000L200 (Enter)

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)

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

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

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

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

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

О 3F2 10 (Enter)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

T <число> (Enter)

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

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

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

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

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

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

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

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

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.


Лабораторная работа

"Изучение команд отладчика DEBUG"

Отладчик DEBUG предназначен для решения широкого круга задач. К ним относятся, например следующие задачи:

Изучение текущего содержимого оперативной памяти;

Редактирование отдельных секторов на флоппи-дисках и на винчестере;

Дизассемблирование.COM -файлов;

Разработка и отладка собственных программ на языке ассемблера;

Изучение работы программ и их модификация;

Тестирование периферийного оборудования для работы с портами ввода /вывода напрямую (в диалоговом режиме);

Изучение системы команд процессора, прерываний BIOS и MS-DOS.

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

В версии MS-DOS 6.22 размер отладчика составляет 15718 байт. Существует два способа запуска отладчика: debug ENTER и debug filename ENTER. После запуска отладчика загружается в оперативную память, а содержимое сегментных регистров CS, DS, ES, SS на первый свободный параграф сразу после самого отладчика. Регистр IP устанавливается равным 100.

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

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

Для исполнения любой команды надо нажать клавишу "Enter".

Рассмотрим непосредственно команды отладчика DEBUG .

А-команда ассемблирования(ASSEMBLE).

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

А < число >

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

DB 1 , 2 ,3 ,"example"

DW 1000,2000,"FFFF"

Отладчик поддерживает мнемоники всех команд процессора 80286. .При ассемблировании команд JMP CALL по умолчанию, если это возможно, используется SHORT-вариант этих команд, но можно указывать перед адресом переход NEAR и FAR, что приведет к генерации соответствующих команд.

Сначала наберите A 100 ,затем введите программу

Выход из режима ввода программы осуществляется нажатием клавиши ENTER после перехода к пустой строке вслед за последней командой программы.

В данном примере показан метод организации задержки путем "прокрутки" двух циклов. Запустить эту программу можно, набрав команду

Здесь приведена программа забивки экрана символом "!"

Затем надо ввести программу

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

MOV AX,21 ;Запись значения 21H в регистр AX

MOV AX, ;запись в АХ содержимого ячейки памяти с адресом 21H

С-сравнение(COMPARE).

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

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

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

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

Другой вариант той же команды

Сравнить первые 100 -16 байт оперативной памяти с последними

C 0:0L100 F000:FF00

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

D-вывод на экран содержимого памяти (DUMP).

Эта команда даёт на дисплее коды из указанной области оперативной памяти, представляемых в шестнадцатиричной системе исчисления, а справа их представление в ASCII-символах. Кодовые комбинации, не имеющие символьного представления в стандарте ASCII, отображаются точками.

В строке умещается 16 байт, при этом справа указывается полный адрес самого левого байта. Таким образом, в одной строке приводится шестнадцатиричный дамп, а также ASCII-дамп шестнадцати байт оперативной памяти.

Если команда D дана без параметров, то всего на экране отображается 128 байт (80H) в восьми строках. В каждой строке имеется знак "-", разделяющий 16 байт пополам - между 8-ым и 9-ым байтами.

Для того, чтобы просмотреть указатели-вектора первых тридцати двух прерываний (20Н),надо ввести команду

Другой вариант без указания диапазона

Первые четыре байта дают вектор прерывания INT0 ,следующие четыре

Просмотр последних шестнадцати байт из ПЗУ:

Просмотр области оперативной памяти, используемой BIOS:

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

Е- команда изменения содержимое памяти (ENTER) .

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

E <адрес>

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

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

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

2)"ENTER". Это приведет к выходу из режима побайтного редактированию на командный уровень отладчика,

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

Изменим значение счетчика системных часов. Введем команду

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

F-команда заполнения (FILL).

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

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

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

F 5000L1000 00FF

Заполнит отрезок памяти длиной 4096 байт (1000Н) повторяющейся парой байтов 00 FF , начиная с адреса

G- команда запуска программы (GO).

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

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

Исполнение этого оператора сводится к передаче управления адресу CS:IP.

б)G= < адрес >

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

Например, оператор

Приводит к запуску процедуры POST (программа самодиагностики ЭВМ

в) G < адрес >

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

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

В этом случае производится запуск программы с указанного после знака = адреса в случае достижения программой команды с величиной адреса, указанного вторым (др. адрес), происходит останов.

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

Н- команда шестнадцатиричной арифметики (HEXARITHMETIC).

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

Получаем 02A9 (сумма) и 0095 (разность).

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

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

I<адрес порта>

Эта команда даст состояние младшего байта счетчика системных часов. Исполнение команды I42 , с её повторением даст нам младший и старший байты счетчика, связанного с динамиком.

N-команда указания имени (NAME).

В этой команде задаётся имя файла, который далее будет считываться с диска командой L, либо записываться на диск командой W.

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

N <имя_файла >

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

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

L-команда загрузки с диска (LOAD).

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

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

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

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

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

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

М-команда копирования содержимого части оперативной памяти (MOVE).

Синтаксис команды следующий

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

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

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

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

Обнулим исходное содержимое

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

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

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

Р-высокоуровневая трассировка (PROCEED).

Эта команда также, как команда Т, предназначена для трассировки программ.

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

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

Р =<адрес> <число инструкций>

Можно опустить любой из двух параметров командной строки: "адрес" и/или "число инструкций". Параметр "адрес" задает начальный адрес, начиная с которого будет производиться трассировка, а параметр "число инструкций" будет указывать общее число инструкций. Обязателен ввод символа =при указании адреса для того, чтобы не спутать адрес с числом исполняемых инструкций.

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

Q- команда выхода из отладчика (QUIT).

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

R-команда изменения содержимого регистров (RTGISTER), просмотр значений отдельных регистров и регистра флагов с возможностью их изменения.

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

R-<имя_регистра>

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

AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, IP, F(регистр флагов)

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

Флаг переполнения OV NV

Флаг направления DN UP

Флаг маск. прерывания EI DI

Флаг знака NG PL

Флаг нуля ZR NZ

Флаг доп. Переноса AC NA

Флаг чётности PE PO

Флаг переноса CY NC

Значение флагов печатаются в строку. Сразу же за этим в строке печатается знак черты "-" , отладчик переходит в состояние ожидания ввода с клавиатуры. Нижеприведенная команда изменяет 1,3,5 и 7-й флаги:

OV DN EI NG ZR AC PE CY - PO NZ DI NV

Порядок следования обозначений флагов и пробелы при этом не имеют значения.

S- команда поиска упорядоченного набора байтов (SEARCH).

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

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

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

Предположим, что мы хотим определить встречается цепочка "DOS"(коды 44 4F 53) в первых 32К оперативной памяти. Для этого необходимо ввести команду

S 0:0L8000 44 4F 53

T- команда трассировки (TRACE).

Эта команда позволяет исполнить одну или несколько инструкций в режиме трассировки c печатью содержимого всех регистров и мнемоники следующей декодированной исполняет инструкции. После трассировки текущей инструкции указатель IP сдвигается так, что он указывает на следующую инструкцию.

Команда Т

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

Т <число>

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

Т=<адрес>

Трассирует одну инструкцию по указанному адресу

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

Т=<адрес><число_инструкций>

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

U- команда дизассемблирования (UNASSEMBLE).

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

Общий синтаксис:

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

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

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

Если при запуске отладчика переадресовать вывод в файл, то можно получить листинг дизассемблированной программы. При этом команду U и Q (выход из отладчика) придется набирать "вслепую" без эхо-печати на дисплее.

W-команда записи на диск (WRITE).

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

Запись в секторы на диск производится командой

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

Эта команда записывает на диск не более 80Н секторов, число секторов не более 80.

Параметр "адрес команды" означает адрес оперативной памяти, начиная с которого содержимое памяти копируется на диск.

Параметр "номер диска" указывает драйв, на который производится запись (0-диск А:, 1-диск В:)

Параметр "начальный сектор" указывает номер логического сектора, начиная с которого будет производиться загрузка образа оперативной памяти.

Параметр "число секторов" указывает общее количество записываемых на диске секторов

Запись в файл на диске производится командой W без аргументов. Однако, предварительно необходимо командой N указать имя файла, куда будет производиться запись, а также в пару регистров BX:CX занести длину записываемого файла. Начало области памяти, откуда будет производиться запись, всегда по умолчанию является байтом с адресом CS:100.

Пример записи файла на диск:

BX 0000 - это старое значение содержимого регистра

: 0 - новое значение

: А - размер файла для записи 10 байт (0АH)

W - запись файла на диск, с которого загружен Debug.exe

1. Изучить команды программы DEBUG по описанию лаб. работы.

2. Загрузить с дискеты операционную систему MS DOS 6.22 , запустить программу debug.exe и проверить действие команд с примерами, отличающимися от приведенных в описании, записать эти примеры в отчёт по лаб. работе. При проверке работы программ на ассемблере рекомендуется использовать команды T и R.

3. Загрузить два массива памяти объёмом 10 байт с адреса 100Н и 200Н одинаковыми кодами 55Н (команды F и M), изменить содержимое одной ячейки памяти и с помощью команды C определить адрес этой ячейки памяти. Все действия отразить в отчёте.

4. Составить простую программу на ассемблере с выводом кодов на дисплей (см. пример 2 в разделе команды А), записать эту программу на дискету в виде файла iit.com, (использовать команду W без параметров) выйти из программы debug в DOS и запустить её, набрав в командной строке iit.com. Проверить правильность её работы. Войти в программу debug и загрузить в неё файл iit.com и проверить правильность загрузки командой U.


© 2024
colybel.ru - О груди. Заболевания груди, пластическая хирургия, увеличение груди