Р а з д е л 1. З а п у с к.
=============================
1.1. Введение и инструкции загрузки
===================================
GENS4 - это мощный и легкий в использовании ассемблер для Z80, кото-
рый очень близок к стандартному ассемблеру ZILOG по определению. В отли-
чии от многих других ассемблеров, пригодных для компьютеров "SPECTRUM",
GENS4 является обширной, профессиональной частью программного обеспечения
и побуждает вас очень тщательно изучать следующие разделы вместе с приме-
ром Приложения 3 перед попытками использования ассемблера.
Если вы еще новичок, то вначале проработайте Примечание 3 или про-
консультируйтесь в одной из отличных книг, приведенных в библиографии.
У нас есть версии систем DEVPAC 4 на диске, для DISCIPLE & DISCOVERY
дисковой системы и для компьютеров SPECTRUM PLUS 3. Эти версии работают
точно так же, как описано в этом документе, просто заменяйте слово "мик-
ропривод", там где оно встречается, на слова "диск OPUS", "диск PLUS 3"
или "DISCIPLE диск" в соответствии с вашей системой. Существует несколько
внешних особенностей для версии PLUS 3, которые описаны на дополнительном
листке.
GENS4 занимает приблизительно 10К в памяти и использует свой внешний
стек, так что это - замкнутая часть программного обеспечения. Она содер-
жит собственный строчный редактор, который помещает текстовой файл сразу
за кодами GENS4, в то время как таблица символов ассемблера создается за
текстовым файлом, поэтому вы должны предоставить достаточное прост-
ранство, чтобы поместить сам ассемблер, таблицу символов максимального
размера и текстовый файл, который вы, вероятно, будете использовать в те-
кущем сеансе. Поэтому загружать GENS4 часто удобнее в нижние адреса памя-
ти.
Существует 2 версии ассемблера на кассете, обе на стороне 1. Сначала
помещена версия с 51 символом в строке, за ней следует рассматриваемая
версия с 32 символами. Их имена на ленте являются соответственно GENS4-51
и GENS4 и вы должны использовать ту версию, которая больше вам подходит.
Версия GENS4-51 на 400 байт длиннее, чем GENS4.
Для загрузки GENS4 поместите магнитную ленту с ним в кассетный маг-
нитофон и введите:
LOAD ""CODE XXXXX [ENTER] и нажмите клавишу "воспроизведение"
магнитофона. Или:
LOAD "GENS4" CODE XXXXX [ENTER]
или:
LOAD "GENS4-51" CODE XXXXX [ENTER],
где: XXXXX - десятичный адрес, с которого вы хотите загрузить GENS4.
Только после того, как вы загрузите коды GENS4 в компьютер, вы може-
те войти в ассемблер, набрав:
RANDOMIZE USR XXXXX, где
XXXXX - адрес, с которого загружены коды ассемблера.
Если в любой последующий момент вы вновь пожелаете войти в ассемб-
лер, то вы должны просто адресоваться к ячейке XXXXX, которая хранит
предварительно созданный файл информации.
Например, вы хотите загрузить ассемблер с десятичного адреса 26000.
Для этого наберите:
LOAD "" CODE 2600 [ENTER]
RANDOMIZE USR 2600 [ENTER]
Для перезапуска ассемблера используйте:
RANDOMIZE USR 2600 в пределах BASICа.
Только после ввода GENS4 на экране возникнет подсказка в виде симво-
ла ">"(подсказка команд редактора).
Раздел 3 содержит информацию о том,как нужно вводить и редактировать
текст, а раздел 2 - о том, что нужно вводить.
1.2. Получение копии системы
============================
После загрузки GENS4 в память вашего SPECTRUM'а вы можете получить
копию ассемблера следующим образом:
SAVE "GENS4-51" CODE XXXXX,11392 [ENTER] или
SAVE "GENS4"2 CODE XXXXX,11010 [ENTER] для кассеты
SAVE * "М";1;"GENS4-51" CODE XXXXX,11392 [ENTER] или
SAVE * "М";1;"GENS4" CODE XXXXX,11392 [ENTER] для микродрайвера,
где: XXXXX - адрес, с которого вы загрузили GENS4.
Вы должны сделать эту копию перед входом в GENS4 для того, чтобы
сохранить перемещаемую информацию внутри программы.
Инструкции получения копий для DEVPAC серии PLUS смотрите на допол-
нительном листке.
Пожалуйста, заметьте, что мы разрешаем вам сделать копию GENS4 для
вашего собственного пользования, чтобы вы могли уверенно программировать.
Пожалуйста, не делайте копий GENS4 для передачи (или, что еще хуже, для
продажи) вашим друзьям. Мы выпускаем программное обеспечение по очень ра-
зумной цене и полной послепродажной поддержкой, но если люди сами начнут
копировать наше программное обеспечение, то мы перестанем продолжать это
делать. Пожалуйста, покупайте, но не крадите!
Р а з д е л 2. П о д р о б н о с т и G E N S 4.
==================================================
2.0. Принцип работы GENS4, ключи ассемблера,
формат листинга.
============================================
GENS4 является быстрым двухпроходным ассемблером для Z80, который
ассемблирует всю стандартную мнемонику для Z80 и содержит следующие осо-
бенности: макросы, условное ассемблирование, множество команд ассемблера
и таблицу символов в виде двоичных троек.
Когда вы вызываете ассемблирование, то вы используете команду "А":
А4,2000,1:TEST [ENTER]
Первый код (4 - см. выше) после А определяет условия трансляции, ко-
торые вы хотите иметь в данный момент. Эти условия трансляции и их ключи
будут перечислены ниже. Если вы не хотите использовать ключи, то номер
набирать не надо, поставьте только запятую.
Второй код (2000 - см. выше) - это десятичный размер символов в бай-
тах. По умолчанию (при простом использовании запятой без кодов), GENS4
будет выбирать размер таблицы символов, подходящий к размеру исходного
файла - обычно это бывает вполне приемлемо. Однако, при использовании
ключа "включить" вы можете задать размер таблицы символов больше обычно-
го, ассемблер в этом случае не будет определять размер таблицы символов,
которая будет построена.
После указания размера таблицы символов вы можете ввести имя файла,
например, 1:TEST, как указано выше. Если вы это сделаете, то результирую-
щий объектный код, полученный в результате ассемблирования, будет сохра-
нен автоматически, независимо от размера генерируемого кода. Если вы не
хотите использовать такую возможность, то имя файла не вводите. Не вводи-
те вторую запятую, иначе GENS4 будет считать, что вы вводите пустое имя
файла! Более подробно с командой "А" можно познакомиться в приложении 3.
Ключи ассемблирования:
1 - выдает листинг таблицы символов в конце второго прохода ассемблирова-
ния;
2 - запрет на генерацию объектного кода;
4 - производит листинг ассемблирования (отметим, что в ранних версиях
ассемблера такой возможности не было);
8 - направить листинг ассемблирования на печать;
16- просто помещает объектный код, если он, конечно, получен, после таб-
лицы символов. Счетчик адресов обновляется.
Таким образом, объектный код может быть помещен в одну область памя-
ти, а работать - в какой-либо другой;
32- исключение проверки того, куда помещается объектный код (это бывает
полезно для ускорения ассемблироания);
Для того, чтобы скомбинировать ключи, просто складывайте их один с
другим. Так, код "А33" производит быстрое ассемблирование - не выдается
листинг, не производится проверка, чтобы увидеть, куда в настоящий момент
помещают объектный код, при этом в конце выдается листинг таблицы симво-
лов.
Отметим, что при использовании ключа "А16" директива "ENT" не будет
иметь эффекта. Если использован ключ "А16", то вы можете определить, где
находится объектный код, используя команду редактора "Y". По этой команде
можно определить конец текста (его называют второй номер) и затем доба-
вить к нему назначенный размер таблицы +2.
Ассемблирование происходит за два прохода: в течение 1-го прохода
GENS4 ищет ошибки и собирает таблицу символов, второй проход генерирует
объектный код (если не указан ключ 2). В течение первого прохода на экра-
не и принтере ничего не отображается, пока не встретится ошибка. В случае
ошибки будет выдано сообщение об ошибке с номером ошибки за ним (см.
Приложение 1). Ассемблирование приостанавливается - нажмите клавишу "Е"
для возврата в редактор или любую другую клавишу для продолжения ассемб-
лирования следующей строки.
В конце первого прохода будет выдано сообщение:
PASS 1 ERRORS: NN
Если хоть одна ошибка будет обнаружена, то ассемблирование затем бу-
дет остановлено и перехода ко второму просмотру не произойдет. Если ка-
кие-нибудь метки были обнаружены в поле операнда, но не объявлены в поле
метки, то последует сообщение:
*WARNING* LABEL ABSENT
В течение второго прохода генерируется объектный код (если генерация
не запрещена ключом 2 (см. выше)).
Во время второго прохода листинг ассемблера не производится, кроме
случая, когда указан ключ 4 или команда ассемблера L+.
В 32-х символьной версии листинг ассемблера состоит обычно из двух
строк в следующей форме:
с000 210100 25 LABEL
LD HL,1
1 6 11 21...26
тогда как в 51-символьной версии листинг печатается в одну строку. Если
листинг не помещается в одну строку, то он завершается на следующей.
На первом месте в строке стоит значение счетчика адресов, который
соответствует данной строке. Если в строке встречаются инструкции ORG,
EQU или ENT (см. 2.7), то на первом месте будет стоять значение поля
операнда инструкции. Эта запись обычно отображается в шестнадцатиричном
виде, хотя используя команду "*D+" ее можно отобразить и в неудобном
десятичном виде (см. 2.9).
Следующая запись с позиции 6 занимает до 8 символов в строке
(представляет до 4-х байтов) и является объектным кодом текущей инструк-
ции (см. ниже команду *С).
Затем следует номер строки - целое число в диапазоне
1... 32767.
Позиции 21...26 первой строки содержат 6-символьную метку, опреде-
ленную в этой строке.
После метки следует мнемоника инструкции, которая занимает поз.
21...24. (в 32-символьной версии это будет новая строка, если только не
использовать команду *С).
Затем, с позиции 2, следует поле операндов, и завершают строку ком-
ментарии, которые при необходимости можно продолжить на другой строке.
Команда *С ассемблера может быть использована для получения короткой
строки листинга ассемблирования - ее вводят, чтобы не включать 9 симво-
лов, представляющих объектный код инструкции. Это дает возможность отоб-
разить большинство строк ассемблера в виде, удобном для экрана со строкой
в 32 позиции (см. ниже разд. 2.8.).
Изменение формата листинга.
(только для 32-символьной версии)
=================================
С помощью команды "POKE" вы можете модифицировать форму, по которой
каждая строка листинга разбивается внутри 32-символьной версии GENS4 на 3
части. Указания, как это сделать, приведены ниже. Мы отличаем понятие
"строка ассемблера", которая является текущей строкой листинга ассемблера
и хранится во внешнем буфере, от понятия "экранная строка", которая явля-
ется строкой, действительно возникающей на дисплее. Строка ассемблера
обычно порождает более одной экранной строки.
1. 51-й (#33) байт от начала GENS4 содержит значение, определяющее пози-
цию, до которой будет отображаться строка листинга на экране. Цикли-
чески меняя этот байт от 0 до любого другого значения (256) можно
заканчивать первую экранную строку в необходимом месте (это особенно
полезно при использовании микроформатного принтера).
2. 52-й (#34) байт от начала GENS4 дает номер позиции, с которой должна
начинаться каждая последующая экранная строка.
3. 53-й (#35) байт от начала GENS4 указывает количество символов остатка
строки ассемблера, который будет выведен во второй экранной строке
после первой.
Например, вы хотите, чтобы каждая первая экранная строка содержала
20 символов (т.е. не включала бы поле метки) и затем каждая последующая
экранная строка начиналась с позиции 1 и занимала бы всю строку. Также
предположим, что вы загрузили GENS4 с десятичного адреса 26000. Чтобы по-
лучить вышеуказанные изменения, надо из BASICа ввести следующие инструк-
ции:
POKE 26051,20
POKE 26052,1
POKE 26053,31
Вышеприведенные модификации возможны только в том случае, когда не
была использована команда *С.
Листинг может быть приостановлен в конце строки нажатием [CAPS
SHIFT] и [SPACE] вместе. В последующем нажимайте клавишу "Е" для возврата
в редактор или любую другую клавишу для продолжения листинга.
Единственными ошибками, которые могут появиться во втором проходе,
являются ошибки типа "*ERROR*10 (см. Прил.1) и "BAD ORG!" (которая появ-
ляется, когда объектный файл накладывается на GENS4, исходный файл или на
таблицу символов - это может быть предотвращено использованием другого
формата). *ERROR* 10 - это не фатальная ошибка, поэтому вы можете продол-
жать ассемблирование, как и на первом проходе, тогда как ошибка "BAD
ORG!" является фатальной и сразу же возвращает управление редактору.
В конце второго прохода на дисплее будет отображено сообщение, сле-
дуя за предыдущим об отсутствующих метках:
PASS 2 ERRORS:NN
Затем появится следующее сообщение:
TABLE USED: XXXXX FROM YYYYY
Это сообщение информирует о том, какая часть таблицы символов была
заполнена. В этом случае, если была правильно использована директива
"ENT", выдается сообщение:
EXECUTES: NNNNN IS DISPLAYED
Это показывает стартовый адрес задачи. Вы можете выполнить задачу,
используя команду редактора "R". Будьте осторожны при использовании ко-
манды "R" в том случае, когда вы не завершили успешно ассеблирование и не
увидели сообщения "EXESUTES:NNNNN".
Итак, если указан ключ "1", то используется список меток в алфавит-
ном порядке и будут напечатаны соответствующие им значения. Количество
информации, отражаемой в одной строке, может быть изменено директивой
"POKE" с адреса "начало GENS4 + 50" помещением в эту ячейку уместного
значения, по умолчанию заносится 2.
2.2. Формат оператора ассемблера.
=================================
Каждая строка текста, которая будет обрабатываться GENS4, должна
иметь следующий формат, где определение поля необязательно:
метка код команды операнды комментарий
START LD HL,LABEL ; получение метки
Пробелы и табуляция обычно игнорируется. Строка обрабатывается сле-
дующим образом:
Первый символ строки проверяют и последующие действия зависят от его
сущности:
; - целую строку трактуют как комментарий, т.е. просто игнорируют;
* - предполагается, что следующий символ (символы) образуют команду
ассемблера (см. Пункт 2.8). Все символы после команды тракту-
ются как комментарии;
- символ конца строки. Линия просто игнорируется;
_ - пробел или табуляция. Если первым символом строки является про-
бел или табуляция, то GENS4 предполагает, что следующий отличный
от пробела или табуляции символ будет началом кода команды Z80.
Если первый символ строки отличается от вышеприведенных, то в строке
должна быть метка - см.п.2.2.
После обработки присутствующей метки (или если первый символ в стро-
ке - пробел или табуляция) ассемблер исследует следующий значащий символ
и предполагает, что он будет или символом конца строки, или началом ко-
манды Z80 (см. Прил.2), состоящий из 4-х символов и ограниченный пробе-
лом (табуляцией или ).
Иногда присутствует код команды и требуется один или более операн-
дов, тогда поле операндов следует после набора пробелов (табуляции).
Оператор может состоять только из одной, это бывает полезно для
улучшения читаемости листинга.
Комментарии могут следовать в любом месте после поля операндов или
поля кода команды (если у нее нет аргументов).
2.3. Метки
==========
Метка - это символьное имя, представляющее 16 бит информации. Метка
может быть использована для выделения адреса особенной инструкции, или
для выделения области данных, или может быть использована как константа
для директивы "EQU"(см. п. 2. 7).
Если метку представить значением более 8 битов и она затем использу-
ется в контексте применительно к 8-битовой константе, то ассемблер будет
выдавать сообщение об ошибке:
LABEL EQ #1234
LD A,LABEL
будет выдано *ERROR*10, когда во время второго прохода обработка
второго операнда. Метка может содержать любое количество символов (см.
ниже), хотя только первые 6 символов - значащие. Эти первые 6 символов
должны быть уникальными, иначе метка будет повторно определена (*ERROR*).
Метка не должна образовывать зарезервированное слово, хотя зарезервиро-
ванное слово можно внедрить как часть метки.
В метках можно использовать символы 0...9,A...Z и $. Можно использо-
вать как большие, так и малые буквы, символы [,,],^ ,#,и _. Метка должна
начинаться с буквы. Некоторые примеры возможных меток представлены ниже:
LOOP
а_LONG_LABEL
L[1]
L[2]
а_
LDIR -это незарезервированная инструкция
TWO^S
2.4. Таблица символов
=====================
Когда метка встречается в первый раз, ее помещают в таблицу вместе с
двумя признаками, которые позже показывают, как эту метку соотносят по
алфавиту с другими, находящимися внутри таблицы. Если в первый раз метка
появляется в поле меток, то ее значение (данное счетчиком адресов или
значение выражения "EQU") заносят в таблицу символов. В другом случае
значения заносятся,когда бы ни встретилось имя метки в последующем в поле
метки.
Данный тип таблицы символов называется таблицей символов типа двоич-
ного дерева и ее структура дает возможность заносить имена и извлекать их
за очень короткое время - это существенно для больших программ.
Запись в таблице занимает от 8 до 13 бит, в зависимости от длины
имени.
Если за время первого прохода имя встречается более одного раза, то
будет выдано сообщение об ошибке (*ERROR *4), так как ассемблер не знает,
какое значение должно соответствовать имени метки.
Если значение для имени не найдено, то в конце ассемблирования будет
выдано сообщение:
*WARNING* SYMBOL ABSENT
Отсутствие определения имени не мешает продолжению ассемблирования.
Отметим, что только первые 6 символов метки вводятся в таблицу сим-
волов, что определяется ее размером. В конце ассемблирования вам могут
быть выданы сообщения статистики, о том, как много памяти было использо-
вано таблицей символов в течение трансляции - вы можете изменить макси-
мальный размер памяти, отведенный под таблицу символов.
2.5.Выражения
=============
Выражения - это запись операндов, образованная или простым термом
или комбинацией термов, разделенных операндом. Ниже определены понятия
терма и операнда:
Терм:
десятичная константа например: 1024
шестнадцатиричная константа например: #4А5
двоичная константа например: %100101
символьная константа например: "А"
метка например: L1029
Может также использоваться для обозначения текущего значения счетчи-
ка адресов.
Оператор:
+ - сложение
- - вычитание
& - логическое "и" (AND)
@ - логическое "или" (OR)
! - логическое "XOR"
* - алгебраическое умножение
/ - алгебраическое деление
? - MOD-функция (а?В=а-(а/в)*в
Замечание:
# - используют для того, чтобы отметить начало 16-ричного числа
% - используют для того, чтобы отметить начало двоичного числа
" - символьная константа
При считывании числа (десятичного, шестнадцатиричного или двоичного)
GENS4 выбирает последние значения 16 бит числа (т.е. MOD 65536), напри-
мер, 70016 станет 4480 и #5А2С4 становится #А2С4.
Обеспечивается широкий набор операндов, но их приоритет не соблюда-
ется: выражения вычисляются строго слева направо. Операторы *,/ и ? При-
ведены для версий с дополнительными возможностями и не являются частью
данного набора выражений, который мог бы увеличить размер GENS4. Если вы-
ражение заключено в круглые скобки, то его представляют как содержимое
адреса памяти. Так, в инструкции LD HL, (LOC+5) в регистровую пару HL
загружается 16-ти битовое значение, содержащееся в ячейке памяти с ад-
ресом LOC+5.
Некоторые инструкции Z80 (JR и DJNZ) предполагают операнды, которые
предполагают 8-ми битовые значения, а не 16-ти битовые - это называется
относительной адресацией. Когда имеет место относительная адресация,
GENS4 автоматически выдает значение счетчика адресов следующей инструкции
из значения, представленного в поле операндов текущей инструкции для то-
го, чтобы получить относительный адрес для текущей инструкции. Область
допустимых значений относительного адреса простирается от -128+значение
счетчика адресов следующей инструкции до значения счетчика адресов следу-
ющей инструкции +127.
Если же вы желаете определить относительный переход от значения
счетчика адресов текущей инструкции, то вы должны использовать символ $
(резервную инструкцию), за которым следует требуемое смещение. Относи-
тельно значения счетчика адресов текущей инструкции смещение должно нахо-
диться в диапазоне от -126 до +129 включительно.
Примеры выражений:
5000 - LABEL
%1001101!%1011 - дает 1000110
#3456?#1000 - дает 456
4+5*3-8 - дает 19
$-LABEL+8
2345/7-1 - дает 334
"Y"-";"+7
(5*LABEL-#1000&%1111)
17&%1000 - дает 25
Отметим, что пробелы могут быть помещены между термами и операторами
и наоборот, но не внутри термов.
Если операция умножения получит ответ с абсолютным значением, боль-
шим чем 32767, то появится ошибка *ERROR*15, тогда как при делении на 0 -
ошибка *ERROR*14, в противном случае переполнение игнорируется.
Вся арифметика использует вторую дополнительную форму, где любое
число, большее чем 32767, представляется как отрицательное, например:
60000=-5536 (60000-65536)
2.6.Макроопределения
====================
Макроопределения позволяют вам писать более плотные, более значимые
ассемблерные программы, но они должны использоваться осторожно и не долж-
ны конфликтовать с подпрограммами.
Макроопределение состоит из набора инструкций ассемблера вместе с
именем макроопределения. Когда это имя в последующем используются в поле
кода операции, то оно будет заменено на все инструкции ассемблера,
составляющее это макроопределение.
Так, макроопределение БNSUB может быть определено следующим образом:
NSUB MAC
OR а
SBC HL,DE
ADD HL,DE
ENDM
Когда бы мы в дальнейшем ни применили NSUB как код операции, оно бу-
дет генерировать три инструкции ассемблера: OR А; SBC HL,DE и ADD HL,DE.
Это спасет вас от лишнего печатания и сделает вашу программу легче
для понимания, но вы должны помнить, что при каждом появлении NSUB гене-
рируется объектный код, и, может быть, эффективнее использовать CALL для
вызова вместо нее подпрограммы. Ниже мы приводим формат макроопределения
и его вызов вместе с некоторыми примерами. Изучайте их, пожалуйста, вни-
мательно.
Макроопределение имеет следующую форму:
имя MAC
...
...
Тело макроопределения
...
...
ENDM
По имени макроопределения будет вызываться его текст когда это имя в
последующем встретится в поле кода операции. "MAC" показывает начало мак-
роопределения, а "ENDM" указывает на его конец.
Параметры макроопределения могут упоминаться внутри макроопределения
путем использования знака равенства, за которым следует номер параметра
(0...31) включительно. Таким образом, макроопределение:
MOVE MAC
LD HL,=0
LD DE,=1
LD BC,=2
LDIR
ENDM
имеет три параметра, адрес источника, адрес приемника и длину, загружает
нужные значения в HL, DE, и BC и затем выполняет инструкцию LDIR. Для то-
го чтобы вызвать макроопределение из тела вашей программы, просто исполь-
зуйте его имя в поле команд. За именем макроопределения должны следовать
необходимые вам три параметра:
MOVE 16384,16385,4096
В этом примере мы используем особенные адреса, но в действительности
вы можете работать с любыми существующими выражениями для определения
значения параметра макроопределения:
MOVE START,START+1,LENGTH
Подумайте, являются ли вышеприведенные примеры хорошим использовани-
ем макроопределения? Не могли ли вы использовать подпрограмму? Внутри
макроопределения параметры могут появляться в любом возможном выражении,
например:
HMC MAC
LD HL,=0*3600
LD DE,=1*60
ADD HL,DE
LD DE,=2
ADD HL,DE
ENDM
Это макроопределение имеет три параметра: часы, минуты, секунды.
Макроопределение вычисляет общее количество секунд, определяемое парамет-
рами, и помещает его в регистр HL. Вы можете использовать его следующим
образом:
HOURS EQU 2
MINUTES EQU 30
SECONDS EQU 12
START EQU 0
HMC HOURS,MINUTES,SECONDS
LD DE,START
ADD HL,DE ;HL - окончательное время
Макроопределения не могут быть вложенными, так что вы не сможете ни
определить макроопределение, ни вызвать макроопределение из макроопреде-
ления.
Во время ассемблирования, как только имя макроопределения встреча-
ется в поле команды, ассемблируется его текст. Обычно этот текст тела
макроопределения не попадает в ассемблерный листинг и печатается только
для макроопределения. Однако вы можете усилить листинг расширением макро-
определения, используя команду ассемблера *М+, А, используя *М-, запре-
тить распечатывать текст макроопределения.
Если вы вышли за пределы пространства, отведенного под буфер макро,
то будет выдано сообщение и прервется ассемблирование. Используйте коман-
ду редактора "С" для резервирования буфера больших размеров.
2.7. Директивы ассемблера
=========================
GENS4 распознает определенные псевдокоманды - так называемые дирек-
тивы ассемблера. Они не влияют на процессор Z80 при прогоне, т.е. Не де-
кодируются, а просто заставляют ассемблер выполнять определенные действия
во время трансляции. Эти действия определенным образом изменяют код, ге-
нерируемый GENS4.
Псевдокоманды ассемблера точно такие же, как и выполняемые инструк-
ции: они могут помещаться за меткой (необходимо для EQU) и за ними может
следовать комментарий. Возможны директивы:
ORG <выражение> - устанавливает счетчик адресов равным значению выра-
жения. Если ключи 2 и 16 оба не указаны и результат
ORG попадает в область GENS4, текстового файла или
таблицы символов, то появляется выражение "BAD ORG!"
и прекращается трансляция (см. п.2.0). Для более де-
тального ознакомления с TEM, как ключи 2 и 16 влияют
на использование ORG см. команду "А" в разделе 3 для
некоторых предосторожностей в использовании ORG,
когда автоматически сохраняется объектный код.
EQE <выражение> - этой директиве должна предшествовать метка. Значению
метки присваивается значение выражения. Выражение не
должно содержать имен, которым еще не присвоено зна-
чение. В противном случае ассемблер выдает вам сооб-
щение об ошибке - *ERROR*13.
DEFB <выражение>,
<выражение>...- каждое выражение должно оценивать 8 бит; байт, адрес
которого в настоящий момент содержится в счетчике
адресов, принимает значение выражения и счетчик ад-
ресов увеличивается на... Все вышеуказанное повторя-
ется для каждого выражения.
DEFW <выражение>,
<выражение>...- дополняет слово (2 байта), адрес которого указан
счетчиком адресов, значением выражения и увеличивает
счетчик адресов на 2. Младший байт помещается снача-
ла, за ним следует старший байт. Повторяется для
каждого выражения.
DEFS <выражение> - увеличивает счетчик адресов на значение выражения.
Эквивалент резервирования области памяти размером,
равным значению выражения.
DEFM "S" - определяет, что последовательность N байтов памяти
будет будет равна представлению строки "S" в коде
ASCII, где N - длина строки. Теоретически, длина
строки может быть от 1 до 255 включительно, но прак-
тически она ограничена длиной строки, которую можно
ввести редактором. Первый символ в поле операндов
(",как показано выше) является ограничителем и стро-
ка "S" определяется только символами, лежащими между
двумя ограничителями; символ конца строки также
действует как ограничитель строки.
ENT <выражение> - используется для определения адреса,на который осу-
ществляется переход по команде редактора "R".
2.8. Команды условной трансляции
===============================
Команды условной трансляции обеспечивают программисту возможность
включения или не включения определенных секций исходного текста в процесс
ассемблирования. Это возможно при использовании команд IF, ELSE, END.
IF <выражение> - эта команда оценивает выражение. Если результат ра-
вен нулю, то прекращается ассемблирование следующих
линий до тех пор, пока не встретится ELSE или END.
Если значение выражений отлично от нуля, то ассемб-
лирование происходит нормально.
ELSE - эта команда просто переключает ассемблирование. Если
перед появлением ELSE было ассемблирование, то в
последующем оно выключается и наоборот.
END - просто включает ассемблирование.
Отметим, что команды условной трансляции не могут быть вложенными,
на вложенность "IF" не сделано никаких проверок и любая попытка вложения
может привести к непредсказуемым результатам.