Тестирование аппаратных средств с помощью отладчика
Цель: освоить приемы работы с отладчиком для тестирования компонентов компьютера.
Оборудование: компьютер, загрузочная дискета MS-DOS с отладчиком debug.exe.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Процесс тестирования можно разделить на отдельные части, называемые элементарными проверками. Элементарная проверка состоит в подаче на объект тестового воздействия и в измерении (оценке) ответа объекта на это воздействие. Алгоритм тестирования определяется как совокупность и последовательность элементарных проверок вместе с определенными правилами анализа результатов последних с целью отыскания места в объекте, параметры которого не отвечают заданным значениям. Таким образом, диагностика - это контроль, но контроль последовательный, направленный на отыскание неисправного места (элемента) в диагностируемом объекте.
Обычно тестирование начинается по сигналу ошибки, выработанному схемами контроля компьютера или в случаи возникновения сбоев в работе ПК.
УРОВНИ ДИАГНОСТИЧЕСКИХ ПРОГРАММ
1. Тестовые средства компьютера (тест POST) (микродиагностика);
2. Системные средства (средства операционной системы);
3. Дополнительные программы, которые либо поставляются вместе с комплектующими компьютера. Debug.exe - программа-отладчик, которую используют с целью:
наблюдений и отладки программ на ассемблере и машинных кодах.
трассировки программ, установки точек останова, просмотра областей памяти, ввода программ непосредственно в память ПК.
представления загружаемых программ как программ .СОМ.
Debug появился в операционной системе MS-DOS. Под более поздние версии операционных систем работает через эмулятор MS-DOS и имеет ограниченные возможности. Вызывается через командную сроку DEBUG или DEBUG [[диск:] [маршрут] имя_файла [параметры]]. Например: DUBUG C:\...\file.com.
Программа является консольным приложением и предназначена для создания или изменения кода файлов. С ее помощью можно создавать простые приложение под MS-DOS и отслеживать их работу.
ПРАВИЛА НАБОРА КОМАНД В DEBUG.EXE
НЕ РАЗЛИЧАЕТСЯ РЕГИСТР букв.
ПРОБЕЛЫ в командах используется только для разделения параметров.
Вводимые числа должны быть в ШЕСТНАДЦАТЕРИЧНОЙ системе счисления, причем БЕЗ завершающей буквы п.
Сегмент и смещение записываются с использованием двоеточия, в формате СЕГМЕНТ:СМЕЩЕНИЕ, например, CS:3C1 (смещение ЗС1п в сегменте кода) или 40:17 (смещение 17п в сегменте, адрес начала которого - 40[0]п).
КРАТКАЯ ТАБЛИЦА КОМАНД DEBUG.EXE
Команда | Описание | Формат |
A (Assemble) | Транслирование команд ассемблера в машинный код; адрес по умолчанию - CS:0100h. | А [<адрес_начала_кода>] |
С (Compare) | Сравнение содержимого двух областей памяти; по умолчанию используется DS. В команде указывается либо длина участков, либо диапазон адресов. | С < начальный_адрес_1> 1_<длина > <начал ьный_адрес_2> С <начальный_адрес_1> <конечный_адрес_1> <начал ьный_адрес_2> |
D (Display/Dump) | Вывод содержимого области памяти в шестнадцатеричном и ASCII-форматах. По умолчанию используется DS; можно указывать длину или диапазон. | D [<начальный_адрес> [L<длина>]] D [начальный_адрес конечный_адрес] |
Е (Enter) | Ввод в память данные или инструкции машинного кода; по умолчанию используется DS. | Е [<адрес> [<инструкции/данные>]] |
F (Fill) | Заполнение области памяти данными из списка; по умолчанию используется DS. Использовать можно как длину, так и диапазон | F <начальный_адрес_1> 1_<длина> '<данные>' F <начальный_адрес> <конечный_адрес> <данные>' |
G (Go) | Выполнение отлаженной программы на машинном языке до указанной точки останова; по умолчанию используется CS. При этом убедитесь, что IP содержит корректный адрес. | G [=<начальный_адрес>] <адрес_останова> [<адрес_останова> ...] |
H (Hexadecimal) | Вычисление суммы и разности двух шестнадцатеричных величин. | H <величина_1> <величина_2> |
I (Input) | Считывание и вывод одного байта из порта | I <адрес_порта> |
L(Load) | Загрузка файла или данных из секторов диска в память; по умолчанию – CS:100h. Файл можно указать с помощью команды N или аргумента при запуске debug.exe. | L [<адрес_в_памяти_для_загрузки>] L [<адрес_в_памяти_для_загрузки> [<номер_дис ка> <начальный_сектор> <количество_секторов>]] |
M (Move) | Копирование содержимого ячеек памяти; по умолчанию используется DS. Можно указывать как длину, так и диапазон. | М <начальный_адрес> L<длина> <адрес_назначения> М <начальный_адрес> <конечный_адрес> <адрес_назначения> |
N (Name) | Указание имени файла для команд L и W. | N<имя_файла> |
O (Output) | Отсылка байта в порт. | О <адрес_порта> <6айт> |
P (Proceed) | Выполнение инструкций CALL, LOOP, INT или повторяемой строковой инструкции с префиксами REPnn, переходя к следующей инструкции | Р [=<адрес_начала>] [<количество_инструкций>] |
Q (Quit) | Завершение работы debug.exe. | Q |
R (Register) | Вывод содержимого регистров и следующей инструкции. | R <имя_регистра> |
S (Search) | Поиск в памяти символов из списка; по умолчанию используется DS. Можно указывать как длину, так и диапазон. | S <начальный_адрес> L<длина> '<данные>' S <начальный_адрес> <конечный_адрес> '<данные>' |
T(Trace) | Пошаговое выполнение программы. Как и в команде Р, по умолчанию используется пара CS:IP. Замечу, что для выполнения прерываний лучше пользоваться командой Р. | Т [=<адрес_начала>] [<количество_выполняе мых_команд>] |
U (Unassemble) | Дизассемблирование машинного кода; по умолчанию используется пара CS:IP. К сожалению, debug.exe некорректно дизассемблирует специфические команды процессоров 80286+, хотя они все равно выполняются корректно. | U [<начальный_адрес>] U [<начальный_адрес конечный_адрес>] |
W (Write) | Запись файла из debug.exe; необходимо обязательно задать имя файла командой N, если он не был загружен. А программы записываются только в виде файлов .СОМ! | W [<адрес> [<номер_диска> <начальный_сектор> < количество_секторов> ]] |
Примечание: Символами [] отмечены необязательные параметры.
В Windows можно также запустить debug.exe и в появившимся консольном окне ввести команды, которые приведут к сбросу настроек BIOS Setup:
-О 70 33 70 - порт 33 – байт
-О 71 33
-Q
Сброс основан на записи информации в ячейки CMOS без изменения контрольной суммы. При выполнении процедуры POST, вычисляется контрольная сумма содержимого CMOS, в случае ошибки происходит сброс в начальное значение.
Т.к. адреса не всегда совпадают с 33, то имеет смысл сбросить ячейки в диапазоне 30 - 33, 40, 70. Будьте осторожны, некоторые настройки ОС также будут сняты, поэтому после перезагрузки может потребоваться ее переустановка.