ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Ассемблер GENS4 - введение. Загрузка. Программирование.


GENS4

АССЕМБЛЕР

Из множества ассемблеров и дизассемблеров, существующих для
ZX Spectrum, в Союзе наиболее популярен пакет фирмы Hisoft —
DEVPAC4 (ассемблер GENS4 и отладчик MONS4). Этому способствова-
ли не только несомненные достоинства пакета, но и появление его
версий, работающих с дисководом в среде TR-DOS.

Ассемблер GENS4 отличают следующие положительные свойства:

— относительно небольшой объем занимаемой самим транслятором

памяти — около 1ОК;

— перемещаемость;

— наличие встроенного редактора;

— возможность работы в 51-символьном текстовом режиме;

— наличие макрокоманд и директив условной трансляции;

— возможность подгрузим исходных файлов с кассеты или диска в

процессе трансляции, что позволяет обрабатывать файлы практи-
чески неограниченного размера;

— высокая скорость трансляции;

— возможность записи на диск объектных файлов в процессе трансля-

ции, что позволяет получать программы, занимающие всю доступную

память.

Мы предлагаем Вам описание исходной версии GENS4, а также
версии, адаптированной одним из авторов этой книги для работы с
дисководом в системе TR-DOS. Выяснить, с каким накопителем работает
конкретная модификация GENS4, можно в процессе трансляции. Рас-
сматриваемая версия выводит на экран следующее сообщение:

1990 МО A B-Disk version

Различные варианты GENS4 отличаются также количеством сим-
волов в экранной строке: существуют версии с 51-символьной строкой
и с 32-символьной. Имена этих модификаций для работы с магнитофо-
ном соответственно GENS4-51 и GENS4. Дисковая версия известна
только 51-символьная, чаще всего она встречается с именем GENS4B.

ЗАГРУЗКА GENS4

Ассемблер GENS4 является перемещаемой программой, то есть он
может быть загружен и запущен с произвольного адреса. Как правило,

наиболее удобно располагать GENS4 с адреса около 25000 — в этом случае
Вам предоставляется наибольший объем памяти для текста редактируемой
программы и рабочих таблиц (текстовый файл и таблицы размещаются
непосредственно за GENS4). Максимальный адрес, с которого может быть
загружен GENS4 — около 54000.

Для загрузки GENS4 с ленты выполните один из следующих опера-
торов:

LOAD ""CODE ХХХХХ
LOAD "namef,CODE ХХХХХ

Здесь и ниже ХХХХХ — десятичный адрес, с которого Вы хотите
загрузить GENS4, a name — имя версии.

Для загрузки с диска войдите в TR-DOS (RANDOMIZE USR 15616) и
выполните оператор

LOAD "GENS4B"CODE ХХХХХ

Чтобы предотвратить возможные коллизии с интерпретатором Бейси-
ка, перед загрузкой GENS4 полезно выполнить оператор
CLEAR ХХХХХ-1

Запускается GENS4 оператором RANDOMIZE USR ХХХХХ, который исполь-
зуется также и для перезапуска ассемблера после выхода из него в Бейсик.

Для загрузки и запуска часто применяют программу-загрузчяк на Бей-
сике. Один из ее вариантов приведен в конце описания GENS4.

После запуска GENS4 на экране появляется список команд редактора
и подсказка в виде символа >.

ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ GENS4

Текст рабочей программы на языке ассемблер вводится в GENS4 либо
непосредственно с клавиатуры (команда редактора I), либо подгружается с
магнитного носителя (команда G). Программа состоит из пронумерованных
с произвольным шагом строк, в которые записаны инструкции (команды)
языка, метки, комментарии. Кроме команд процессора Z80, представленных
в стандартной мнемонике (см. «Система команд Z80»), при написании
программ используются специальные инструкции GENS4: директивы ассем-
блера, команды условной трансляции, макрокоманды, команды ассемблера.
Набор, загрузка, редактирование, сохранение и другие операции пад тек-
стом ассемблерной программы осуществляются в строчном редакторе.

Для получения объектного кода* ассемблерный текст необходимо
оттранслировать (проассемблировать) с помощью команды редактора а. Во
время трансляции GENS4 выдает сообщения о найденных ошибках, которые
исправляются затем в строчном редакторе. После создания объектного кода
его можно сохранить на магнитном носителе (команды ассемблера О или А),
а также выполнить, не выходя из GENS4 (команда R).

А теперь обо всем подробно.

Формат строки ассемблера

Строка исходного текста программы для GENS4 имеет следующий формат:

номер метка мнемоника операнды комментарий

35 START LD HLfLABEL ;загрузка регистра

*) На самом деле GENS4 производит не объектный, а непосредственно
исполняемый код.

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

При наборе строки переход к следующему полю формата осуществ-
ляется нажатием клавиш табуляции (Caps Shift/8) или пробела (Space).
Строчный редактор автоматически заменяет пробел на табуляцию. Коммен-
тарии отделяются символом «точка с запятой» (;) и могут располагаться,
начиная с любого поля. Длина строки программы не может превышать 80
символов.

Метки

Метка — это имя, присваиваемое строке текста программы. Она исполь-
зуется для указания адреса передачи управления или для определения констант.

Метка может содержать любое количество символов, но значащими
являются только первые шесть, которые, во избежание конфликтных ситуа-
ций, не должны совпадать с первыми шестью символами других меток. В
качестве меток нельзя использовать зарезервированные слова (см. соответ-
ствующий раздел в конце описания GENS4).

Метка может быть составлена из символов 0...9, A...Z, а...г, , [, , J, #.
Однако первым символом метки непременно должна быть буква. Йекоторые
примеры возможных меток:

Label эти метки

LABEL ^ различны

Long_Label ^ эти метки указывают
LongJ. 4—^ на одно и то же значение

Пример использования метки в программе:

;сложение 8-разрядного числа с 16-разрядным

ADD A,L ; сложение младших разрядов

LD L,A ; запись результата

JR NC,SKiP ; если в результате не

; возникло переполнение,
; то следующая
; инструкция будет пропущена,
; и управление передано
; строке с меткой SKIP

INC Н

SKIP

__Счетчик адресов

В процессе трансляции счетчик адресов указывает адрес текущей
команды и используется для присвоения значений меткам, операндам и т. п.
Значение счетчика адресов обозначается символом $.

С применением счетчика адресов предыдущий пример можно пере-
писать без использования метки:

^сложение 8-разрядного числа с 16-разрядным
ADD A,L
LD L,A

JR NC,$+3 ; инструкция JR занимает два байта,
; a INC H - один, т. о. 2+1=3 байта

INC Н

Выражения

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

операций над константами, метками, счетчиком адресов. В выражения,
обрабатываемые GENS4, можно включать следующие константы (с примерами):

десятичная константа (38);

шестнадцатеричная константа (#26);

двоичная константа (%10110);

символьная константа ("$").'

и операторы:

+ сложение;
— вычитание;
& логическое «И» (AND);
@ логическое «ИЛИ» (OR) ;
I логическое «исключающее ИЛИ» (XOR);
* алгебраическое умножение;
/ алгебраическое деление;
? функция MOD: A?B=A-(INT(A/B))*B.

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

Примеры выражений (при условии, что метка TWIN имеет значение 2):

%0110010!%0100 результат %110110;

#2BFF?#t040 результат #B7F;

1+2*3—4 результат 5;

#12А2+%111 ?256 результат #А9;

"А"—10+13 результат "D";

TWIN+12 результат 14.

При вычислении значений выражений значащими являются только
младшие 16 бит числа (числа от 0 до 65535), например, число 114688
(# 1С000) будет интерпретироваться как 49152 (#С000).

Если в результате умножения будет получено число больше 32767,
GENS4 выдаст сообщение об ошибке «ERROR* 15 (переполнение). При
делении на ноль появится сообщение * ERROR* 14. В остальных случаях
переполнение игнорируется.

Директивы ассемблера

Работая в GENS4, Вы получаете возможность, кроме стандартных
команд микропроцессора Z80, использовать в программах и так называемые
директивы ассемблера.

Мнемоники директив ассемблера записываются в поле мнемоник,
операнды директив соответственно в поле операндов.

ORG <1выр&жение>

Присвоить значение выражения счетчику адресов*.

*) Если предполагается сохранить созданный объектный код на магнитном
носителе средствами GENS4, то директива ORG не должна встречаться в
программе более одного раза.

EQU <выражение>

Присвоить значение выражения метке, которой обозначена данная стро-
ка. Выражение не должно содержать не определенных ранее меток, в
противном случае будет выдано сообщение об ошибке * ERROR* 13.

DEFB <»ыраж€жм®>[г<шмраж*шш>.. .]*

Последовательно разместить в памяти 8-разрядные значения выражений,

начиная с адреса, указанного счетчиком адресов.

DEFW <выражение>[,<выражен ие>...]

Последовательно разместить в памяти 16-разрядные значения выражений,

начиная с адреса, указанного счетчиком адресов.

DEFS <выражение>

Зарезервировать область памяти длиной, равной значению выражения, начи-
ная с адреса, указанного счетчиком адресов. Содержимое выделенной области
не определяется.

DEFM "string"

Записать символьную строку string в память, начиная с адреса, указанного

счетчиком адресов.'

ENT <1ыражвнив>

Установить адрес запуска программы равным значению выражения.
Программа будет запускаться по этому адресу командой редактора R.

Макроопределения

Если в Вашей программе одна и та же последовательность инструкций
ассемблера используется несколько раз, то нет необходимости каждый раз
ее переписывать. Достаточно при первом появлении в тексте этой последо-
вательности выделить ее соответствующими директивами и присвоить имя
(метку), а в дальнейшем вместо других включений записывать в поле
мнемоник эту метку. Такая последовательность инструкций называется
макроопределением, метка — макрокомандой„

Во время трансляции текст макроопределения заносится в специально

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

Если текст макроопределения не помещается в буфер5 то выдается
сообщение No Macro Space. Изменить размер буфера макроопределений
можно с помощью команды редактора С. В дисковой версии размер буфера
по умолчанию установлен равным нулю.

Макроопределение задается директивами ассемблера MAC и ENDM,
первая из которых указывает на начало макроопределения, вторая — на
конец, например:

;оюжение Поразрядного числа с 16-раэрядным

ADDNUM

;оюжение Поразрядного числа с 16-раэрядным

ADDNUM

MAC

ADD

A,L

LD

L,A

JR

NC,$+3

INC

H

ENDM

тело

макроопределения

*) Аргументы в квадратных скобках являются необязательными.

После включения в текст программы этого макроопределения для
сложения аккумулятора с регистровой парой HL можно применять макроко-
манду ADDNUM.

В макроопределение можно включать до 16 параметров, которым
присваивается значение следующих за макрокомандой выражений:

ИМЯ^МАКРООПРЕДЕЛЕНИЯ [параметр! [,...[.параметр! 6]]]

В качестве параметров разрешается передавать только числовые зна-
чения.

В теле макроопределения параметр вызывается указанием его номера
следования в макрокоманде, перед которым ставится знак При этом номер
задается четырьмя младшими битами кода символа, расположенного сразу
за знаком равенства. Например, ссылка на первый параметр может выгля-
деть как -0, или -Р; на второй — -I, или =а. Обратите внимание, что
ссылка на шестнадцатый параметр будет выглядеть как ~G или sso, а не
я1в. Правда, из-за ограничения длины строки 80-ю символами использовать
все 16 параметров довольно затруднительно.

В следующем примере задано макроопределение, заполняющее об-
ласть памяти некоторым значением и имеющее три параметра: адрес начала
области, длину и значение байта-заполнителя:

FILL MAC

LD HL,=0

LD DE,=0 + 1

LD BCf=s? - 1

LD (HL),=2
LDIR
ENDM

Это макроопределение вызывается, например, такой макрокомандой:

FILL 16384,22528-16384,%01011010

Учтите, что макроопределения не могут быть вложенными или рекур-
сивными. Не пытайтесь также в текст макроопределения включать строки с
метками — ассемблер размножит эти метки столько раз, сколько раз будет
вызвано макроопределение, что приведет к неминуемым ошибкам трансля-
ции.

Если для Вас более значимым является минимизация объема програм-
мы, а не удобства» предоставляемые макроопределениями, то вместо них
лучше пользоваться подпрограммами. Однако обратите внимание, что ис-
пользование макроопределений может несколько увеличить скорость работы
программы.

Разрешать или запрещать включение текста макроопределения в
листинг ассемблирования можно командами ассемблера *М+ и *М— (см.
ниже).

Команды условной трансляции

Иногда бывает необходимо, в зависимости от выполнения тех или
иных условий, получать различные варианты объектного кода программы.
Работая в GBNS4. Вы сможете добиться этого, используя команды условной
трансляции IF, ELSE и ШО . С их помощью можно устанавливать или
сбрасывать флаг разрешения трансляции, чем соответственно разрешать или
запрещать ассемблирование фрагментов текста программы.

IF <выражение>

Сбросить флаг разрешения трансляции при нулевом значении выражения
— следующие за командой строки программы не ассемблировать*. Если
значение выражения отлично от нуля, то ассемблирование продолжить
нормально.

ELSE

Инвертировать флаг разрешения трансляции. Если перед появлением ELSE
ассемблирование было разрешено, то запретить его, и наоборот.

END

Установить флаг разрешения трансляции. После этой команды ранее
прерванное ассемблирование продолжается нормально.

Вложенность команд условной трансляции не допускается.

Обратите внимание, что флаг разрешения трансляции по заверше-
нию первого прохода ассемблирования не восстанавливается, и если в конце
программы он был сброшен, то на втором проходе могут возникнуть самые
удивительные эффекты. Поэтому пользоваться условной трансляцией необ-
ходимо с вниманием (полезно, например, завершать программу командой
END).

Комаадр»! ассемблера

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

Команды ассемблера записываются в поле метки и не должны содер-
жать разделителей (табуляций). В командах *Н и *F операнд необходимо
отделить пробелом.

Вставить в листинг три пустые строки. Полезно использовать для разде-
ления программных модулей.

*Н string

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

♦S

Приостановить выдачу листинга ассемблирования. Продолжить трансля-
цию можно, нажав любую клавишу.

*L+

Разрешить выдачу листинга.

*L-

Запретить выдачу листинга.
*D+

Выводить значение счетчика адресов » десятичном виде.
+D—

Выводить значение счетчика адресов в шестнадцатеричном гиде.

*) Обратите внимание, что проверка синтаксиса программы осуществляет-
ся и при запрещенной трансляции.

Выводить сокращенный листинг ассемблирования. Строки сокращенного
листинга не содержат объектного кода. Таким образомг они укорачива-
ются на 9 символов, что делает листинг более удобным для чтения.
Команда используется преимущественно в 32-символьной версии
GENS4.

Выводить полный листинг ассемблирования.

Разрешить распечатку текста макроопределений.

Запретить распечатку текста макроопределений,
♦f ffiename

Включить в процесс трансляции фрагмент программы, записанный на ленте

или диске. Из файла с указанным именем считываются и ассемблируются
блоки текста. Использование команды ♦F позволяет значительно сократить
объем текстового файла, находящегося в памяти, и, следовательно, дает
возможность создавать объектный код, занимающий почти всю доступ-
ную память. При работе с магнитофоном файл необходимо предваритель-
но записать на ленту с помощью команды редактора Т.

СТРОЧНЫЙ РЕДАКТОР

Встроенный в GENS4 строчный редактор позволяет вводить и редакти-
ровать текст программы на языке ассемблера. Управление редактором осуще-
ствляется с помощью команд редактора, которые вводятся на подсказку > и
имеют следующий формат:

C[N1].[N2].[S1],[S2]

где С — собственно команда;

N1, N2 -— числа в пределах от 1 до 65535 включительно;
SI, S2 — строки, состоящие не более чем из 20 символов.

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

Редактор запоминает введенные параметры и может затем использо-
. вать их для некоторых команд в качестве значений, устанавливаемых по
умолчанию.

Если введена некорректная командная строка, например:
РР1,20000, G.WINDOWS

то команда выполнена не будет, а редактор сделает Вам замечание: Pardon?.
Исправьте ошибку и введите команду правильно:
Pi,20000, G.WINDOWS

КОМАНДЫ РЕДАКТОРА

Команды редактора вводятся нажатием клавиши с соответствующей ла-
тинской буквой, которая в названии команды выделена полужирным шрифтом.

Вставь строк

insert [N][,M]*

Автоматически генерировать строки, начиная со строки N и шагом М.
После ввода команды Бы можете производить последовательный набор
текста программы. Отказаться от генерации строк можно, нажав клавишу
Edit (Caps Shift/i). Если в процессе ввода программы номер строки
превысит 32767, то генерация строк прекратится.

Строку также можно вставить в программу, введя на подсказку > ее номер
^ и через пробел — тексг.

Вывод листинга программы

List [N][,M]

Вывести на экран листинг программы со строки N по строку М включи-
тельно. По умолчанию N равно 1, М — 32767. Листинг выводится по
страницам. Переход к следующей странице происходит по нажатию
любой клавиши, кроме Edit, нажатие которой прервет выдачу листинга
и вернет управление редактору.

Konfigure list М

Установить количество строк в странице листинга.

Write text [N][,M]

Распечатать на принтере текст программы со строки N по М включительно.
Если N и М не указаны, то будет распечатана вся программа.

Рецактироаание текста ассемблерной программы

reNumber [N][,M]

Перенумеровать строки программы, начиная с первой строки, которой
присваивается номер N, с шагом М. Если в результате выполнения
команды номер какой-либо строки может превысить 32767, то команда
не выполняется.

Delete N,M

Удалить строки от N до М включительно. Если М меньше N, или определено,

менее двух аргументов, то команда игнорируется.

Отдельная строка может быть удалена просто введением ее номера.

Move [N][,M]

Копировать строку с номером N в строку с номером М. Если строки с

номером N не существует, то команда игнорируется. Если строка с номером
М существует, ее содержимое заменяется содержимым строки N.
Аккуратно используйте эту команду — старайтесь не вызывать ее без
аргументов.

Find [N][,M][,Fs][,Ss]

Найти стринг (строку текста) Ps в программе, начиная со строки N и до
строки М. Если такая строка найдена, то она отображается на экране и
GENS4 переходит в режим редактирования строки, причем курсор уста-

*) Аргументы в квадратных скобках являются необязательными, при их
пропуске, как правило, используется значение параметра по умолчанию.

навлнвается на начало найденного стринга. В режиме редактирования
можно заменить стринг Fs на стринг Ss (см. команду редактора Е).

Edit N

Редактировать строку с номером N. Вызванная на редакцию строка
копируется в буфер и отображается на экране вместе с номером. Редак-
тирование происходит в буфере, поэтому исходная строка не изменяется
и в любой момент может быть восстановлена. При отсутствии строки с
номером N команда игнорируется. Редактирование осуществляется с
помощью следующих подкоманд (клавиш):

SPACE — переместить курсор на одну позицию вправо;

CAPS SHIFT/I — переместить курсор на одну позицию влево;

CAPS SHIFT/8 - переместить курсор на следующую позицию табуляции;

List - отобразить на экране текущее состояние строки;

Kill — удалить символ в указанной курсором позиции;

Zap — удалить все символы, начиная с указанного курсором и до конца строки;

Find — найти следующее появление в тексте программы стринга, ранее

определенного командой редактора F;
Swap — заменить найденный стринг Fs на стринг Ss, ранее определенный
командой редактора F, и искать следующее появление стринга Fs;
Insert - перейти в режим «вставка». Выход из режима осуществляется
нажатием Enter:

eXpand — переместить курсор в конец строки и включить режим «вставка»;
Change — перейти в режим «замена». Выход из режима осуществляется
нажатием Enter:

Quit - прервать редактирование строки: вызванную на редактирование стро-
ку записать в программу в исходном виде, все изменения игнорировать;
Reload - перезагрузить буфер редактирования: вызванную на редактиро-
вание строку перезаписать в буфер в исходном виде, все измене-
ния игнорировать;
ENTER — завершить редактирование строки: поместить отредактирован-
ную строку из буфера в текст программы.

Работа с дисководом и магнитофоном

Текст программы и объектный код можно сохранить как на магнитной
ленте, так и на дискете, Тип накопителя задается форматом имени файла.
При работе с дисководом вторым символом в имени должен стоять знак дво-
еточия (:). Если знак двоеточия отсутствует в имени файла, то в качестве
носителя будет использоваться магнитная лента. Формат имени файла для
дисковых устройств:

где X — номер устройства (1...4, что соответствует дисководам "A"..."D").
Напомним, что имена файлов для магнитофона должны содержать не
более 10 символов, для дисковода — не более 8.

Get text [„3]

Загрузить с магнитного носителя программу из файла с именем S. Если
стринг S пустой, с магнитофона будет счнтываться первый встреченный
файл. Если в памяти уже находится программа, то загружаемый файл будет
присоединен к ней. Строки полученной программы будут перенумерова-
ны, начиная с номера 1 и с шагом 1.

Put text [N][,M][,S]

Записать на магнитный носитель программу со строки N до М включитель-
но в файл с именем, заданным стрингом S. По умолчанию используются

аргументы, установленные предыдущей командой.

Примеры.

Записать строки с номерами от 20 до 400 включительно на магнито-
фон в файл с именем MAINPROG:
P20,400,MAINPRGG

Записать всю программу на дисковод "В" в файл с именем MIRACLE:
PI,32767,2:MIRACLE

Если при записи на диск файл с указанным именем уже существует, то
(в зависимости от версии GENS4) будет выведен запрос:

Overwrite (Y/N)? (Переписать (Да/Нет)?)
или

File exists Delete (Y/N)? (Файл найден Удалить (Да/Нет)?)

Для удаления существующего файла и записи нового нажмите Y; для

отмены операции — любую другую клавишу.

Таре for include [N][,M][,S]

Записать программу в специальном формате* Записать на магнитную ленту в
файл с именем S фрагмент программы со строки N по М в специальном
формате для последующего включения в процесс трансляции по команде
ассемблера *F. Файл разбивается на блоки, длина которых равна размеру
входного буфера (см. команду редактора С).

Object save [,,S]

Записать на магнитный носитель объектный код в файл с именем S
(записывается код, созданный после последней директивы ORG). Если
объектный код не создан, команда будет проигнорирована.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Тема - кусочек схемы cmos-часов.
С миру по биту - обзор писем читателей, кое-что об игре "Virus" и условиях проведения и участия в Открытом Чемпионате Вирусов.
Поздравления - С праздником 8 Марта!
Анекдоты
Demo-строение - Алгоpитмы обpаботки видимости повеpхностей 3D-фигуp.

В этот день...   21 ноября