Радио-86РК/Радио 07-87/Редактор и Ассемблер
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: В. БАРЧУКОВ, Г. ЗЕЛЕНКО, Е. ФАДЕЕВ Источник: http://retro.h1.ru/RK86/Edit/Edit.php |
Предлагаемый вниманию читателей пакет программ, условно названный «Микрон», состоит из РЕДАКТОРА текстов (ED) и АССЕМБЛЕРА (ASSM).
РЕДАКТОР, как нетрудно догадаться, предназначен для редактирования любого текста (например, такой же статьи) непосредственно на экране дисплея: исправления ошибок, удаления и ввода новых символов и целых фрагментов текста. При невозможности провести работу над текстом в один прием РЕДАКТОР запишет готовые части текста на магнитную ленту, а при необходимости поможет скомпоновать из отдельных частей полный текст.
АССЕМБЛЕР — программа-транслятор (переводчик) для разработки программ на языке ассемблера микропроцессора КР580ИК80А. Текст программы под управлением РЕДАКТОРА с клавиатуры или магнитной ленты заносят в область текстового буфера ОЗУ компьютера, а затем с помощью АССЕМБЛЕРА транслируют. Результат трансляции — машинные коды разрабатываемой программы — располагается в другой области ОЗУ компьютера, называемой областью трансляции. Этой же областью можно воспользоваться и для отладки оттранслированной программы или перенести ее директивой Т МОНИТОРА для этой цели в другую область. Естественно, как и любой другой, текст программы на ассемблере РЕДАКТОР может записать на магнитную ленту.
Работа с пакетом программ начинается с запуска РЕДАКТОРА директивой G0 МОНИТОРА, в результате чего на экране возникает надпись «ED *МИКРОН*» (при первом запуске появляется сообщение об ошибке, но пусть вас это не пугает РЕДАКТОР сам восстановит нормальный режим работы). Задание дают поочередным нажатием на клавиши «АР2» и «N» (далее в статье поочередное нажатие клавиш АР2 и какой-либо буквы латинского алфавита или символа будем именовать директивой и обозначать в виде алгебраической суммы, например, в данном случае — AP2+N). По этой директиве очистится экран, и на запрос РЕДАКТОРА NEW? можно ответить Y, что приведет к очистке текстового буфера в памяти компьютера и переводу РЕДАКТОРА в режим ввода строки (в начале первой строки появится псевдографический символ "® "), в противном случае установится режим редактирования (его отличительный признак — символ " ").
Первый из режимов используют для ввода текста с клавиатуры компьютера, причем строка может состоять не более чем из 63 символов. За восемь позиций до конца строки генерируется звуковой сигнал, предупреждающий оператора о том, что для продолжения ввода необходимо перейти на новую строку (кстати, точно так же РЕДАКТОР отреагирует и на попытку ввода недопустимых при каких-либо ситуациях директив). Набор строки завершают нажатием на клавишу «ВК», в результате чего она пересылается в текстовый буфер. Допущенную при вводе ошибку легко исправить, сместив курсор назад, до нужного места. Устранив ошибку, его можно вернуть в любую позицию в строке. После нажатия на клавишу «ВК» в текстовый буфер заносятся символ, под которым находился курсор, и все символы, находящиеся в строке слева от него. Для перехода из режима ввода строки в режим редактирования достаточно ввести директиву СТР (если она вводится до нажатия на клавишу «ВК», набранная строка не попадет в текстовый буфер).
Режим редактирования позволяет оперативно просмотреть введенный текст построчно или фрагментами, содержащими 24 строки. Очередной фрагмент текста выводят на экран директивой АР2+†. Для удобства восприятия текста в начале каждого нового фрагмента всегда отображаются две строки предыдущего. Директива АР2+^ служит для просмотра фрагментов в обратном порядке. К началу или концу текста можно вернуться, дав РЕДАКТОРУ соответственно директиву АР2+В или АР2+Е. Для перемещения курсора к началу первой строки текущего фрагмента пользуются клавишей " ", а внутри него — клавишами "® ", "¬ ", " ", "¯ ". При попытке сместить курсор за пределы экрана вверх или вниз текст сдвигается на одну строку. Смещение курсора за его нижнюю границу приводит к автоматическому переходу РЕДАКТОРА в режим ввода строки, то есть для продолжения ввода достаточно нажать на клавиши «АР2», «Е», "¯ ".
Чтобы найти какой-либо фрагмент текста, совсем не обязательно просматривать его весь: на этот случай в РЕДАКТОРЕ предусмотрена возможность автоматического поиска заданной группы символов. Для этого после, задания директивы AP2+L вводят группу символов, которую необходимо отыскать, и нажимают на клавишу «ВК» — на экране появится фрагмент текста, начиная со строки, в которой они впервые встретились. Воспользовавшись директивой AP2+R, можно найти и все последующие фрагменты с заданными символами. Если в тексте заданной группы символов нет, то прозвучит звуковой сигнал и восстановится режим редактирования, а если вы, по рассеянности, забыли сообщить РЕДАКТОРУ, какие символы необходимо искать и нажмете клавишу «ВК» — на экране восстановится последняя из отображавшихся страниц текста.
Наиболее часто при редактировании текста возникает необходимость вставить в строку один или несколько новых символов, например, записать их взамен старых или ввести дополнительно. Для этого в РЕДАКТОРЕ предусмотрен режим автоматической раздвижки символов в строке. Включают автораздвижку директивой AP2+F4, а выключают — директивой АР2+F2. Отдельные символы удаляют из строки установкой курсора под соответствующим знакоместом и нажатием на клавишу «F2», а освобождают для пропущенного клавишей «F4». При вводе дополнительных символов необходимо помнить об ограничении на их количество в строке.
В режиме редактирования в текст можно вставлять отдельные псевдографические символы, нажав предварительно на клавиши «АР2», «\». В режиме ввода строки этого делать не нужно — любые символы можно вводить непосредственно.
Чтобы вставить в текст одну или несколько новых строк, к началу следующей за ними строки подводят курсор и сообщают РЕДАКТОРУ о своих намерениях директивой АР2+А. Если же их надо вставить перед первой строкой текста, то вначале нажимают на клавишу "¬ ", а уж затем вводят директиву АР2+А. В результате весь текст, следующий за помеченной строкой, стирается с экрана (но не из текстового буфера) и РЕДАКТОР переходит в режим ввода строк. Выйти из этого режима можно нажатием на клавишу «СТР».
Для удаления фрагмента текста курсор помещают в начало его первой строки и нажимают на клавиши «АР2», «D». Затем, манипулируя клавишами " ", "¯ " или «АР2» и "¯ ", перемещают курсор до строки, перед которой заканчивается удаляемый фрагмент текста (помеченная строка будет сохранена), и вновь вводят директиву AP2+D. Если данный фрагмент решено оставить, необходимо нажать на клавишу «СТР».
Имеющийся в памяти компьютера текст можно записать на магнитофон, воспользовавшись директивой АР2+O. В ответ на нее РЕДАКТОР запрашивает имя текста, под которым он будет записан на магнитную ленту. Указав имя (впрочем, этого можно не делать) и включив магнитофон в режим записи, нажимают на клавишу «ВК».
Для приема текста с магнитной ленты вводят директиву АР2+I, а затем, в ответ на запрос РЕДАКТОРА — имя нужного текста. После этого включают магнитофон на воспроизведение и нажимают на клавишу «ВК». Если имя не указать, то с магнитной ленты в текстовый буфер компьютера будет введен первый встретившийся на ленте текст. По окончании ввода на экране отображается начальный фрагмент текста.
РЕДАКТОР может самостоятельно сравнить записанный на ленту текст с имеющимся в памяти компьютера. Для этого надо нажать на клавиши «АР2», «V» и ввести текст с магнитной ленты. Если тексты не идентичны, на экране появится сообщение «ОШИБКА», а если полностью совпадают, — их начальный фрагмент. РЕДАКТОР позволяет компоновать текст из нескольких фрагментов, которые в этом случае вводят директивой АР2+М. Любую директиву работы с магнитофоном можно отменить, нажав на клавишу «СТР».
Введенную программу можно сразу же оттранслировать, передав управление АССЕМБЛЕРУ директивой СТР, в ответ на которую на экране появится надпись «ASSM *МИКРОН*» (из режима ввода она должна быть отдана дважды, редактирования — один раз). При необходимости из РЕДАКТОРА можно «выйти» в МОНИТОР, нажав на клавишу «УС» и удерживая ее на «E» (далее эту ситуацию будем записывать «УС» и «E»).
Рассмотрим теперь некоторые требования, предъявляемые к программам при использовании транслятора ASSM с языка ассемблера.
Прежде всего необходимо учесть, что программы на языке ассемблера, предназначенные для трансляции, по форме должны быть аналогичны тексту, приведенному в табл.1. Для удобства ввода программы пользуйтесь клавишей «ТАБ» (табуляция). При нажатии на нее курсор сметается в ближайшую правую позицию, номер которой кратен восьми, что позволяет правильно форматировать текст программы.
Таблица 1.
Таблица 1 ПРИНТ: EQU 0F818H ; АДР.ПОДПР. ВЫВОДА СООБЩЕНИЯ НА ЭКРАН БАЙТ: EQU OF821H ; АДР.ПОДПР. ЗАПРОСА БАЙТА ИЗ ЭКР. БУФЕРА СТАРТ: LXI H,СТРО ; ВЫВЕСТИ НАЧАЛЬНОЕ CALL ПРИНТ ; СООБЩЕНИЕ M10: CALL ВВОД ; ВВЕСТИ СКОРОСТЬ ДВИЖЕНИЯ. MOV C,A ; SUI 30H ;ВВЕДЕННЫЙ КОД ДОЛЖЕН JC M10 ;ЛЕЖАТЬ В ДИАПАЗОНЕ CPI 10 ;ОТ 30 ДО 39H JNC З0Н ; ИНАЧЕ - ПОВТОРИТЬ ВВОД, CALL ВВОД ; ОТОБРАЗИТЬ ВВЕДЕННЫЙ СИМВОЛ ADD A ; ВЫЧИСЛЕНИЕ КОНСТАНТЫ MOV B,A ; ЗАДЕРЖКИ
Используемые в программах метки должны состоять из последовательностей латинских или русских букв или цифр и обязательно начинаться с буквы или символов «@» и «?» (длина меток может быть любой, но идентифицируются они только по первым шести символам). В качестве метки нельзя использовать имена регистров микропроцессора А, В, С, D, Е. Н, L, SP, PSW.
В программах можно использовать псевдооператоры ORG, END, DB, DW, DS, EQU, о назначении которых рассказано в статье Д. Горшкова и Г. Зеленко «Немного о программировании».
Имена меток перед псевдооператором EQU должны оканчиваться знаком «:», причем описаны они должны быть до того, как будут использованы в программе.
Псевдооператор ORG, определяющий начало области памяти, в которой будет работать оттранслированная программа, должен быть описан только один раз.
В качестве операндов можно использовать имена регистров микропроцессора, константы, имена меток и выражения, а также десятичные и шестнадцатеричные числа. После шестнадцатеричного числа ставят латинскую букву Н, а если оно начинается с буквы, впереди добавляют цифру 0.
Операндами могут быть выражения с арифметическими знаками «+» и "- ", В них можно использовать константы, метки, а также текущий адрес трансляции, обозначаемый символом «$». Трансляция начинается после нажатия на одну из следующих клавиш:
1 — программа транслируется с одновременным выводом на экран протокола трансляции, представляющего собой строки исходного текста программы, перед которыми в шестнадцатеричной системе выводятся коды ошибок, адреса размещения команд и данных в ОЗУ компьютера и машинные коды транслируемой программы (см. табл. 2).
2 — после трансляции программы на дисплее отображается перечень встретившихся в ней имен меток в алфавитном порядке (для латинского алфавита) и их шестнадцатеричные адреса:
3 — исходный текст программы транслируется в машинные коды, и выводится сообщение о результатах трансляции: число ошибок, встретившихся в тексте, и два шестнадцатеричных числа.
Первое из них — адрес конца оттранслированной программы в той области, где она должна работать, второе, ограниченное символами «/», — в области трансляции. Это связано с тем, что в результате трансляции машинные коды программы всегда располагаются в области трансляции независимо от адресов, в которых они должны работать. Поэтому, если начальный адрес транслируемой программы отличен от адреса начала области трансляции (эта область располагается с адреса 1100Н по 18FFH), то перед отладкой или запуском ее необходимо переместить в рабочую область, определяемую псевдооператором ORG в начале программы. При перемещении программы с помощью директивы МОНИТОРА следует помнить, что первый адрес области трансляции известен и всегда равен 1100Н, поэтому директива МОНИТОРУ для перемещения машинных кодов программы должна выглядеть следующим образом: Т1100, адрес конца программы в области трансляции, адрес, заданный псевдооператором ORG.
Обычно, если нет каких-либо специфических особенностей, в начале текста программы псевдооператор ORG 1100Н можно не ставить. В этом случае рабочая область оттранслированной программы совпадёт с областью трансляции. После отладки в одной области программу можно перетранслировать для использования в любой другой, изменив лишь начальный адрес, задаваемый псевдооператором ORG.
Трансляцию программы можно прервать нажатием на клавиши «УС» и «С». Выйти из АССЕМБЛЕРА в МОНИТОР можно, нажав на клавиши «УС» и «Е» (для этого можно также использовать клавишу 0 или любую другую, с кодом символа меньше 31Н). Управление МОНИТОРУ передается по адресу 0F86CH, что позволяет обойти процедуру очистки экрана.
При нажатии на клавишу «СТР» управление передается РЕДАКТОРУ.
Если при трансляции объем ОЗУ компьютера окажется недостаточным, она прекратится и на экране появится сообщение «МАЛО ПАМЯТИ».
Во время трансляции АССЕМБЛЕР анализирует также синтаксис исходного текста программы и при обнаружении ошибок выводит информацию о них в виде соответствующих кодов вместе с протоколом трансляции. Вот перечень обнаруживаемых ошибок:
01*- двойное определение метки; 02*- метка не была определена ранее; 04* — использована несуществующая мнемоника команды; 08* — неправильно определен операнд; 10* — в имени метки применен недопустимый символ.
Если в одной строке обнаружено несколько ошибок, выводится результирующий код, равный сумме кодов ошибок. Перечни директив РЕДАКТОРА и АССЕМБЛЕРА приведены соответственно в табл. 3 и 4.
Таблица 3
Директива | Выполняемые действия |
---|---|
G0 | Запуск РЕДАКТОРА по директиве МОНИТОРА |
НАЧАЛО РАБОТЫ Очистка экрана, при ответе Y на запрос NEW? — очистка текстового буфера и установка режима ввода строки | |
СТР | Выход в АССЕМБЛЕР |
УС и Е | Выход в МОНИТОР |
РАБОТА С МАГНИТОФОНОМ | |
АР2+O | Вывод текста на магнитофон |
АР2+I | Ввод текста с магнитофона |
AP2+V | Сравнение текста, хранимого в ОЗУ, с введенным с магнитофона |
АР2+М | Ввод дополнительного фрагмента текста к уже имеющемуся и ОЗУ |
СТР | Отмена любой директивы работы с магнитофоном |
РЕЖИМ ВВОДА СТРОК | |
ВК | Ввод в память набранной строки |
<-, -> | перемещение курсора для исправления ошибки |
СТР | Завершение ввода строк |
РЕДАКТИРОВАНИЕ ТЕКСТА | |
АР2+В | Переход к началу текста |
АР2+E | Переход к концу текста |
АР2+А | Ввод новой строки |
АР2+вниз | Просмотр фрагментов текста |
АР2+ | Просмотр фрагментов текста в обратном порядке |
\ | Перемещение курсора к началу первой строки |
<-, ->, вниз | Перемещение курсора к месту редактирования |
ПОИСК Группы СИМВОЛОВ | |
AP2+L | Ввод группы символов |
ВК | Отображение фрагмента текста, в котором впервые встретилась заданная группа символов |
AP2+R | Отображение следующего фрагмента текста с заданной группой символов символов |
ИСПРАВЛЕНИЕ ОШИБОК | |
AP2+F4 | Включение автораздвижки |
АР2+F2 | Выключение автораздвижки символов |
F2 | Удаление символа |
F4 | Освобождение места для пропущенного символа |
АР2+\ | Ввод одного псевдографического символа |
УДАЛЕНИЕ ФРАГМЕНТА ТЕКСТА | |
вниз, AP2+вниз | Перемещение курсора к началу первой строки удаляемого фрагмента текста |
AР2+D | Маркировки первой строки удаляемого фрагмента |
вниз, AP2+вниз | Перемещение курсора к началу строки, предшествующей последней удаляемой |
AP2+D | Удаление фрагмента текста |
СТР | Отмена любой директивы удалении фрагмента текста |
G800 | Запуск АССЕМБЛЕРА по директиве МОНИТОРА |
1 | Трансляция программы с отображением на экране протокола трансляции |
2 | Трансляция программы с отображением на экране таблицы меток |
3 | Трансляция программы с отображением на экране количества ошибок и адресов транслированной программы |
СТР | Выход в РЕДАКТОР |
УС и Е | Выход н МОНИТОР |
Примечание. Выполнение директив 1 и 2 автоматически сопровождается и выполнением директивы 3.
Машинные коды пакета программ «Микрон» (для компьютера с объемом ОЗУ 16К) приведены в табл.5, а поблочные контрольные суммы в табл.6. Необходимый для их размещения объем памяти — 4 Кбайт, причем и РЕДАКТОР, и АССЕМБЛЕР могут работать в ПЗУ независимо один от другого. Первый расположен в памяти с адреса 0000Н по 07FFH, второй — с 0800Н по 0FFFH. Служебная область ограничена ячейками 1000Н и 10FFH, для стека отведена область от 35FFH. Текст, подготавливаемый с помощью РЕДАКТОРА, располагается, начиная с адреса 1900Н.
Как уже упоминалось, под машинные коды оттранслированных программ отведена область памяти с 1100Н по 18FFH (2 Кбайт). Этот объем можно изменить, если расположить начало текста или начало области трансляции по другим адресам.
Для изменения адреса начала текстового буфера РЕДАКТОРА в ячейки 0028Н и 0029Н необходимо записать соответственно младший и старший байты нового адреса начала текста, а в ячейки 05ЕАН и 05FBH — младший и старший байты того же адреса в дополнительном коде. Дополнительный код — это код, обратный имеющемуся и дополненный до единицы. В АССЕМБЛЕРЕ при этом необходимо изменить содержимое ячеек 084СН и 084DH, записав в них соответственно младший и старший байты нового адреса начала текста.
Таблица 6.
Адрес начала области трансляции хранится в ячейках 0852Н, 0853Н и 09А4Н, 09А5Н. В РЕДАКТОРЕ в области памяти с 0003Н по 0019Н расположены команды вызова подпрограмм МОНИТОРА, а в ячейках 0014Н и 0015Н — адрес передачи управления МОНИТОРУ. В АССЕМБЛЕРЕ эти же команды расположены по адресам 0Е5ЕН — 0Е6СН, а адрес передачи управления МОНИТОРУ — в ячейках 0815Н и 0816Н, Для работы в компьютерах с объемом ОЗУ 32 Кбайт необходимо изменить начальное значение указателя стека, которое размещается в ячейках 001FH, 0020Н, 0801Н, 0802Н, 0866Н, 0867Н. Эти исправления можно сделать вручную, но лучше «поручить» программе, которая, используя подпрограммы МОНИТОРА, (определения и установки верхней границы свободной памяти), автоматически настроит РЕДАКТОР и АССЕМБЛЕР под имеющийся в компьютере объем памяти. Такая программа будет опубликована в одном из следующих номеров журнала.
В. БАРЧУКОВ, Г. ЗЕЛЕНКО, Е. ФАДЕЕВ
г. Москва