
- •Контрольная работа
- •Выбор варианта задания
- •Методические указания к заданию 1
- •Задание 2
- •Методические указания к заданию 2
- •Решение
- •Задание 3
- •Код обмена информацией кои-7
- •Методические указания к заданию 3
- •Пример кодирования сообщения в кои-7
- •Задание 4
- •Методические указания к заданию 4
- •75 2
- •Задание 5
- •Выбор варианта задания
- •Методические указания к заданию 5
- •Задание 6
- •Методические указания к заданию 6
- •Решение
- •Экзаменационные вопросы
- •Литература
Методические указания к заданию 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 7С В5 37 C8 7B 95 7А 9С 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) Возврат из подпрограммы |
Впишите в первую строку колонки «Адрес» начальный адрес адресного пространства вашего варианта. Найдите и пометьте для себя первый байт кода программы в соответствии с вариантом, перебрав в шестнадцатеричной системе счисления «лишние» адреса. Впишите первый байт кода в колонку «Машинный код» рядом с начальным адресом. Этот байт, как и первый байт любой команды, является кодом операции.
Найдите в табл. 3 приложения 1 мнемонику соответствующей команды и впишите ее в колонку «Мнемоника». В соответствии с табл. 1 приложения 1, условными значками «N,&, *, #»и здравым смыслом определите формат данной команды – одно-, двух- или трехбайтный. Если команда двух- или трехбайтная, то впишите дополнительные байты в колонку «Машинный код».
Впишите в колонку «Операнды» формальные (имена регистров, обозначение ячейки памяти M) или конкретные числовые (адреса переходов, ячеек памяти, константы, номера портов) операнды. Учтите, что в двухбайтовых операндах младший и старший байт в машинном коде переставляются, чтобы в ячейке с меньшим адресом оказался младший байт двухбайтового операнда. Поэтому при записи таких операндов необходимо сделать обратную перестановку (см. пример в табл. 2).
Впишите в колонку «Комментарий» формальный комментарий к текущей команде, который можно найти в табл. 1 приложения 1.
Далее переходите к распознаванию следующей команды. Сначала запишите начальный шестнадцатеричный адрес новой команды в колонку «Адрес» следующей строки листинга. Учтите, что каждый байт предыдущей команды занимает одну ячейку. Поэтому отсчитайте занятые адреса ячеек и вписывайте адрес еще не занятой ячейки. Далее очередной байт кода впишите в колонку «Машинный код» и повторите перечисленные действия.
Закончив перебор «своего» адресного пространства, обратите внимание на адреса безусловного и условных переходов, безусловного и условных вызовов подпрограмм. Если эти адреса попадают в текущее адресное пространство, то по соответствующим адресам в колонке «Метка» впишите условные имена переходов, например, METKA1, METKA2 и т.д.