
- •10.09.2012 — Лекция №1
- •12.09.2012 — Лекция №2
- •17.09.2012 — Лекция №3
- •23.09.2012 — Лекция №4
- •26.09.2012 — Лекция №5
- •1.10.2012 — Лекция №6
- •08.10.2012 — Лекция №7
- •08.10.2012 — Лекция №8
- •22.10.2012 — Лекция №10
- •24.10.2012 — Лекция №11
- •Команды микропроцессора x086.
- •03.12.2012 — Лекция №19
- •10.12.2012 — Лекция №21
- •17.12.2012 — Лекция №22
- •19.12.2012 — Лекция №23
08.10.2012 — Лекция №8
ОТЛАДЧИК ПРОГРАММЫ
De — удалить, Bug — жук.
Во время трансляции исходные программы Assembler'а сначала проверяют все метки и команды на синтаксические ошибки и формирует относительные значения программного счетчика. Дебагер — утилита, которая входит в состав ОС. Во время трансляции выделяет синтаксические ошибки и выводит их на экран в диалоговом режиме. Чтобы посмотреть, какие синтаксические ошибки имеются в программе, необходимо вывести листинг программы.
Во время первого прохода Дебаггер начинает формировать относительные переходы согласно уже имеющимся меткам, и после этого формирует исполняемый код в относительных адресах. Бывают программы с расширением COM. Эти программные модули находятся в одном сегменте памяти ЭВМ и не превышают 64 Кбайта. Если формируется файл.exe, то это более сложная структура и позволяет исполнять кодыбольшего размера, нескольких секмкнтов. Это описывается в заголовке программы, которая нахаодится с 0 по 100 адрес исполняемого модуля.
Если имеются синтаксические job,rb? Их необходимо исправить с помощью редактора среды программирования. После исправления необходимо сново скомпилировать код и проверить его на ошибки. Запуск программного модуля возможен после исправления всех ошибок.
Кроме синтаксических ошибок в программе могут быть и алгоритмические, выявить которые можно только при пошаговом выполнении программы и постоянном контроле состояния регистров ЭВМ. Чтобы подготовиться к отладке программы, необходимо выполнить сначала контрольный расчет с помощью обычного калькулятора.
С помощью дебаггера программа выполняется по шагам и содержимое регистров постоянно сравнивается с таблицей контрольного просчета. При первом же несовпадении дальнейшие резулльтаты смотреть бессмысленно. Ошибки часто возникают из-за непонимания команд работы процессора, особенно с регистром признаков.
После отладки отдельного программного модуля на конкретных значениях, можно приступать к отладке всей программы путем вызова функций.
15.10.12 — Лекция №9
Команды Debugger’а запуска и отладки программы:
G[cм.1][cм.2]. Два смещения указывают точки останова программы. Эти точки обязательно должны попадать на первый байт команды. Точка останова означает состояние программного счетчика, при котором необходимо приостановить программу. Точки останова определяются по листингу программы. Команда G обычно не используется для отладки программ, а для проверки работоспособности программ под контролем Debugger’а.
Т[N шагов]. Команда трассировки позволяет по шагам выполнить определенный фрагмент программы. После выполнения каждой команды происходит программное прерывание, и управление передается Debugger’у. Debugger выводит на экран состояние всех регистров микропроцессора и путем сравнения этих состояний с контрольным просчетом можно выявить алгоритмическую ошибку. Т – самая нужная и полезная программа для отладки. Процедуру ветвлений проверяют по состоянию программного счетчика.
P[N шагов] – аналогична команде Т за исключением того, что все вызовы подпрограмм (функций) выполняются автоматически не по шагам, а целиком. Команда полезна при отладке сложных программ с многоуровневыми вызовами, поэтому процедура написания и отладки следующая:
Необходимо сложную задачу разбить на простые программные модули.
Написать программы отдельных модулей, реализующих определенные конкретные функции.
Распределить ресурсы ЭВМ для реализации данной функции.
Начинается написание программы с поля комментариев к каждому фрагменту программы.
Реализация простейших программных модулей, по очереди отлаживая их.
После отладки модулей, их организуют в виде подпрограмм, присваивают имена, точки входа и выхода.
После отладки модулей на контрольных просчетах, реализуется основная программа – вызовы программных модулей. При этом результаты выполнения сравниваются с результатами контрольных просчетов.
Оформление технической документации на пользование программным модулем (запуск и использование продукта)
А[начальный адрес] – команда ассемблирования введенного фрагмента команды и запись его в машинных кодах с указанием адреса. Недостаток – отсутствие команды редактирования текст, поэтому вместо этой команды используется обычный транслятор с языка Ассемблера.
U[начальный адрес][смещение] – команда дизассемблирования указанного фрагмента кода, при чем начальный адрес должен попадать на первый байт команды, иначе все дизассемблирование будет неверным. Команда преобразует машинные коды в мнемонические команды ассемблера, что очень удобно для изучения программного кода при отсутствии исходного текста программы. Таким образом, если при изучении содержимого памяти необходимо узнать, какой вид информации находится в этой области, необходимо действовать следующим образом:
Директивой D просмотреть …, где выводятся символьные тексты и проанализировать их на разумную последовательность символов. … значит в этой области находится разумная текстовая информация.
Если разумных фраз/словосочетаний нет, то необходимо эту область дизассемблировать с помощью команды U и посмотреть на разумную последовательность команд. Однако, т.к. мы не знаем начала адреса первой команды, необходимо эту процедуру повторить как минимум 5 раз с увеличением адреса. Если разумной последовательности нет, можно предположить, что в области находится не команда, а числовые данные. Самое трудное – определить назначение данных и формат, в котором они хранятся.
Для того, чтобы понять назначение этих данных и формат, необходимо найти фрагмент программы, который работает с этим адресом.
Если программа написана на языке высокого уровня, все эти три вида информации хорошо структурированы и разбираться в них намного проще, т.к. обычно для хранения данных используются специальные теги, имеющие начало и конец.
H число1 число2 – вычисление суммы и разности 2х 16-ричных чисел. Используется для проверки правильности работы отдельных команд и особенно проверки адресов в передачу управления в командах, т.к. большинство команд с относительной адресацией и адрес перехода указывается в виде смещения относительно программного счетчика.
Q – выход.
Программно-логическая модель ЭВМ
ПЛМ – совокупность аппаратных ресурсов ЭВМ, доступных программисту из определенной среды программирования. Наиболее удобный язык программирования для изучения аппаратных ресурсов ЭВМ – язык Ассемблера, т.к. он позволяет реализовать доступ практически ко всем ресурсам ЭВМ, но у него отсутствуют ресурсы ввода-вывода для работы с консолью ЭВМ (клавиатура + экран дисплея). Поэтому на первом этапе работы с Ассемблером пользуются ресурсами Debugger’а для консольного ввода-вывода.