Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___МЕТОДИЧКИ_2013 / Пособие по ОСМПС (pdf) / 17_Контрольная работа.doc
Скачиваний:
43
Добавлен:
15.03.2016
Размер:
164.35 Кб
Скачать

Методические указания к заданию 1

Задание предполагает «ручное» дизассемблирование программного кода микропроцессора КР580ВМ80. В качестве примера рассмотрим дизассемблирование программы перемещения массива чисел из области памяти, ограниченной адресами ADR1иADR2, в область памяти начиная с адреса ADR3. Перед вызовом подпрограммы адресADR1был занесен в регистровую пару НL,ADR2- в DE, ADR3- вВC (табл. 2).

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

Постройте таблицу листинга по примеру табл. 2.

Таблица 2

Пример листинга участка программы

Адрес

Машинный код

Метка

Мнемоника

Операнды

Комментарий

1

2

3

4

5

6

0900

0901

0902

0903

0906

0909

090А

С90В

090С

090D

090Е

090F

0910

0911

0912

0913

02

03

СD 0А 09

D2 00 09

C9

23

В5

37

C8

7B

95

C9

METKA1

METKA2

MOV

STAX

INX

CALL

JNC

RET

INX

MOV

ORA

STC

RZ

MOV

SUB

MOV

SBB

RET

A, M

В

В

090A

DIR

H

А, Н

L

A, E

L

A, D

Н

Извлечение элемента массива

Пересылка в новую область

Адрес следующей ячейки

Проверка на окончание

Ячейки еще остались

Адрес следующей ячейки

Проверка (HL) на ноль

Возврат, если в (HL) ноль

Сравнение (НL) и (DE)

Если (HL)(DE), то СY = 0

Возврат из подпрограммы

Впишите в первую строку колонки «Адрес» начальный адрес адресного пространства вашего варианта. Найдите и пометьте для себя первый байт кода программы в соответствии с вариантом, перебрав в шестнадцатеричной системе счисления «лишние» адреса. Впишите первый байт кода в колонку «Машинный код» рядом с начальным адресом. Этот байт, как и первый байт любой команды, является кодом операции.

Найдите в табл. 3 приложения 1 мнемонику соответствующей команды и впишите ее в колонку «Мнемоника». В соответствии с табл. 1 приложения 1, условными значками «N,&, *, и здравым смыслом определите формат данной команды – одно-, двух- или трехбайтный. Если команда двух- или трехбайтная, то впишите дополнительные байты в колонку «Машинный код».

Впишите в колонку «Операнды» формальные (имена регистров, обозначение ячейки памяти M) или конкретные числовые (адреса переходов, ячеек памяти, константы, номера портов) операнды. Учтите, что в двухбайтовых операндах младший и старший байт в машинном коде переставляются, чтобы в ячейке с меньшим адресом оказался младший байт двухбайтового операнда. Поэтому при записи таких операндов необходимо сделать обратную перестановку (см. пример в табл. 2).

Впишите в колонку «Комментарий» формальный комментарий к текущей команде, который можно найти в табл. 1 приложения 1.

Далее переходите к распознаванию следующей команды. Сначала запишите начальный шестнадцатеричный адрес новой команды в колонку «Адрес» следующей строки листинга. Учтите, что каждый байт предыдущей команды занимает одну ячейку. Поэтому отсчитайте занятые адреса ячеек и вписывайте адрес еще не занятой ячейки. Далее очередной байт кода впишите в колонку «Машинный код» и повторите перечисленные действия.

Закончив перебор «своего» адресного пространства, обратите внимание на адреса безусловного и условных переходов, безусловного и условных вызовов подпрограмм. Если эти адреса попадают в текущее адресное пространство, то по соответствующим адресам в колонке «Метка» впишите условные имена переходов, например, METKA1, METKA2 и т.д.