Главная Дока Микро-80 Радио-86РК ЮТ-88 Орион-128 Ссылки Новости Письмо

Описание компьютера Радио-86РК
Журнал РАДИО

ДИЗАССЕМБЛЕР для "Радио-86РК".

Опубликованный пакет программ "Микрон" позволяет создавать прикладные программы на языке АССЕМБЛЕРА, однако нередко перед радиолюбителем возникает и обратная задача - по имеющимся кодам какой-либо программы воссоздать (дизассемблировать) ее текст на языке АССЕМБЛЕРА. Дизассемблирование может потребоваться, например, в случае утери первоначального исходного текста программы, для анализа и дополнения новыми возможностями программ, написанных другими программистами, для переноса рабочей области программы в другую область ОЗУ...

Между символическими командами языка АССЕМБЛЕРА и кодами машинах команд существует взаимно однозначное соответствие, поэтому, имея таблицу кодов команд микропроцессора, любую программу можно дизассемблировать вручную. Многие радиолюбители, чтобы понять, как работают программы, опубликованные в журнале, видимо, этим уже занимались и на собственном опыте убедились, сколь продолжителен и кропотлив этот труд.

Имея в руках такого помощника, как персональный компьютер, эту работу можно возложить на него, загрузив предварительно в его память программу ДИЗАССЕМБЛЕР. Она позволит с минимальными затратами времени создать текст любой программы на языке АССЕМБЛЕРА, который, естественно, в дальнейшем может быть оттранслирован с помощью АССЕМБЛЕРА ASSM. *МИКРОН*.

В табл.1 приведены машинные коды нового пакета программ "МИКРОН" который состоит из улучшенной версии РЕДАКТОРА ED."МИКРОН" и ДИЗАССЕМБЛЕРА DIS."МИКРОН". Каждая из этих программ занимает 2 Кбайт памяти и может работать независимо друг от друга. Новую версию РЕДАКТОРА можно объединить с АССЕМБЛЕРОМ ASSM."МИКРОН", заменив коды старого редактора на новые. Сделать это лучше следующим образом: пользуясь директивой М МОНИТОРА, введите в ОЗУ компьютера коды из табл.1 блоками по 256 Байт с последующей записью их на магнитную ленту и сверкой контрольной суммы записанного блока с контрольной суммой соответствующего блока из табл.2.

Таблица 2.

ОБЛАСТЬ ОЗУ

КОНТР. СУММА

ОБЛАСТЬ ОЗУ

КОНТР. СУММА

0000 - 00FF 0100 - 01FF 0200 - 02FF 0300 - 03FF 0400 - 04FF 0500 - 05FF
0600 - 06FF
0700 - 07FF

1D46 6F40 5E2F CE8F 8D43 8826 98AD
32EB

0800 - 08FF 0900 - 09FF 0A00 - 0AFF 0B00 - 0bff 0C00 - 0CFF 0D00 - 0DFF 0E00 - 0EFF 0F00 - 0FFF

2BC4 CB8B 9430 C777 733Е 3F30 A617 E762

0000 - 0FFF

5422

   


Затем загружают последовательно все блоки с магнитной ленты в ОЗУ компьютера. В результате в ОЗУ окажется полный пакет с РЕДАКТОРОМ и ДИЗАССЕМБЛЕРОМ. Если теперь записать на магнитную ленту только новый РЕДАКТОР (он располагается в памяти по адресам 0000Н - 7FFH), то, загрузив старый пакет
"МИКРОН", а затем новый РЕДАКТОР, вы получите новый пакет с РЕДАКТОРОМ и АССЕМБЛЕРОМ.

Чтобы разобраться, как работать с пакетом программ DIS."МИКРОН" проследим процесс дизассемблирования какой-либо программы, так сказать, "вручную". Он состоит из двух основных этапов: собственно дизассемблирования и расстановки меток. Дизассемблируя программу, обычно записывают в столбик сначала адрес команды, затем код операции с необходимыми операндами и, наконец, мнемоническое обозначение команды (адреса, конечно, можно и не записывать, но при последующей расстановке меток это может привести к путанице). Записав, таким образом, текст программы, для более удобного чтения и понимания алгоритма ее работы, вместо абсолютных адресов переходов нужно расставить метки. После всех этих операций текст программы (но, естественно, без адресов) можно с помощью РЕДАКТОРА (предварительно отредактировав, внеся в него пояснения или дополнения) ввести в компьютер и оттранслировать АССЕМБЛЕРОМ.

Всю описанную выше работу может выполнить DIS."МИКРОН" во много раз быстрее и точнее, создавая текст дизассемблируемой программы непосредственно в области ОЗУ, отведенной для буфера текста редактора ED."МИКРОН". Программа DIS."МИКРОН" также как и АССЕМБЛЕР, используется вместе с РЕДАКТОРОМ и располагается в памяти на месте АССЕМБЛЕРА, т. е. с адреса 800Н по FFFH. Так же, как и ранее, переход из РЕДАКТОРА в ДИЗАССЕМБЛЕР и наоборот осуществляется нажатием клавиши СТР. В МОНИТОР можно выйти только из РЕДАКТОРА, нажав клавиши УС и Е.

Прежде чем приступать к дизассемблированию программы, необходимо ее коды поместить в область ОЗУ, которая для АССЕМБЛЕРА являлась областью трансляции и расположена с адреса 1100Н. Перемещение производят директивой Т МОНИТОРА, после чего можно приступить к дизассемблированию.

При входе в ДИЗАССЕМБЛЕР (из МОНИТОРА по директиве G800, а из РЕДАКТОРА нажатием клавиши СТР) на экране появляется сообщение:

DIS.*МИКРОН* КОНЕЦ ТЕКСТА...

Вместо точек будет выведено шестнадцатеричное число, соответствующее адресу конца текста в буфере. Эта информация необходима для определения свободного места в области ОЗУ, отводимой под текст и определяемой как разность адреса настройки указателя стека (73FFH) и адреса конца текста. Затем появляется символ "*", приглашающий оператора ввести директиву ДИЗАССЕМБЛЕРА. Их всего четыре:

После задания директивы D на экран выводится запрос "РАБОЧИЙ АДРЕС", на который нужно ответить вводом полного шестнадцатеричного адреса (со всеми незначащими нулями) той области ОЗУ, в которой работает дизассемблируемая программа. Если при вводе адреса будет нажата клавиша, не соответствующая шестнадцатеричной цифре, то запрос ввода адреса будет повторен, а если клавиша СТР, то ДИЗАССЕМБЛЕР перейдет в режим ожидания ввода директив.

Далее на экране дисплея появится запрос ТЕКСТ (Y/N)? Что это означает? Дело в том, что в большинстве программ, кроме непосредственно кодов операций и операндов, присутствуют какие-либо данные. Ими могут быть подготовленные программистом заранее и расположенные в теле программы строковые константы, таблицы и т. п. Адреса, в которых расположены строковые константы, можно найти, воспользовавшись директивой L МОНИТОРА. (Следует отметить, что определить адреса таблиц и т.п. не всегда бывает просто - для этого может потребоваться многократное дизассемблирование программы и ее детальный анализ). Определив каким-либо образом эти области, на запрос ТЕКСТ (Y/N)? следует ответить нажатием клавиши Y, и на последующие запросы НАЧАЛО: и КОНЕЦ: вводом адреса начала и конца областей данных (DIS."МИКРОН" позволяет определить до 32 областей данных).

После определения всех областей нужно на очередной запрос НАЧАЛО: ответить нажатием клавиши ВК (тем самым будет закончено их определение), и на экране появится запрос NEW (Y/N)? Ответ Y приведет к очистке буфера текста, и текст будет создаваться сначала. Любой другой ответ сохранит имеющийся в буфере текст, а вновь создаваемый пристыкует к нему (в некоторых случаях это может оказаться полезным).

После всех этих процедур остается на запрос АДРЕС: ввести полный адрес начала дизассемблируемого фрагмента (Адрес вводят АБСОЛЮТНЫЙ, т. е. соответствующий той области памяти, в которой работает дизассемблируемая программа). Как только адрес будет введен, на экране появятся 24 строки дизассемблированного фрагмента, причем формат строки будет таким: сначала выводятся четыре символа адреса кода операции, затем четыре пробела (на их место в дальнейшем могут быть поставлены метки), следующие четыре позиции отводятся под мнемонику команды и одна позиция на разделительный пробел, за которым располагаются операнды (если они имеются в данной команде). О таком позиционировании следует помнить при редактировании дизассемблированного текста. В случае его нарушения директивы М и А дизассемблера могут выполниться не полностью.

Вывод фрагмента всегда заканчивается вопросом ТЕКСТ (Y/N)? Нажатие клавиши Y приведет к записи этого фрагмента в буфер текста и дизассемблированию следующей части программы. При нажатии клавиши N или любой другой (кроме СТР) дизассемблированный фрагмент в буфер текста записан не будет, но дизассемблирование следующего фрагмента произойдет. Если нажать клавишу СТР, то дизассемблированный фрагмент в буфер текста записан не будет и последовательное дизассемблирование также будет прекращено. На экране появится запрос АДРЕС?, в ответ на который можно ввести новое значение адреса, с которого следует вести дизассемблирование. или нажать еще раз клавишу СТР для завершения работы директивы D.

После ввода директивы М дизассемблер выдает запрос СИМВОЛ:, требующий ввода символа (буква латинского алфавита), который будет использован в качестве первого в именах всех расставляемых в тексте меток, два других символа - двухразрядное шестнадцатеричное число от 00 до 0FFH. Таким образом, максимальное число меток, которое может быть расставлено ДИЗАССЕМБЛЕРОМ, - 256. Если при выполнении директивы М количество меток превысит эту величину, то будет выведено сообщение МНОГО МЕТОК и работа директивы М прекратится. В этом случае можно разбить программу на части и вновь провести дизассемблирование.

После окончания работы директивы М будут выведены начальное сообщение и адрес конца текста в буферы, a DIS."МИКРОН" перейдет в режим ожидания ввода директив.

Теперь можно ввести директиву А, результат работы которой - удаление всех адресов, расположенных в первых четырех позициях каждой строки. После проведенных операций будет создан текст программы, который может быть оттранслирован АССЕМБЛЕРОМ ASSM."МИКРОН" Приведем несколько примеров применения директив при дизассемблировании части самой программы ДИЗАССЕМБЛЕР. Предварительно директивой МОНИТОРА Т 800, FFF, 1100 эта программа была помещена в область трансляции (см. табл. 3-5).

Таблица 3.

DIS."МИКРОН* КОНЕЦ TEKCTA: 2101H

*D

РАБОЧИЙ АДРЕС? 0800

ТЕКСТ(Y/N)? N

NEW(Y/N) Y

АДРЕС?0800

0800

LXI

H,73FF

0803

LXI

D,2100

0806

SPHL

 

0807

XCHD

 

0808

MOV

A,M

0809

XNR

A

080A

JZ

0817

080D

INX

H

080E

CALL

08D9

0811

JNZ

0808

0817

LHLD

0804

081A

SHLD

1000

081A

INR

A

081В

STA

1012

081E

SHLD

1002

0821

LXI

H,0E17

0824

CALL

0E11

0827

PUSH

H

0828

LHLD

1000

082В

MOV

D,H

082C

MOV

E,L

082D

CALL

0DEF

0830

XCHG

 

ТЕКСТ(Y/N)?Y

ДАЛЕЕ ВЫВОД НА ЭКРАН СЛЕДУЮЩЕГО ФРАГМЕНТА ЗАКАНЧИВАЮЩЕГОСЯ ТАК ЖЕ ВОПРОСОМ:

TEKCT(Y/N)?<CTP>

АДРЕС?<СТР>

DIS."МИКРОН" KOHEЦ TEKCTA: 2286H

 

Таблица 4.

0800

 

LXI

H,L00

0803

 

LXI

D,L01

0806

 

SPHL

 

0807

 

XCHG

 

0808

L04:

MOV

A,M

0809

 

INR

A

080A

 

JZ

L02

080D

 

INX

H

080E

 

CALL

L03

0811

 

JNZ

L04

0814

 

LHLD

L05

0817

L02:

SHLD

L06

081A

 

INR

A

081B

 

STA

L07

081E

 

SHLD

L08

0821

 

LXI

H,L09

0824

 

CALL

L0A

0827

 

PUSH

H

0828

 

LHLD

L06

082B

 

MOV

D,H

082C

 

MOV

E,L

082D

 

CALL

L0B

0830

 

XCHG

 
 

L00:

EQU

73FFH

 

L01:

EQU

2100H

 

L03:

EQU

08D9H

 

L05:

EQU

0804H

 

L06:

EQU

1000H

 

L07:

EQU

1012H

 

L08:

EQU

1002H

 

L09:

EOU

0E17H

 

L0A:

EQU

0E11H

 

L0B:

EQU

0DEFH

Таблица 5.

 

LXI

H,L00

 

LXI

D,L01

 

SPHL

 
 

XCHG

 

L04:

MOV

A,M

 

INR

A

 

JZ

L02

 

INX

H

 

CALLL

05

 

JNZ

L04

 

LHLD

L05

L02:

SHLD

L06

 

INR

A

 

STA

L07

 

SHLD

L08

 

LXI

H,L09

 

CALL

L0A

 

PUSH

H

 

LHLD

L06

 

MOV

D,H

 

MOV

E,L

 

CALL

L0B

 

XCHG

 

L00:

EQU

73FFH

L01:

EQU

2100H

L03:

EQU

08D9H

L05:

EQU

0804H

L06:

EQU

1000H

L07:

EQU

1012H

L08:

EQU

1002H

L09:

EQU

0E17H

L0A:

EQU

0E11H

L0B:

EQU

0DEFH

ПОЛУЧЕННЫЙ ТЕКСТ MOIET БЫТЬ ОТТРАНСЛИРОВАН АССЕМБЛЕРОМ ASSM. "МИКРОН". По директиве СТР можно перейти в РЕДАКТОР и редактировать дизассемблированный текст на любом этапе работы. Делать, однако, это нужно осторожно из-за особенностей выполнения директив М и А. Так директива М работает со строго позиционированными строками текста, о чем уже упоминалось. Например, если числовой операнд в трехбайтовой команде сместить при редактировании в любую сторону на любое число позиций, то он не будет заменен на метку, а сохранит свое значение (в некоторых случаях это может оказаться полезным ).

Если вы редактируете текст перед применением директивы А, следует иметь в виду, что при ее выполнении DIS."МИКРОН" удаляет первые четыре символа каждой строки, начинающейся с цифры или латинских букв А, В. С. D, Е, F. Так если в начале какой-либо строки будет поставлена метка CONST:. то после выполнения директивы А на ее месте в тексте останется только Т:. Строки, начинающиеся с любых других символов, останутся без изменений.

Для проверки правильности дизассемблирования рекомендуется провести трансляцию полученного текста программы, сравнить результат трансляции с исходной (используя директиву С МОНИТОРА), а затем модифицировать полученный исходный текст, дополняя его комментариями, псевдооператором ORG и т. д.

Новая версия РЕДАКТОРА ED."МИКРОН" дополнена средствами обработки дизассемблированных текстов. Все директивы ранее опубликованной версии сохранены. Версии отличаются только количеством позиций клавиши ТАБ (4 вместо 8) и порядком работы с директивой AP2+D. Теперь для удаления фрагмента текста необходимо пометить его начало нажатием клавиш AP2+D. переместить курсор на строку, следующую за удаляемым фрагментом, после чего ввести директиву АР2+Е (в прежней версии - AP2+D).

При запуске редактора по директиве G0 МОНИТОРА на экран выводится запрос NEW?. Если ответить Y. то будет очищен текстовый буфер и РЕДАКТОР перейдет в режим ввода текста. При нажатии любой другой клавиши РЕДАКТОР произведет анализ содержимого буфера на наличие признака конца текста и если не обнаружит его, выведет сообщение МАЛО ОЗУ и запрос NEW?, на который опять следует ответить Y. Если признак конца текста будет найден, то на экран выводится его начальный фрагмент (при наличии в буфере текста произвольной информации, заканчивающейся признаком конца текста, на экран будет выведена бессмысленная информация: не следует пытаться редактировать ее, так как это может привести к порче самого РЕДАКТОРА. Выйти из этой ситуации поможет директива AP2+N и нажатие на клавишу Y).

Теперь несколько слов о новых директивах РЕДАКТОРА.

AP2+S - занесение в промежуточный буфер помеченного фрагмента текста. Порядок работы при этом следующий. Начало запоминаемого фрагмента помечают директивой AP2+S. Курсор перемещают на строку, следующую за последней строкой запоминаемого фрагмента, и вводят директиву АР2+Е. Фрагмент текста будет запомнен в буфере, в качестве которого используется область трансляции. При попытке занесения в буфер слишком большого фрагмента будет выведено сообщение МАЛО ОЗУ.

АР2+Т - вставка запомненного фрагмента текста из временного буфера в редактируемый текст перед строкой, на которой расположен курсор.

AP2+L=Y - поиск и замена последовательности символов Х на последовательность Y. Если знак = и последовательность Y отсутствуют, то происходит только поиск последовательности X. Режим поиск/замена удобно использовать при замене имен меток, расставленных ДИЗАССЕМБЛЕРОМ, на имена, более полно отражающие смысл происходящего в программе.

При необходимости разбиения произвольной строки текста на две, курсор устанавливают на символ, с которого должна начинаться новая строка и нажимают клавишу ВК. Для слияния двух строк в одну курсор подводят к первой из объединяемых строк и нажимают клавишу ПС.

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

При работе нового РЕДАКТОРА с АССЕМБЛЕРОМ или ДИЗАССЕМБЛЕРОМ следует помнить, что область трансляции используется в качестве временного буфера, поэтому, пользуясь директивой AP2+S, вы каждый раз уничтожаете содержимое области трансляции - результат ассемблирования или дизассемблируемую программу.

Таблица 6.

Адрес

0002

000E

0021

045D

00C8

0802

0805

0CA2

0DC1

0D48

0D66

0D80

32К

73

21

73

0F

DF

73

21

74

74

74

76

74

16К

33

19

33

07

E7

33

19

34

34

34

36

34

Пакет "МИКРОН" предназначен для компьютера "Радио-86РК" с объемом ОЗУ в 32 Кбайт. В табл.6 приведены адреса ячеек памяти, содержимое которых нужно изменить для 16-килобайтной версии компьютера.

Таблица 7.

ОБЛАСТЬ ПАМЯТИ

ВЕРСИЯ 16К

ВЕРСИЯ 32К

РЕДАКТОР ДИЗАССЕМБЛЕР
СЛУЖЕБНАЯ ОБЛАСТЬ
ОБЛАСТЬ ТРАНСЛЯЦИИ
БУФЕР ТЕКСТА
ВЕРШИНА СТЕКА
ТАБЛИЦА МЕТОК
0000Н - 07FFH
0800H - 0FFFH
1000Н - 1100Н
1100H - 18FFH

1900Н - СТЕК
33FFH
3400Н - 35FFH
0000Н - 07FFH
0800Н
- 0FFFH
1000Н - 1100Н
1100H - 20FFH

2100
Н - СТЕК
73FFH
7400Н - 75FFH

Распределение памяти для обоих версий компьютера приведено в табл.7.

В. БАРЧУКОВ, Е. ФАДЕЕВ

г. Москва

Описание компьютера Радио-86РК
Журнал РАДИО



(C) 2003-2010 www.danbigras.ru Наш адрес: info@danbigras.ru
Всё о старых компьютерах