Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод.Указания к Лаб.Раб по АВС.doc
Скачиваний:
10
Добавлен:
05.03.2016
Размер:
2.2 Mб
Скачать

Задание

1. Используя .exe файл, полученный в предыдущей работе, выполните анализ заголовка этого файла. Для просмотра заголовка .exe файла необходимо в FAR Manager навести курсор на имя .exe файла и выполнить команду View (Просмотр), которая активизируется нажатием на функциональную клавишу F3. В окне просмотра нажатие на функциональную клавишу F4 активизирует режим просмотра в шестнадцатеричных кодах. Для копирования в текст отчета по лабораторной работе заголовка .exe файла необходимо нажать на клавиатуре клавишу Print Scrn (печать экрана в буфер обмена), а затем в Word документе отчета по лабораторной работе выполнить вставку из буфера (Ctrl+V).

2. Загрузите Ваш .exe файл через td.exe и выполните дамп области PSP. Для этого после загрузки вашей программы в турбоотладчике, перед ее выполнением (!!!), откройте дамп памяти командой View/Dump. Проанализируйте содержимое полей префикса программного сегмента. При просмотре содержимого PSP окно дампа можно увеличить нажатием на клавишу F5. Копирование содержимого PSP в текст отчета по лабораторной работе выполняется так же, как это описано для заголовка .exe файла.

Содержание отчета

Отчет по лабораторной работе должен содержать:

  1. титульный лист;

  2. тему и цель работы;

  3. листинг программы;

  4. заголовок .exe файла;

  5. PSP того же .exe файла;

  6. выводы по работе.

Что нужно знать для защиты отчета

Для защиты отчета по лабораторной работе, необходимо уметь объяснять содержимое полей заголовка .exe файла и PSP, а также знать и понимать основные термины, приведенные в «Общих сведениях» методических указаний.

Рекомендуемая литература

  1. Гук М. Процессоры Intel: от 8086 до Pentium. / М.Гук – СПб.: Питер, 1997.–224с.:ил.

  2. http://www.xserver.ru/computer/os/msdos

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

Тема: изучение директив декларации простых данных и способов адресации.

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

Общие сведения

Для изучения языка ассемблер нет необходимости в организации ввода и вывода данных при написании программ. Организация ввода данных с клавиатуры и вывода данных на экран монитора представляет собой на языке ассемблера достаточно большие программы. Эти программы уже реализованы в виде библиотечных программ, так называемых обработчиков прерываний, которые вызываются командой int. Роль операнда этой команды выполняет вектор прерывания, то есть номер его в соответствующей таблице (таблице векторов прерываний). В наших программах это выглядит так – int 21h или int 9h и др. Когда мы организуем ввод-вывод в программах на алгоритмических языках (Pascal, C, C++ и т.д.), то процедуры ввода-вывода этих языков так или иначе обращаются к соответствующим прерываниям. Но кроме этого данные процедуры выполняют еще целый ряд действий по организации ввода-вывода. Что это за действия? Когда мы вводим данные с клавиатуры, то программа обработчик прерывания считывает, так называемый скен-код нажатой клавиши и, анализируя при этом состояние регистровых клавиш, переводит в конечном итоге этот скен-код в ASCII код набранного нами символа. Процедура ввода на алгоритмическом языке, скажем процедура read языка Pascal, выполняет кроме этого анализ введенных данных в соответствии с определенным в программе для этих данных типом. Если мы вводим числовые данные, то программа выполняет преобразование из ASCII кода в соответствующее числовое значение. При выводе данных не достаточно обратиться к прерыванию для отображения данных на экране. Необходимо эти данные сначала преобразовать, и если мы выводим числовые значения, то из двоичного числового формата следует перевести их в ASCII формат для вывода на экран. То, что незримо для нас выполняют процедуры ввода-вывода алгоритмических языков, на ассемблере приходится организовывать программно. Эти действия увеличивают длину программы, в то время, когда для анализа работы команд процессора, изучением которых мы и будем заниматься, вся эта «оформительская» часть будет только лишним грузом. Детальный анализ работы команд процессора может выполняться только (!!!) при пошаговом выполнении программ в среде TurboDebugger-а. Причем детальный анализ подразумевает не только анализ данных на регистрах, но и анализ расположения данных в памяти компьютера (просмотр дампа памяти - команда View – Dump). А, следовательно, ввод-вывод данных просто теряет всякий смысл при такой работе. Достаточно декларировать и инициировать исходные данные, а также резервировать место в памяти для промежуточных значений и для выходных данных в сегменте данных программы.

NB! При анализе данных в окне дампа памяти не забывайте учитывать принцип их расположения в памяти - «младший по младшему адресу, старший - по старшему».

Язык ассемблера предоставляет возможность объявлять простые данные длиной в байт, слово, двойное слово, два двойных слова, а также десятибайтовые и 48-битовые данные. Вспомним директивы декларации простых данных.

DB – директива декларации данных длиною в один байт;

DW – директива декларации данных длиною в одно слово или два байта;

DD – директива декларации данных длиною в два слова или в четыре байта;

DQ – директива декларации данных длиною в четыре слова или восемь байтов;

DF или DP – директива декларации данных длиною в 48-битов для определения дальних указателей (используется в защищенном режиме);

DT – директива декларации данных длиною в десять байтов.

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

Кроме того, в данной лабораторной работе рассматриваются виды адресации:

  • регистровая;

  • непосредственная;

  • прямая;

  • косвенная адресация:

  1. косвенная индексная;

  2. косвенная индексная со смещением;

  3. косвенная базовая;

  4. косвенная базовая со смещением;

  5. косвенная базово-индексная;

  6. косвенная базово-индексная со смещением.

Значение смещения к данным в сегменте данных при косвенной адресации определяется по значению эффективного адреса. Эффективный адрес (Effective Address далее EA) равен сумме всех значений в команде, которые задают смещение к ячейке памяти. Например, для команды

Mov AL, [BX+5] значение ЕА = ВХ + 5, то есть эффективный адрес равен сумме значения, записанного на регистре ВХ и смещения в пять байтов, а для команды

Mov CX, 4[BX][SI] значение EA = BX + SI + 4.

Полученный ЕА является смещением от начала сегмента данных, по которому и читается искомое значение.