ZX Spectrum для пользователей и программистов 1991 г.

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


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

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

— относительно небольшой объем занимаемой самим транслятором памяти — около 10К;

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

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

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

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

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

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

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

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

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

ЗАГРУЗКА GENS4

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

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

LOAD ""CODE XXXXX

LOAD "name"CODE XXXXX

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

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

LOAD "GENS4B"CODE XXXXX

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

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

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

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

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

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

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

ассемблера О или А), а также выполнить, не выходя из GENS4 (команда R). А теперь обо всем
подробно.

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

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

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

35 START LD HL, LABEL ;загрузка регистра

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

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

_Метки

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

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

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

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

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

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

JR NC,SKIP ;если в результате не возникло переполнение, то следующая инструк-

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

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

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

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

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

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

INC H

_Выражения

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

десятичная константа (38);
шестнадцатиричная константа (#26);
двоичная константа (%10110);
символьная константа ("$");

и операторы:
+ сложение;
— вычитание;
& логическое «И» (AND);
@ логическое «ИЛИ» (OR) ;
! логическое «исключающее-ИЛИ» (XOR);
* алгебраическое умножение;
/ алгебраическое деление;

? функция MOD: A?B=A-(INT(A/B))*B.

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

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

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

#2BFF?#1040 результат #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 <выражение>

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

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

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

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

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

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

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

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

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

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

DEFM "string"

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

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

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

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

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

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

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

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

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

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

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

ИМЯ_МАКРООПРЕДЕЛЕНИЯ [параметр1 [....[.параметр 16]]]

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

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

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

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

FILL MAC

LD HL,=0

LD DE,=0 + 1

LD BC,=1 - 1

LD (HL),=2

LDIR
ENDM

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

FILL 16384,22528-16384, %01011010

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

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

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

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

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

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

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

ELSE

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

END

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

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

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

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

_Команды ассемблера

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

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

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

*S

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

*L+

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

*L-

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

*D+

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

*D-

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

*C-

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

*С+

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

*M+

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

*M-

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

*F filename

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

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

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

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

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

N1,N2 — числа в пределах от 1 до 65535 включительно;

S1,S2 — строки, состоящие не более чем из 20 символов.

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

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

Если введена некорректная командная строка, например:

РР1,20000,G.WINDOWS

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

P1,20000,G.WINDOWS




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
BBS - список станций BBS ZXNet.
Хит-парад
Новелла - Кoмпьютеpнaя нoвеллa пo игpе LASЕR SQUAD - part one.
Интервью - Kano.
Всякая всячина - Разрушители пратформы.

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