Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

laba3

.docx
Скачиваний:
23
Добавлен:
21.03.2016
Размер:
128.95 Кб
Скачать

Санкт-Петербургский государственный университет Петра Великого

Институт информационных технологий и управления

Кафедра «Компьютерные интеллектуальные технологии»

Лабораторная работа №3 «Дизассемблирование программы bloop.com»

Выполнила: студентка группы 33506/1 Калачева Е.С.

Проверила: Вербова Н.М.

Санкт-Петербург

2015

Цель работы:

Изучить элементы и принципы процедуры дизассемблирования программ.

Программа работы:

1. Исследовать работу программы bloop.com.

2. Дизассемблировать программу bloop.com.

3. Составить комментарий к программе.

Подготовка к выполнению практической части

Система команд микропроцессора I8086 (КМ1810ВМ86) содержит 135 машинных команд, которые могут быть разделены на шесть категорий: команды пересылки данных, арифметические команды, команды поразрядной обработки данных, строковые команды, команды передачи управления, команды управления микропроцессором (см. табл. 1).

Команды пересылки данных предназначены для пересылки содержимого операнда- источника на место операнда-приемника. Существуют четыре группы команд пересылки данных: общего назначения, ввода/вывода, логического адреса, признаков.

Арифметические команды предназначены для выполнения основных арифметических операций (сложение, вычитание, умножение и деление) над порядковыми и целыми двоичными числами, над упакованными и распакованными двоично-десятичными числами, а также для преобразования форматов данных.

Команды поразрядной обработки данных предназначены для выполнения логических операций и операций линейного и циклического сдвигов (арифметических и логических) на один или n разрядов.

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

Команды передачи управления предназначены для организации перехода в программе. Существуют четыре класса таких команд: безусловная передача управления, условная передача управления, управление циклами, команды прерывания.

Команды управления микропроцессором позволяют программно управлять его различными функциями и делятся на две группы: команды управления состоянием признаков, команды синхронизации работы микропроцессора с внешними событиями.

Система команд I8086 (КМ1810ВМ86), упорядоченных по коду операции, приведена в табл. 2, установка признаков состояния при выполнении команд – в табл. 3, набор машинных команд, упорядоченных по мнемокоду, показан в табл. 4.

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

Операнды в программно-доступных регистрах могут быть типа байта или слова, а для команд умножения и деления – типа двойного слова.

Операнды в памяти могут быть типа байта, слова, двойного слова, а в регистрах ввода/вывода – типа байта и слова.

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

При регистровой адресации номер 8- или 16-разрядного регистра, содержащего операнд, указывается в поле REG кода команды.

При неявной регистровой адресации номер регистра определяется неявно самим кодом команды.

Для указания операндов в памяти используются: прямая, косвенная регистровая, стековая, строковая и табличная адресации. Адрес операнда в памяти состоит из двух 16-разрядных компонент: базы сегмента и смещения относительно базы сегмента, называемого исполнительным адресом (ЕА). База сегмента хранится в сегментном регистре.

Исполнительный адрес представляет собой расстояние в байтах от начала сегмента, содержащего операнд, до операнда и интерпретируется как порядковое число от 0 до 65535.

Составными частями, используемыми при вычислении исполнительного адреса операнда, являются: смещение в команде (DISP8/16), содержимое базового регистра ВХ или ВР, содержимое индексного регистра SI или DI. Способ и время вычисления исполнительного адреса определяются полями MOD и R/M кода команды и приведены в табл. 5.

При прямой адресации исполнительным адресом операнда является смещение в команде.

При косвенной регистровой адресации в коде команды задается способ вычисления исполнительного адреса операнда. Имеются четыре типа косвенной регистровой адресации:

· через содержимое базового или индексного регистра ВХ, ВР, SI, DI;

· через сумму содержимого базового или индексного регистра BP/BX/SI/DI и смещение в команде;

· через сумму содержимого базового ВР/ВХ и индексного SI/DI регистров;

· через сумму содержимого базового BP/BX и индексного SI/DI регистров и смещения в команде.

При стековой адресации исполнительный адрес операнда находится в регистре указателя стека SP, причем после чтения операнда из стека содержимое регистра указателя стека увеличивается на два, а перед записью операнда в стек содержимое регистра указателя стека уменьшается на два.

При строковой адресации исполнительный адрес операнда находится и регистре индекса источника SI и (или) регистре индекса приемника DI.

После обращения к операнду содержимое указанного регистра увеличивается или уменьшается в зависимости от значения признака направления DF. Данный вид адресации используется только в командах обработки элементов строк данных.

При табличной адресации исполнительный адрес операнда определяется как сумма содержимого регистров ВХ и AL, причем после обращения к операнду содержимое регистра AL изменяется на содержимое памяти по исполнительному адресу. Данный вид адресации используется в команде XLAT.

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

Время выполнения команд КМ1810ВМ86 (в тактах) приведено в табл. 6. Время выполнения команды фиксировано только при регистровых и непосредственных операндах.

Если операнд находится в памяти по исполнительному адресу, то время выполнения команды должно быть увеличено на время вычисления исполнительного адреса. В табл. 6 время вычисления исполнительного адреса записано как "+ EA".

Если операнд типа "слово" находится в памяти по нечетному адресу, то время выполнения команды должно быть увеличено на четыре такта для каждого обращения к памяти за операндом.

Время выполнения команды в табл. 6 указано в предположении, что команда выбирается из очереди команд микропроцессора. В случае использования префикса замены сегмента время выполнения команды, перед которой стоял префикс замены, должно быть увеличено на два такта.

На рис. 1 приведена программистская модель микропроцессора КМ1810ВМ86.

Код программы bloop.com в Hex-редакторе.

50 51 B0 B6 E6 43 B0 00 E6 42 B0 0A E6 42 E4 61 50 0C 03 E6 61 B9 00 40 E2 FE 58 E6 61 59 58 B8 00 4C CD 21

Дизассемблированный Код программы bloop.com

50 PUSH AX // помещаем содержимое ax в стек (стековая)

51 PUSH CX // помещаем содержимое cx в стек (стековая)

B0 MOV AL, B6 // младший байт ax кладем равным B6 (непосредственная)

E6 OUT AL, 43 // пересылка значения al в порт с номером 43 (43 - управляющий регистр. B6 = 10110110. 10 – счетчик 2, 11 - LSB/MSB — сначала младший, затем старший байты, 011 - генератор меандра, 0 - Binary (двоичный счет)) (непосредственная)

B0 MOV AL, 00 // очищаем младший байт ax (непосредственная)

E6 OUT AL, 42 // пересылка значения al в порт с номером 42 (42 - Счетчик 2 — генератор звука, Вход GATE от бита 0 порта В 8255 (061). Режим 011, LSB/MSB, Binary, значение счетчика определяет высоту тона) (непосредственная)

B0 MOV AL, 0A //младший байт ax кладем равным 0A (00001010) (непосредственная)

E6 OUT AL, 42 // пересылка значения al в порт с номером 42 (00001010 - высота тона) (непосредственная)

E4 IN AL, 61 // чтение порта 61 и запись значения в al (непосредственная)

50 PUSH AX // запоминаем в стеке значение ax (стековая)

0C OR AL, 03 // установка 2-х младших битов al в единицу

E6 OUT AL, 61 // пересылка значения al в порт с номером 61 (Таймер генерирует выходной сигнал при высоком уровне на входе GATE2 (при единичном значении бита 0 порта 61h), а у нас 2 младших бита стали единичными) (непосредственная)

B9 MOV CX, 00 40 // устанавливаем счетчик в 16384 (непосредственная)

E2 FE LOOP // цикл выполняется 16384 раза

58 POP AX // достаем значение из стека в ax (стековая)

E6 OUT AL, 61 // выводим младший байт ax в порт 61 (непосредственная)

59 POP CX // достаем значение из стека и кладем в cx (стековая)

58 POP AX // достаем значение из стека в ax (стековая)

B8 MOV AX, 00 4C // кладем в ax значение 4C00(19456) (непосредственная)

CD INT 21 // вывод результатов на экран (непосредственная)

Команды, используемые в программе

MOV [приемник, источник] – копирует содержание источника в приемник.

PUSH[источник] – размещает значение источника в стек

POP[приемник]- выносит значение из стека в приемник

IN[регистр, номер порта]/OUT[номер_порта, регистр] – Порты в IBM PC используются для доступа к микросхемам. Обратиться к ним можно в любой момент из программы на ассемблере. Например, можно используя порт, обратится к микросхеме прерываний или таймеру. Для работы с портами есть специальные команда IN и OUT:

LOOP метка - организация цикла со счетчиком в регистре cx. Команду loop применяют для организации цикла со счетчиком. Количество повторений цикла задается значением в регистре ecx/cx перед входом в последовательность команд, составляющих тело цикла.

INT [номер_прерывания] - вызов подпрограммы обслуживания прерывания с номером прерывания, заданным операндом команды.

Вывод

В ходе выполнения лабораторной работы было произведено дизассемблирование программы BLOOP.COM из машинного кода, полученного с помощью WinHex. Были разобраны и изучены новые инструкции, такие как IN, OUT, LOOP. Изучены основы дизассемблирования, а также основы работы в среде DosBox для запуска приложений в DOS окружении. Разобран принцип ввода и вывода информации на порты устройств с помощью соответствующих инструкций. Разобран принцип работы аппаратных прерываний.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]