Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр2 ПО ИП Новиков А.С..doc
Скачиваний:
0
Добавлен:
20.11.2019
Размер:
171.52 Кб
Скачать

Порядок выполнения лабораторной работы

  1. Создал в каталоге \TASM подкаталоги \TASM\WORK и \TASM\ PROGRAM.

  2. Поместил в каталог WORK файлы tasm.exe, tlink.exe, td.exe и rtm.exe.

  3. Поместил файл prg_5_2.asm в каталог WORK из C:\Programs\Assembler\Program\lesson05.

  4. Исправил исходный текст программы prg_5_2.asm на приведенный в данном описании, сохранил его с тем же именем.

  5. В каталоге WORK запустил на трансляцию программу prg_5_2.asm командной строкой вида: tasm.exe /zi prg_5_2,,,.

  6. Просмотрел листинг программы. На примере показал формат строки листинга.

  1. Создал исполняемый модуль prg_5_2.ехе командной строкой вида: tlink.exe /v prg_5_2.obj.

  2. Запустил отладчик командной строкой вида: td prg_5_2.ехе.

  3. Начал работу с отладчиком. Настроил его на адрес начала сегмента данных: нажал два раза F8. Затем открыл окно Dump с помощью команды главного меню ViewDump. В окне Dump вызвал контекстное меню, щелкнув правой кнопкой мыши, в контекстном меню выберал команду Goto. В диалоговом окне ввел адрес памяти ds:0000, начиная с которого будет выводиться информация в окне Dump.

  4. С какого адреса расположены символы в сегменте данных, входящие в строку message.

- Символы, входящие в строку message, расположены со смещением 0000.

  1. Какой она размерности?

- Она занимает 34 байта.

  1. Какой адрес в сегменте данных имеет символическое имя perem_1, каково его содержимое?

- Символическое имя perem_1 имеет адрес в сегменте данных ds:0024, содержимое этого байта 0ffh.

  1. Как размещены в памяти байты, входящие в слово, обозначенное символическим именем perem_2?

- Сначала следует байт со значением 7fh, а затем со значением 3ah. (В памяти сначала расположен младший байт значения, а затем старший)

  1. Как размещены байты для поля, обозначенного символическим именем perem_3? Аналогично проанализируйте символические имена: mas, poie_1, adr, adr_full, fin.

- байты для поля perem_3: 7A 56 4D F5

- байты для поля mas: 20 20 20 20 20 20 20 20 20 20

- байты для поля poie_1: 00 00 00 00 00

- байты для поля adr: 27 00

- байты для поля adr_full: 27 00 26 0D

- байты для поля fin: 8A AE AD A5 E6 20 E1 A5 A3 AC A5 AD E2 A0 20 A4 A0 AD AD EB E5 20 AF E0 AE A3 E0 A0 AC AC EB 20 24

  1. Добавил в сегмент данных строку name со Своей фамилией, полный адрес perem_2 и эффективный адрес perem_1. Организовал вывод Своей фамилии на новой строке на экран, для этого воспользовался результатами лабораторной работы №1 и таблицей кодов ASCII.

Контрольные вопросы

  1. Что такое точка входа в программу? Как она определяется?

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

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

  2. Для чего используются директивы резервирования и инициализации данных?

- Директивы резервирования и инициализации данных используются для описания простых типов данных в программе, они по сути являются указаниями транслятору на выделение определенного объема памяти.

  1. Какую функцию имеет итеративная конструкция – выражение?

- Итеративная конструкция выражение позволяет повторить последовательное занесение в физическую память выражения в скобках n раз;

  1. Какой порядок размещения данных в памяти?

- В памяти сначала расположен младший байт значения, а затем старший

  1. Что необходимо сделать, чтобы с помощью отладчика просмотреть область памяти, содержащую сегмент данных?

- Нужно перед первым обращением к любому символическому имени произвести загрузку действительного физического адреса сегмента данных. Это действие производится двумя командами в сегменте кода. Действительный физический адрес сегмента данных извлекается как значение предопределенной переменной @data. В программе эти действия выполняют команды:

mov ax, @data

mov ds, ax

Для того чтобы посмотреть содержимое сегмента данных, нужно остановить выполнение программы после этих двух команд. Перевожу отладчик в пошаговый режим с помощью клавиш F7 или F8. Нажимаю два раза F8. Теперь открываю окно Dump с помощью команды главного меню ViewDump.

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

  1. В каком сегментном регистре содержится адрес начала сегмента данных?

- Адрес начала сегмента данных содержится в сегментном регистре ds:0000.

  1. Объясните принцип настройки окна Module с исходным текстом программы на адрес начала сегмента данных?

- Производим отладку: td.exe prg_5_2.exe. Перед первым обращением к любому символическому имени нужно произвести загрузку действительного физического адреса сегмента данных. Это действие производится двумя командами в сегменте кода. Действительный физический адрес сегмента данных извлекается как значение предопределенной переменной @data. В программе эти действия выполняют команды:

mov ax, @data

mov ds, ax

Для того чтобы посмотреть содержимое сегмента данных, нужно остановить выполнение программы после этих двух команд. Переводим отладчик в пошаговый режим с помощью клавиш F7 или F8. Нажимаем два раза F8. Теперь открываем окно Dump с помощью команды главного меню ViewDump.

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

  1. Поясните необходимость оператора ассемблера offset.

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

  1. Дайте определение: полному адресу и смещению.

- Когда транслятор встречает директивы описания памяти adr и adr_full, то он формирует в памяти значения адресов тех переменных, чьи имена были указаны в качестве операндов. В зависимости от директивы, применяемой для получения такого адреса, формируется либо полный адрес (директива dd) в виде двух байтов сегментного адреса и двух байтов смещения, либо только смещение (директива dw).

Вывод: В ходе лабораторной работы я изучил директивы описания данных простых типов; с помощью окна Dump отладчика tdebug.exe просмотрел область памяти, содержащую сегмент данных программы.