Вычислительная техника и микропроцессоры
--------------------------
Тема: Исследование основных этапов создания программ на языке ассемблера
для 16-разрядного МП
содержание:
Сегмент памяти стека
Экран отладчика AFD (или AFDPRO)
Основные команды отладчика
Последовательность действий при отладке программы
Задание на работу
Отчет должен содержать
Оформление блок-схемы,Pascal-программы и программы на ассемблере
Краткие сведения об отладчике для 32-разрядных
МП (INSIGHT.COM)
Цели работы: 1.Научиться создавать и редактировать ассемблерные программы
с помощью текстового редактора NE.COM
2.Научиться ассемлировать и компоновать программы с помощью ассемблера TASM.EXE и компоновщика TLINK.EXE
3.Научиться пользоваться отладчиками ассемблерных программ AFD.EXE (AFDPRO.EXE) и INSIGHT.COM.
Основные вопросы для отработки на занятии
-------------------------------------------
1.1 Поиск на диске файла NE.COM и его загрузка в память
1.2 Основные действия по созданию и редактированию программы:
- ввод имени файла
- набор текста и его коррекция с помощью клавиатуры
- запоминание файла на диске
- получение справки(подсказки)
1.3 Коррекция файла с помощью встроенного в MS DOS редактора
2.1 Алгоритм прохождения и решения задачи на ПЭВМ (стр.38)
- этап редактирования(использование NE.COM)
- этап ассемблирования(использование TASM.EXE)
- этап коррекции (при наличии синтаксических ошибок)
с использованием редактора NE или встроенного в MS DOS редактора.
- этап компоновки(использование TLINK.EXE)
- этап отладки(использование AFD.EXE или AFDPRO.EXE)
2.2 Ассемблирование исходного текста программы
C:\>TASM.EXE/L имя.ASM
где имя.ASM - имя ассемблерной программы,которое присваивает пользователь
2.3 Анализ листинга программы
- структура и содержание сегментов
- сообщения об синтаксических ошибках
- сообщения в виде предупреждений
- реализация директив ассемблера
.STARTUP
.EXIT
2.4 Анализ MAP-файла,который содержит таблицу имен, размеры сегментов
2.5 Компоновка объектного модуля для получения исполняемого файла имя.EXE (или имя.COM)
C:\>TLINK.EXE имя.OBJ (получение EXE-файла)
или C:\>TLINK.EXE/T имя.OBJ (получение COM-файла)
3.1 Запуск отладчика AFD.EXE (или AFDPRO.EXE)
1-й вариант C:\>AFD.EXE
2-й вариант C:\>AFD.EXE имя.EXE (или AFD.EXE имя.COM)
3.2 Основные команды отладчика
- загрузка исполняемого файла L имя.EXE (L имя.COM)
- установка требуемого адреса в окне программыD {адрес}
- установка требуемого адреса в окнах 1 или 2 M1 {адрес} или M2 {адрес}
- выполнение программы(всей или фрагмента) в автоматическом режиме G {нач.адрес}{,кон.адрес}
- выход из отладчика в DOS
QUIT
3.3 Ограничения при использовании отладчика
3.4 Анализ реального распределения памяти для конкретной программы
- начальные адреса сегментов
- адрес вершины стека
- адреса переменных и массивов
- взаимное расположение сегментов в памяти
Дополнение 1. Сегмент памяти стека.
-------------
Примерный анализ распределения памяти сегмента данных,который совмещен с сегментом стека(модели памяти SMALL,LARGE)
Дополнение 2. Экран отладчика AFD (или AFDPRO).
_________________________________________________
1.Структура экрана.
Окно 1 - содержимое выбранного сегмента памяти (в одной строке располагается 8 байт).
Окно 2 - содержимое выбранного сегмента памяти (в одной строке располагается 16 байт).
Окно 3 - для отображения адресов команд,команд в 16-ых кодак и команд на языке ассемблера(дизассемблированных ко манд).В первой строке окна может отображаться диагностическая информация и сообщения отладчика.
Окно 4 - для вывода приглашения отдадчика (CMD>),для ввода команд и для вывода подсказок по структуре вводимых команд.
Окно 5 - для индикации и коррекции внутренних регистров процессора,регистра признаков,а также для индикации со-
держимого четырех последних(относительно вершины)слов стека.
Окно 6 - для отображения в специальных кодах содержимого окна 2.
2.Перемещение курсора:
по окнам - с помощью клавиш F7 (вверх) F9 (влево)
F8 (вниз) F10(вправо),
в пределах окна - с помощью клавиш скролинга,
в пределах окна с коррекцией - с помощью информационных клавиш
и клавиш DEL,Home,END,Back Space,пробел.
3.Справку о командах отладчика можно получить,нажав клавишу F4 а далее используя клавиши PgDn (листание вперед) и PgUp (листание назад).Повторное нажатие клавиши F4 закрывает это окно.
Дополнение 3.Основные команды отладчика.
--------------------------
Дополнение 4. Последовательность действий при отладке программы
---------------------------------------------------------------
Имя исходной программы: tal1.asm
Ассемблирование: tasm.exe/l tal1.asm
или tasm/l tal1 (по умолчанию)
После ассемблирования генерируются файлы:
tal1.lst, tal1.map, tal1.obj
При наличии ошибок генерируется только
tal1.lst
Компоновка:
a).программ с моделью памяти "tiny" tlink.exe/t tal1.obj
или tlink/t tal1 (по умолчанию) результирующий исполняемый файл - tal1.com
б).программ с моделью памяти "small" и "large" tlink.exe tal1.obj или tlink tal1 (по умолчанию)
результирующий исполняемый файл - tal1.exe
в).при неправильном оформлении программы исполняемые файлы не генерируются.
Запуск отладчика: afdpro.exe или afd.exe
Загрузка исполняемого файла: L tal1.com
Установка в окнах 1,2 необходимых адресов:
m1 fff0 (для наблюдения за стеком,так как SP=FFFE)
m2 100 (для наблюдения за изменениями данных)
Исполнение программы в пошаговом режиме:нажатие клавиш F1(F2)
Установка начального адреса загруженной ранее программы:
D 100
Изменение данных(в окне 2): P 111,8 (в ячейку 0111 заносим 8)
P 112,d (в ячейку 0112 заносим 13)
Выход из отладчика: QUIT
---------------------
1.Составить программу на языке ассемблера для вычисления следующих выражений:
x = N + k
u = N * k
c = z + N +(-1)_5N_0*k ( c = z + N + k )
w = c_52_0 ( w = c*c )
x_52_0 x*x
r = ----- ( r = ----- )
cnst cnst
Числа u,w кроме запоминания в памяти занести в стек.Имя асемблерной программы выбрать самостоятельно.
2.Проассемблировать программу,просмотреть листинг и зафиксировать синтаксические ошибки при их наличии в таблице:
Табл.1
+-----------------------------------------------------------------------------+
¦ N ¦ Допущенная ошибка ¦ Сообщение ассемблера об ошибке ¦
+---+-------------------------+---------------------------------------------¦
¦ 1
¦ 2
¦ 3
¦ 4
+----------------------------------------------------------------------------+
После устранения ошибок проассемблировать программу и просмотреть файлы
.lst - листинг программы;
.obj - программу в объектных кодах;
.map - таблицу c информацией о сегментах.
3.Получить исполняемый файл (.exe или .com) c помощью компоновщика TLINK.Исполняемый файл не генерируется при неправильном оформлении ассемблерной программы,о чем выводится соответствующее сообщение.
4.Запустить отладчик AFD (или AFDPRO),загрузить исполняемый файл в отладчик и выполнить программу в пошаговом режиме.
При обнаружении смысловых(семантических)ошибок зафиксировать и их в табл.1.
5.Получить результаты вычислений при таких исходных данных вариант 1 N,k,c,cnst=16
вариант 2 -N,k,c,cnst=20
вариант 3 -N,-k,c,cnst=-24
и занести их в табл.2.
------------------------
1.Ответ на вопросы
- представление чисел в памяти;
- распределение памяти для ассемблерной программы (адреса сегментов,адреса переменных
и массивов, пространство памяти под стек,вершина стека).
2.Условие задачи,исходные числа.
3.Блок-схему,PASCAL-программу и программу на ассемблере (их изобразить так,чтобы все конструкции программ соответствовали друг другу).
4.Команды для ассемблирования,компоновки и запуска отладчика с отлаживаемой программой.
5.Таблицу с ошибками(табл.1)
6.Распределение памяти
7.Таблицу с исходными данными и результатами(табл.2)
8.Выводы по работе.
Примеры оформления некоторых элементов отчета
Оформление блок-схемы,Pascal-программы и программы на ассемблере
Краткие сведения об отладчике для 32-разрядных МП (INSIGHT.COM)
---------------------------------------------------------------
1.Загрузка отладчика:
a)простая загрузка - запуск программы INSIGHT.COM
b)загрузка с отлаживаемой программой - выполнить
команду INSIGHT.COM ИМЯ.COM
или INSIGHT.COM ИМЯ.EXE
(пример: insight.com lab1.com )
Экран отладчика для режимов 16-разрядного и 32-разрядного приведен на соответствующих рисунках в конце описания.
2.Загрузка в отладчик отлаживаемой программы:
4.Переход в другие окна:
в окно сегмента данных - Shift+D
в окно регистров - Shift+R
в окно регистра флагов - Shift+F
в окно стека - Shift+S
Возврат в окно программы - Esc
Установка необходимого адреса в окне D осуществляется клавишами ВВЕРХ - ВНИЗ
5.Включение/выключение 32-разрядного режима МП Ctrl+R
6.Выполнение загруженной программы в автоматическом режиме Ctrl+F9
7.Выполнение программы в пошаговом режиме
с пропуском процедур - F7
c заходом в процедуры - F8
8.Установка начального адреса программы:
выполнить действия F10-File-Enter-New-Enter
или F10-File-Enter-N
9.Выход из отладчика - Alt+X
Экран отладчика для 16-разрядного и 32-разрядного режимов приведены ниже на соответствующих рисунках.
Экран отладчика для 16-разрядного режима
Переход к нужному адресу в отладчике INSIGHT.
Для кода и для данных используются различные команды перехода к нужному адресу, причем одни команды вызываются из окна кода, другие
- из окна данных, а третью - как из окна кода, так и из окна данных.
Если нужно в окне кода отобразить тот адрес, на который ссылается команда передачи управления, то нужно или выбрать пункт Code position|Follow локального меню окна кода, или нажать Ctrl+F.
Непосредственно задать адрес можно в диалоге Goto, вызываемом пунктом Code position|Address_ (Ctrl+G). Для возврата к текущей
инструкции - Code position|Origin (Ctrl+O или Ctrl+Enter).
Все переходы в окне кода запоминаются в специальном стеке, поэтому можно вернуться к предыдущей позиции при помощи пункта Code
position|Previous (Ctrl+P). Этот стек использует область памяти
отладчика, которая также используется и для других целей. Из-за этого может возникнуть ситуация, когда часть данных стека будет затерта. В этом случае отладчик покажет предупреждение и очистит стек.
При активном окне данных можно позиционировать окно кода на адрес, который определяет ячейка памяти, где находится курсор. В этом случае или два подряд идущих байта трактуются как новое смещение для дизассемблера (near-указатель), новый сегмент для дизассемблера (far-указатель со смещением 0) или четыре байта - как смещение и сегмент нового адреса (far-указатель). Для таких переходов нужно вызвать подменю Dump follow из локального меню окна данных, или непосредственно нажатием Ctrl+F. В этом подменю пункт Near code позволяет задать новое смещение для окна кода, Far code - новое смещение и сегмент, Code segment - новый сегмент и смещение 0. Непосредственно новый адрес для показа памяти в окне данных можно задать, вызвав диалог Goto из меню Dump position|Address_ (Ctrl+D). Это меню есть в локальных меню обоих окон. Если инструкция, на которой расположен курсор окна кода, ссылается на ячейку памяти, то адрес этой ячейки может быть использован как начальный для отображения в окне данных - пункт Dump position|Reference (Alt+=). Дополнительные пункты подменю Dump position и соответствующие им комбинации клавиш позволяют в окне данных отобразить память, на которую ссылаются определенные пары регистров. Эти пункты и комбинации приведены в таблице.
Переход к нужному адресу в отладчике INSIGHT.
Для кода и для данных используются различные команды перехода к нужному адресу, причем одни команды вызываются из окна кода, другие - из окна данных, а третью - как из окна кода, так и из окна данных. Если нужно в окне кода отобразить тот адрес, на который ссылается команда передачи управления, то нужно или выбрать пункт Code position|Follow локального меню окна кода, или нажать Ctrl+F. Непосредственно задать адрес можно в диалоге Goto, вызываемом пунктом Code position|Address_ (Ctrl+G). Для возврата к текущей инструкции - Code position|Origin (Ctrl+O или Ctrl+Enter). Все переходы в окне кода запоминаются в специальном стеке, поэтому можно вернуться к предыдущей позиции при помощи пункта Code position|Previous (Ctrl+P). Этот стек использует область памяти отладчика, которая также используется и для других целей. Из-за этого может возникнуть ситуация, когда часть данных стека будет затерта. В этом случае отладчик покажет предупреждение и очистит стек.
При активном окне данных можно позиционировать окно кода на адрес,который определяет ячейка памяти, где находится курсор. В этомслучае или два подряд идущих байта трактуются как новое смещение для дизассемблера (near-указатель), новый сегмент для дизассемблера (far-указатель со смещением 0) или четыре байта - как смещение и сегмент нового адреса (far-указатель). Для таких переходов нужно вызвать подменю Dump follow из локального меню окна данных, или непосредственно нажатием Ctrl+F. В этом подменю пункт Near code позволяет задать новое смещение для окна кода, Far code - новое смещение и сегмент, Code segment - новый сегмент и смещение 0.
Непосредственно новый адрес для показа памяти в окне данных можно задать, вызвав диалог Goto из меню Dump position|Address_ (Ctrl+D). Это меню есть в локальных меню обоих окон. Если инструкция, на которой расположен курсор окна кода, ссылается на ячейку памяти, то адрес этой ячейки может быть использован как начальный для отображения в окне данных - пункт Dump position|Reference (Alt+=).
Дополнительные пункты подменю Dump position и соответствующие им комбинации клавиш позволяют в окне данных отобразить память, на которую ссылаются определенные пары регистров. Эти пункты и комбинации приведены в таблице.
Пункт меню ¦ Клавиши ¦ Назначение
------------------+---------------+--------------------------------------
Dump DS:SI ¦ Alt+D ¦ установить окно на DS:SI
Dump ES:DI ¦ Alt+E ¦ установить окно на ES:DI
Dump SS:BP ¦ Alt+S ¦ установить окно на SS:BP
Dump CS:IP ¦ Alt+C ¦ установить окно на CS:IP
Dump ES:BX ¦ Alt+B ¦ установить окно на ES:BX
Dump ES:SI ¦ Alt+I ¦ установить окно на ES:SI
Dump DS:DX ¦ Alt+F ¦ установить окно на DS:DX
Dump DS:DI ¦ Alt+J ¦ установить окно на DS:DI
Dump DX:AX ¦ Alt+A ¦ установить окно на DX:AX
Dump code ¦ Alt+L ¦ установить окно на адрес
¦ ¦ текущей позиции курсора
¦ ¦ окна кода
Аналогично позиционированию окна кода, окно данных можно устанавливать на адрес, который определяется значением в памяти, - для этого выбирается пункт меню Near data, Far data или Data segment из подменю Dump follow, которое можно также вызвать по Ctrl+F.
Дополнение к пункту
"Распределение памяти"
|
||||
|
||||
|
||||
|
||||
|