Теневой многотекстовый ассемблер
"ALASM v3.9".
Описание функциональных возможностей.
------------------------------------------
Как хорошо на свете жить! Наконец-то
появился почти полноценный ассемблер, сво-
бодно работающий на всех видах компьюте-
ров. Как мир заждался его. Есть, конечно,
недостатки, но они присущи любому развива-
ющемуся организму. Очень надеюсь, что ав-
тор не забросит свой шедевр, а продолжит
его совершенствовать. Для статьи взято за
основу авторское (ALEM) описание, дополне-
но и прокомментировано мною (МАХ). Итак,
поехали!
0. ПРЕИМУЩЕСТВА ПРОГРАММЫ
ALASM коренным образом отличается от
всего, что на данный момент создано на
Спектруме. Его возможности, подчас, пре-
восходят самые навороченные программы дан-
ной категории. Тело программы составляет
единый файл, который загружается в удобную
тебе страницу, которую сам закажешь. Таким
образом можно полностью освободить 128`ю
память. Прикидываешь, какие возможности
это открывает? Для работы ассемблера необ-
ходимо три страницы, где размещаются таб-
лицы меток, удаленные или отмеченные стро-
ки (карман) и т.д. Но изначально, в расче-
те на 128`килобайтные машины, они объеди-
нены в одну. Разделить их, при необходи-
мости, можно в SETUP`е. Там же можно зака-
зать временные параметры опроса клавиату-
ры, загрузить другой шрифт, драйвер расши-
рения и т.д. Мало какие программы обладают
такими возможностями SETUP`а. Для набора
листингов отводится целая страница. Их ко-
личество зависит от объема памяти компью-
тера. Имеются команды для подключения дру-
гих листингов (INCLUDE) и кодовых файлов
(INCBIN). Программа использует основной
экран для вывода информации и буфер прин-
тера для резидента. Остальную память можно
использовать для создания своих программ.
Компиляция объектного кода возможна в лю-
бую доступную страницу при указании в ORG
adr,page. Полная интегрированность с от-
ладчиком STS v5.1 и выше. Переход в отлад-
чик и обратно осуществляется при помощи
резидентов, поэтому отпадает необходимость
использования бейсика. Для дисковых опера-
ций используется стандартная точка входа
15635, поэтому за сохранностью системных
нужно следить! Если ты делал NEW, тогда
необходимо открыть системные TR-DOS через
15616. Программа написана с расчетом на
версию TR-DOS 5.04Т, поэтому обладателям
предидущих версий для использования второ-
го дисковода необходимо его иннициализиро-
вать отдельно от программы. Автор мало
уделил внимания данной теме. Компиляция
производится в один проход благодаря ори-
гинальному алгоритму подсчета и закладки
адресов. Таким образом ALASM претендует на
роль самого быстрого ассемблера. Скорость
в данном случае следует считать с учетом
подключения дополнительных листингов (не
имеет значения в какую рабочую страницу) и
загрузки кодовых файлов. Учитывая то, что
данные файлы можно подключать один раз
(см. команду "+"), равных по скорости нет!
Для удобства перехода на ALASM с других
ассемблеров и переноса их листингов в его
формат существует специальный конвертор
текстов "UNICON2", который понимает
TASM2/3/4, MASM, ZXASM (частично). При
конвертации извращения типа PUSH HL,DE,ВС
не разделяются. Листинги формата ALASM
можно перегнать в текстовый файл формата
iBM (не путать с ZX-WORD!). Для дальнейшей
его перегонки желательно использовать
iS-DOS`овский конвертор "Из iBM в iS-DOS".
По крайней мере я не видел конвертора или
редактора, который без проблем принял бы
такой текстовый файл. В ALASM можно перег-
нать и обычный текстовый файл. Это удобно,
если ты хочешь перегнать листинги из тако-
го ассемблера, который "не понимает" прог-
рамма "UNICON2". Например, из "STORM"...
Еще немаловажным преимуществом является
руссификация рабочих листингов, т.е. можно
ставить ремарки, комментарии, а также на-
бирать тексты в DEFM на нормальном русском
языке в альтернативной кодировке. ALASM по
праву можно считать ассемблером двадцать
первого века. Лед тронулся и программисты
начали полноценно осваивать дополнительную
память компьютеров, а отсюда - дополни-
тельные возможности для пользователей. Ко-
роче, обо всем по порядку.
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
ALASM позволяет работать одновременно с
несколькими текстами, расположенными в
разных страницах памяти пользователя. Пе-
реход от редактирования одной страницы к
другой осуществляется вводом команды PAGE
[страница] из рабочей строки асемблера.
Количество текстов, которые может обраба-
тывать ALASM, зависит только от объема па-
мяти компьютера. Страницы в ассемблере ну-
меруются по маске максимального значения,
передаваемого в драйвер расширенной памя-
ти. При этом его младшие 3 бита соот-
ветствуют битам, передаваемым в порт
#7FFD. Честно говоря, я (МАХ) не знаю, как
это выглядит на других компьютерах, отлич-
ных от Pentagon`а, где расширение не по
порту #7FFD с использованием 6 и 7 бита,
поэтому мои комментарии на этот счет кас-
саются только моего стандарта. ALASM пони-
мает (при соответствующем драйвере)
Pentagon (до 512К), Scorpion/Кау (до
256К), АТМ (до 1024К), Profi (до 1024К).
Можно написать и устаовить свой драйвер,
исходя и имеющихся образцов.
2. ХОЛОДНЫЙ ЗАПУСК
При запуске ассемблера из TR-DOS экран
очищается и на нем появляется авторское
вступление, после чего проводится тест па-
мяти по всем восьми битам номера страницы
драйвера. Его результаты выводятся на эк-
ран в виде XXX кб mask XX. Числа указыва-
ют, сколько памяти доступно ассемблеру на
Вашем компьютере и какие биты номера стра-
ницы отвечают за доступ. По этим битам
маскируется операнд команды PAGE и других
команд, работающих со страницами. Ниже
теста памяти выводится HELP, содержащий
список команд ассемблера и его редактора.
Горячие клавиши этих команд вынесены в
заглавный режим. Ниже предлагается нажать
CS/0 (DELETE) для запуска SETUP, который
позволит вам изменить визуальные и конфи-
гуративные параметры работы ассемблера и,
при желании, записать их на диск. Все из-
менения, внесенные в SETUP, записываются
непосредственно в тело моноблока ассембле-
ра "alasm. С". Функция запуска SETUP дос-
тупна только при холодном запуске. После
соответствующего сообщения нажатие любой
клавиши приведет к очистке экрана и выходу
в рабочую строку ассемблера. ВНИМАНИЕ! Ра-
бочий стек программы соответствует позиции
RAMTOP, поэтому следите за значением ORG!
3. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
Среда ассемблера обладает собственной
системой команд, большинство которых сов-
местимы с командами TASM2. Список этих ко-
манд может быть получен на экране нажатием
клажиши "Н" (HELP). Ввести необходимую ко-
манду можно, нажав латинскую букву, входя-
щую в состав этой команды в виде заглав-
ной. При этом введенная команда отобража-
ется в рабочей строке, после чего, если
это необходимо, ждет ввода операндов или,
в зависимости от назначения, подтверждения
нажатием ENTER. После ввода команды она
дублируется в рабочем экране и выполняет-
ся. В случае некорректности операндов вы-
водится соответствующее сообщение. Выпол-
нение любой команды может быть прервано
нажатием BREAK. Если в результате выполне-
ния команды может быть потерян текст, то,
если он был изменен, выводится запрос на
его сохранение: Save cHange?(Y/N)
Команды среды ассемблера.
Help
Формат: HELP
Вывод на экран списка команд, доступных
в ассемблере и редакторе. Команда HELP не
содержит операндов и не нуждается в
подтверждении нажатием ENTER.
Quit
Формат: QUIT [адрес][,страница]
Выход из ассемблера. В случае, если па-
раметры не заданы, происходит выход через
дно стека, в противном случае осуществля-
ется безусловный переход по указанному ад-
ресу. Параметр "страница" передается в
драйвер верхней памяти (по умолчанию зада-
ется 0). В качестве параметров "адрес" и
"страница" могут быть использованы метки
или содержащие их арифметические выраже-
ния.
Debug
Формат: DEBUG
Выход в отладчик STS. При отсутствии в
странице STS`а (ее номер заказывается в
SETUP`е) выдается соответствующее сообще-
ние. Если перед вводом этой команды был
откомпилирован текст, то в указатель адре-
са отладки монитора будет записан адрес
последнего ORG. При этом, набрав в отлад-
чике SS/5, Вы получите возможность отлажи-
вать свою программу, наблюдая на экране
имена меток по их адресам. Пользоваться
командой допустимо, если загружен STS v5.1
и выше. Иначе используйте команду QUIT
адрес,страница!
Run
Формат: RUN [адрес][,страница]
Выполняет те же действия, что и команда
QUIT, но перед этим заносит в стек адрес
возврата в резидентный модуль ассемблера,
что позволяет вернуться в ассемблер из за-
пускаемой программы по команде RET. По
умолчанию параметр "адрес" принимает зна-
чение последней директивы ORG, а параметр
"страница" - 0.
Work
Формат: WORK [drive:][filename[.ext]]
Загрузка файла в текущую рабочую стра-
ницу. По умолчанию задается расширение
"Н". "filename" может представлять собой
маску. В этом случае будет загружен первый
файл, который ей удовлетворяет. В случае,
если параметр "filename" не введен, то
пользователю предоставляется возможность
выбрать файл из каталога текущего или ука-
занного диска путем выбора его курсором из
списка файлов, появляющегося в верхнй час-
ти экрана. Если файлов на диске много, то
последние не выводятся. В таком случае не-
обходимо указать конкретное имя файла для
работы.
Catalogue
Формат: CATALOGUE [drive:][mask]
По умолчанию задается "*. *" (все фай-
лы). Выводит на экран каталог диска. Фор-
мат маски определяется следующим образом:
знак "? " определяет, что в данной позиции
может находиться любой символ. Знак "*"
определяет, что, начиная с данной позиции,
все символы могут принимать произвольные
значения. При достижении ограничителя
(символ "." или конец строки) предполага-
ется, что остальная часть строки заполнена
символами "ПРОБЕЛ".
nUmbers
Формат: NUMBERS [параметр]
Смена системы счисления отображаемой
числовой информации. "Параметр" представ-
ляет собой одно из двух выражений: "DEC"
или "НЕХ".
Name
Формат: NAME neWfilename[.ext]
Сменить имя файла на новое. По умолча-
нию задается расширение "Н". Длина имени
стандартная, т.е. восемь букв. Введенное
имя дублируется в специальном дискрипторе
файла, входящего в его состав, поэтому пе-
реименования следует делать исключительно
в ALASM`е.
Print
Формат: PRINT [bytes list]
Выводит в порт ZX-LPRINT текущий текст,
предварительно выводя указанный список
байт. Байты указываются через запятую.
Например, если надо инициализировать прин-
тер или переключить шрифт (СМ-6337), тогда
набирается командная цепочка. Автору лень
было поработать над этой опцией полноцен-
но, поэтому текст печатает без остановки,
как на рулон. Приходится на принтере ис-
пользовать датчик конца бумаги.
Edit
Формат: EDIT [дисковод:][имя файла]
Переход к редактированию файла в теку-
щей странице. В случае, если задан пара-
метр "имя файла", файл с таким именем заг-
ружается в текущую страницу. Если же файл
на диске не найден, в текущей странице
создается новый файл с введенным именем.
Таким же способом можно стереть файл в
странице. Это так называемый "программный"
способ. Иначе никак. Можно, правда, войти
в STS и, включив нужную банку памяти, за-
бить чем-нибудь первые 16 байт. Но STS ра-
ботает исключительно с Pentagon-128/512...
Merge
Формат: MERGE [дисковод:]имя файла
Подгрузка текстового файла формата
ALASM в конец текущего файла. Ввод имени
файла является обязательным. Честно гово-
ря, так ниразу и не пытался "задурить" го-
лову программе, поэтому не знаю, как она
себя поведет, если к длинному имеющемуся
тексту попробовать прилепить тоже нема-
ленький...
counT
Формат: COUNT арифметическое выражение
Производит вычисление указанного ариф-
метического выражения. Результат вычисле-
ний выводится в десятичной и шестнадцати-
ричной системах. В качестве параметров
арифметического выражения могут использо-
ваться метки, их старшие и младшие байты.
Как жаль, что программа не понимает двоич-
ной системы.
sYmbol
Формат: SYMBOL [маска]
Вывод на экран списка меток, удовлетво-
ряющих условию "маска". Команда выполняет-
ся только в случае, если до этого была
произведена компиляция. В качестве атрибу-
та метки могут выводиться следующие сооб-
щения:
число - Значение метки, определенное при
компиляции;
NoDef - Метка не была определена, но была
использована;
Macro - Метка представляет собой имя блока
макроопределения;
Wrong - Формат метки не определен вслед-
ствие ошибок компиляции.
Assemble
Формат: ASSEMBLE
Производит компиляцию текста в текущей
странице, начиная с первой строки. В про-
цессе компиляции на экран выводится коли-
чество откомпилированных строк для контро-
ля зависания машины. По окончании компиля-
ции на экран выводятся сообщения:
Symbols: AAAAA-ВВВВВ
Указанная разность представляет собой
количество свободной памяти в странице,
отведенной под таблицу меток. В случае,
если таблица меток разведена по различным
страницам, параметр AAAAA указывает адрес
последней записи в POST SYMBOLS PAGE, а
параметр ВВВВВ в SYMBOL LIST PAGE. Если в
листиге нет ORG или стоит после каких-то
команд, будет скроллироваться весь "оши-
бочный" текст.
Save
Формат: SAVE [+][дисковод:]
Запись на диск отредактированного
текста. При указании параметра "+" на те-
кущий или указанный дисковод записываются
все файлы, у которых установлен маркер из-
менения. В противном случае на диск запи-
сывается текущий файл. В случае, если файл
с таким именем на диске уже существует, он
сразу же удаляется без дополнительных зап-
росов, а затем идет запись файла.
Info
Формат: INFO
Выдает на экран номер версии, список
номеров системных страниц памяти и пере-
числение файлов, находящихся во всей памя-
ти компьютера на момент подачи команды.
paGe
Формат: PAGE [номер страницы]
Переход к странице, указанной в ка-
честве параметра "страница". До следующего
изменения параметра команды PAGE указанная
страница становится текущей и все команды
для текущих страниц будут выполняться над
ней.
driVe
Формат: DRIVE дисковод:
Указанный дисковод становится текущим и
все команды для текущего дисковода будут
оперировать с ним.
Jumb
Формат: JUMB [+]
Эта команда заменяет в текущем файле
все указатели однократной компиляции с "-"
на "+". Если задан параметр, то будет
просмотрена вся память.
SS/ENTER
Активизация мануального селектора фай-
лов, находящихся в данный момент в памяти.
4. КОМАНДЫ РЕДАКТОРА
При входе в окно редактирования экран
разбивается на две части: окно редактиро-
вания и информационная строка, в которой
отображается номер страницы текущего фай-
ла, его имя, количество свободной памяти в
этой странице и количество байт, перене-
сенных в карман (если это число не равно
0). В этой же строке обеспечивается подача
сервисных команд обслуживания текста. В
процессе редактирования пользователю дос-
тупны сервисные команды обслуживания
текста, однако в отличии от среды ас-
семблера, результат их выполнения не отоб-
ражается на экране в виде текстового сооб-
щения, а контролируется самим пользовате-
лем.
Список команд редактора асемблера ALASM.
(активируются после нажатия EXTEND)
Quit
Формат: Q
Выход из редактора в среду асемблера.
Begin
Формат: В
Переход к началу текста.
End
Формат: Е
Переход к концу текста.
SearcH
Формат: SEARCH [строка символов]
Поиск строки символов по тексту. Поиск
начинается с позиции, следующей за текущей
позицией курсора и продолжается до конца
текста. При остановке поиска он может быть
продолжен путем ввода комбинации SS/I,
причем если такая команда дана за концом
последней строки текста, поиск будет начат
с его начала. Если параметр "строка симво-
лов" не указан, то будет использована
строка, введенная в предидущий раз. Ввод
строки возможен только на нерусском.
sYmbol
Формат: SYMBOL [имя метки]
Поиск описания метки по тексту. При по-
иске предполагается, что первый символ
имени метки находится в нулевой позиции.
Свойства - аналогично SEARCH.
coDe
Формат: CODE XXX>[код символа]
Установка в позицию курсора символа с
произвольным кодом, набираемым на клавиа-
туре. При вводе команды появляется код
символа, находящегося в текущей позиции
курсора и предлагается заменить его на
другой. Если параметр игнорировать, ника-
ких действий произведено не будет. Удобно
для ввода прописных русских букв и некото-
рых символов.
Restore
Формат: R
Копирование содержимого кармана в пози-
цию курсора. Строка, на которой находится
курсор, оказывается первой после содержи-
мого кармана. После этой операции сбрасы-
вается флаг разрешения дополнения кармана,
т.е. последующее дополнение "забьет" пре-
дидущее. Командой можно тиражировать и пе-
реносить фрагменты текста неограниченное
количество раз.
Clear
Формат: С
Очистка кармана.
Xreplace
Формат: REPLACE строка1строка2
Начиная с позиции, следующей за текущей
позицией курсора, производится поиск
текста "строка1". Как только он будет об-
наружен, выдается сообщение
"REPLACE(Y/N/G)? ". При ответе "Y" текущая
"строка1" заменяется на "строка2" и поиск
продолжается дальше. При ответе "N" поиск
продолжается без замены. При ответе "G"
все встреченные выражения "строка1" будут
заменены на "строка2" без дополнительных
запросов. В любой момент работы команды ее
выполнение может быть прервано нажатием
BREAK (CS/SPACE).
Line
Формат: LINE номер строки
Устанавливает курсор на строку с ука-
занным номером. Строки нумеруются с нуле-
вой и до конца текста с приращением 1 на
каждой строке. Но не так быстро! Автору
лень было вывести текущий номер строки,
где находится курсор в данный момент, поэ-
тому применение команды равноценно блужда-
нию в потемках.
Jumb
Формат: JUMB [+]
Без параметра производит сканирование
текста в текущей странице с целью замены
директив "-" на "+" (эта операция автома-
тически производится при загрузке каждого
файла с диска). С параметром [+] произво-
дится сканирование всех текстов, найденных
в памяти.
При редактировании текста пользовате-
лю доступны функции, вызываемые одновре-
менным нажатием двух клавиш. Эти функции
ускоряют работу в редакторе и не имеют
операндов. Нижеприведенные комбинации из
двух пальцев для удобства и привычки соот-
ветствуют аналогичным в TASM:
SS/I - продолжение поиска;
SS/D - переключение русского и латинс-
кого регистров ввода информации.
Изменение регистра индицируется
видоизменением курсора;
SS/Q - удаление текущей строки. При вы-
полнении этой команды удаляемая
строка автоматически переносится
в карман,но только в том случае,
если он не был занят другой ин-
формацией;
SS/W - вставка пустой строки. Текущая
строка сдвигается вниз;
SS/Е - копирование текущей строки в
карман. После этой команды кур-
сор перемещается на следующую
строку;
CS/1 - табуляция;
CS/2 - вставка пробела в позицию кур-
сора. Остальная часть строки
сдвигается вправо;
SS/EN - на экран выводится список фай-
лов, в котором курсором выбира-
ется другой текстовой файл.
5. ДИРЕКТИВЫ АССЕМБЛЕРА
При написании компилятора Автор придер-
живался набора директив, принятых в
TASM3.0. Директивы, не присутствующие в
вышеуказанном творении, выбраны в соот-
ветствии с международной практикой написа-
ния компиляторов языка ассанблера, т.е. с
помощью фонаря и англо-русского словаря.
Список директив компилятора ALASM и их
описание:
1.
ORG адрес[,страница]
Установка адреса компиляции. По умолча-
нию параметр "страница" задается равным 0.
В качестве информации о текущем адресе
компиляции может использоваться символ
"$", эквивалентный обращению к зарезерви-
вованной переменной, содержащей адрес пер-
вого байта команды, в которой произошло
обращение. Пример:
ORG #7D19
LDIR
;LDIR записан по адресу #7D19
ORG #С069,#84
INDR
;INDR записан по адресу #С069 в странице
; #84 верхней памяти
2.
метка EQU значение
Присваивает метке значение, эквива-
лентное параметру "значение". Пример:
SCREEN EQU #4000 ;SCREEN=#4000
ATTRS EQU #5В00 ;ATTRS=#5В00
SCR_LEN EQU ATTRS-SCREEN ;SCR_LEN=#1В00
3.
EQU .NUM
EQU `NUM
Опреации выделения старшего и младшего
байтов слова:
NUMB1 EQU #1234
NUMB2 EQU #ABCD
STBMLB EQU .NUMB1*256+`NUMB2;STBMLB=#34AB
MLBSTB EQU `NUMB1*256+.NUMB2;MLBSTB=#12CD
Старайтесь избегать деления на 256 для
получения старшего байта необходимого сло-
ва, так как деление занимает в 280 раз
больше ремени, чем просто операция выделе-
ния старшего байта.
DEFB `NUMB2
Абсолютно эквивалентно, но намного быст-
рее, чем
DEFB NUMB2/256
При задании байтового значения метки
младший байт выделяется автоматически
DEFB .NUMB1
эквивалентно
DEFB NUMB1
поэтому используется в основном для
DEFW .NUMB1
4.
DISP адрес
Установка адреса, в котором должна ра-
ботать программа.
ENT
Присвоение адресу работы программы те-
кущего адреса компиляции. Пример:
SCREEN EQU #4000
ORG #8000
LD HL,BEGIN ;Пересылка в экран
LD DE,SCREEN ;и запуск программы
LD ВС,END-BEGIN;ожидания прерыван.
LDIR
CALL SCREEN
DI
HALT
BEGIN DISP SCREEN
MARKA DEC A
HALT
JP NZ,MARKA ;JP - не случайно
RET
ENT
END
5.
INCLUDE "дисковод:имя файла"[,страница]
Включение в компилируемый файл дополни-
тельного текстового блока, записанного на
диске под именем "имя файла". При этом
указанный файл загружается в страницу, оп-
ределенную параметром "страница" (по умол-
чанию - текущая). По окончании компиляции
включенного блока компиляция продолжается
со строки, следующей после данной директи-
вы. Особенностью данной директивы является
то, что файл, указанный в ней, не будет
загружаться с диска, если он уже находится
в необходимой странице. Пример:
LDIR
INCLUDE "TOKENIZE",1
OTDR
INCLUDE "ALASM2"
HALT
Сначала будет откомпилирован LDIR, по-
том текст "TOKENIZE. Н", загруженный в
страницу 1, потом OTDR, затем в текущую
страницу будет загружен и откомпилирован
текст "ALASM2. Н", после чего с диска бу-
дет считан основной файл и компиляция про-
должится с команды HALT.
6.
MAIN "имя файла"[,страница]
Указание основного файла компиляции.
Директива MAIN должна быть первой исполни-
мой директивой подчиненного файла. Будьте
внимательны с именами файлов, содержащими
символы "." или "*". Лучше заменить их на
символ "?". Пример:
MAIN "MAKE6?7",6
LDIR
После подачи команды ASSEMBLE компиля-
ция передается программе MAKE6*7, находя-
щейся в странице 6, затем находящийся в
ней INCLUDE вызывает подчиненную програм-
му, состоящую из директивы MAIN и команды
LDIR. Во включаемых файлах MAIN игнориру-
ется, поэтому после ассемблирования LDIR
происходит возврат в основную програму и
продолжение компиляции.
7.
INCBIN "дисковод:имя файла"[,длина]
Включение в компилируемую программу ко-
дового блока, записанного на диске под
именем "имя файла" размером "длина" байт
или по умолчанию из данных каталога. При-
мер:
ORG #Е000
LD HL,SCRFILE
LD DE,#4000
LD ВС,6144
LDIR
RET
SCRFILE INCBIN "SCR6?7",6144
По адресу SCRFILE в процессе компиляции
будет загружен файл SCR6*7, который после
запуска будет перенесен в экран.
8.
DUP число
Левая программная скобка. Указывает на
начало блока, который необходимо компили-
ровать "число" раз подряд.
EDUP
Правая программная скобка. Указывает на
конец повторяемого блока. Пример:
DUP 32
LDI
LD A,В
OR С
JR Z,$+3;$ ;адрес первого байта
LD (HL),D ;компилируемой команды
EDUP
Блок текста между DUP и EDUP будет от-
компилирован 32 раза.
9.
DEFM "строка симв."[,"строка символов"]
Резервирование строки символов. Пример:
DEFM "Здесь была строка символов"," ВАСЯ"
Исходя из особенностей редактора коман-
ды, подобные этой, а также в кое-что еще
можно вводить с первой позиции (колонки)
на экране. Удобно при больших чередованиях
выражений и операндов. Для тех, кто дизас-
семблирует коды в листинги программой STS
версии 5.1 и выше, под DEFB необходимо
ставить размер "6" для 42`символьной вер-
сии ALASM`а и от "8" - для 64`символьной.
10.
DEFB байт[,список байт]
Резервирование списка байт. Пример:
DEFB "У",13,10,"попа",13,10,"была"
DEFB 13,10,"собака",13,10
11.
DEFW слово[,список слов]
Резервирование списка слов. Пример:
DEFW ALASKA,BUFFER,12,#BD15
DEFW 32767,.NUMB1
12.
DEFS количество повторений[,список байт]
Список байт (по умолчанию - 0) копиру-
ется в текущий адрес компиляции. Число
циклов равно параметру "количество повто-
рений". Пример:
LD SP,#5В00
DEFS 8,#С5,#D5,#Е5,#F5
;эквивалентно
DUP 8
PUSH ВС
PUSH DE
PUSH HL
PUSH AF
EDUP
13.
+ <директива ассемблера>
При загрузке текста с диска он сканиру-
ется на наличие в нем указателей "+" в на-
чале каждой строки. В процессе компиляции
все встреченные указатели "+" будут заме-
нены на "-", что укажет компилятору на от-
сутствие необходимости компиляции строки
при следующем ассемблировании. Пример:
LD HL,#DB00
+SAVEADR
+ ORG #DB00,7
+ INCBIN "stsЧ.2а"
+ORG SAVEADR
JP (HL)
Основной файл отладчика будет загружен
только при первой компиляции текста, со-
держащего эти команды.
14.
метка=выражение
Переприсвоение значения уже существую-
щей метки. Пример:
SHLUSS EQU 0
ORG 32768
DUP #4000
DEFW SHLUSS
SHLUSS=SHLUSS+1
EDUP
вся память выше #8000 будет заполнена
увеличивающимися словами от 0 до 16384
6. СООБЩЕНИЯ ОБ ОШИБКАХ
При компиляции исходного текста возмож-
на выдача ошибок времени компиляции, свя-
занных с невнимательностью программиста.
Список ошибок времени компиляции ассембле-
ра ALASM:
0 - синтаксическая ошибка;
1 - зарезерворована;
2 - зарезервирована;
3 - короткий переход некорректен;
4 - зарезервирована;
5 - зарезервирована;
6 - повторное описание метки;
7 - зарезервирована;
8 - зарезервирована;
9 - зарезервирована;
10 - компиляция в ПЗУ;
11 - недопустимая операция;
12 - неправильная MACRO-операция;
13 - не используется;
14 - ошибка системного стека;
15 - ошибка диска;
Ошибки времени заполнения:
Wrong sHort - неправильное обращение к
метке за пределами "корот-
кого" поля;
пот defined - метка не определена.
7. ОПЦИИ МЕНЮ SETUP
При "холодном" запуске ALASM пользова-
телю предлагается запустить SETUP нажатием
CS/0. Выход в SETUP позволит настроить ас-
семблер на те параметры, которые необходи-
мы при текущем сеансе работы или в гло-
бальном масштабе. Выбор необходимой опции
производится клавишами перемещения курсо-
ра, а активизация выбранной опции - нажа-
тием клавиши ENTER. Ниже приводится список
опций меню SETUP и подробное описание каж-
дой из них.
+----------+
|Save SETUP|
+----------+
Запись на диск всех параметров, изме-
ненных в SETUP за время последнего сеанса
работы. Запись всех параметров производит-
ся непосредственно в тело моноблока ALASM,
поэтому отсутствует необходимость созда-
вать и загружать отдельный файл SETUP при
начальной загрузке. У дублей ассемблера
каждого размера шрифта есть свое индивиду-
альное имя, по которому и опознается мо-
ноблок. Не рекомендуется его изменять, так
как это может привести к фатальному несо-
ответствию.
+-------------+
|Restart ALASM|
+-------------+
Выход из меню SETUP можно осуществить
нажатием BREAK, однако при изменении гло-
бальных системных параметров необходимо
осуществить перезапуск начальных установок
и теста памяти. Несоблюдение этого правила
не приведет к фатальным ошибкам, так как
неудобства связаны в основном с визуальны-
ми несоответствиями.
+---------------+
|Load FONT codes|
+---------------+
Загрузка с диска файла шрифта. В зави-
симости от характера набираемой программы
программисту может быть необходимо ис-
пользование альтернативного набора симво-
лов, который в этом случае может быть заг-
ружен с диска. При выборе этой опции в
верхней части экрана появляется список
имеющихся файлов для данного размера шриф-
та и мобильный курсор для выбора необходи-
мого файла. Файлы шрифта опознаются по
длине и адресу начальной загрузки.
+-----------+
|KBD forming| - пауза между двумя опросами
|KBD Holder | - защита от дребезга
|KBD Wait | - пауза перед автоповтором
+-----------+
Установка констант, определяющих пара-
метры опроса клавиатуры. Величина констан-
ты паузы между двумя опросами подбирается
первой в зависимости от типа контроллера
клавиатуры или его отсутствия. Чем выше ее
значение, тем выше стабильность работы, но
при этом возрастают задержки.
+-------+
|Russian|
+-------+
Смена кодировки клавиатуры с нацио-
нальной на звуковую или наоборот. Нацио-
нальная кодировка (сокращенно - "ЙЦУК")
удобна для клавиатур, на которые она нане-
сена по тем или иным причинам. Звуковая
кодировка ("ЯВЕР") используется на компью-
терах без соответствующих подсказок, а во-
обще это - дело привычки.
+-----------+
|Border |
|Screen ATTR|
+-----------+
Установка цветов рамки и экрана. Цвета,
соответствующие цифрам, можно найти в лю-
бой уважающей себя книге, посвященной Ва-
шему компьютеру. Для дальтоников большого
значения не имеют.
+-------+
|Numbers|
+-------+
Смена системы счисления отображаемой на
экране числовой информации (шестнадцати-
ричная/десятичная).
+----------+
|Start page|
+----------+
Задание номера страницы, которая будет
становиться текущей при запуске ALASM. При
изменении ее с шестой (так изначально) на
192 (мне так удобно на 512К) команда EDIT
прерывается ошибочным сообщением. Это не-
доработка программы. В этом случае для
входа в редактор следует сначала дать ко-
манду "PAGE" без параметров, тем самым
открыв "новую" страницу, а затем уже идти
в редакцию.
+-----------+
|System page|
+-----------+
Один из основных системных параметров,
указывающий, в какой странице должен нахо-
диться ALASM вне сеанса работы с ним.
+-----------+
|Symbol list|
+-----------+
Номер страницы, в которой будет разме-
щен список меток, полученный при компиля-
ции текста. Этот список может быть ис-
пользован после компиляции для получения
информации о метках пользователем или при
отладке для улучшения восприятия дизас-
семблированного участка памяти при работе
в STS.
+------------+
|Post symbols|
+------------+
Номер страницы, в которой будет разме-
щен список почтовых меток компиляции. Пос-
ле того, как компиляция завершится, этот
список не представляет из себя для пользо-
вателя никакой информационной ценности.
+-----------+
|Pocket page|
+-----------+
Страница, в которой размещается тексто-
вая информация, запоминаемая во время ре-
дактирования текста. Если параметр "Pocket
page" равен "Post symbols", то при каждой
компиляции содержимое кармана будет разру-
шаться. В противном случае карман будет
сохрамяться на протяжении всего сеанса ра-
боты.
+-----------+
|Debugger ат|
+-----------+
В этой опции необходимо указывать номер
страницы, в которой Вы продполагаете раз-
мещать основной файл отладчика. При этом
все команды, так или иначе свазанные с
ним, предварительно тестируют именно эту
страницу на наличие или отсутствие необхо-
димой опознавательной последовательности.
Если ALASM не найдет там меток STS`а, то в
него, в отличие от подобных программ сего
жанра, никогда не попадешь и ничего не за-
виснет.
+------------+
|HImem driver|
+------------+
При выборе этой опции Вам предлагается
считать с диска один из предложенных драй-
веров верхней памяти. Эти драйвера отлича-
ются только для компьютеров с объемом па-
мяти более 128 килобайт адресацией старше-
го байта порта записи #FD и битами, отве-
чающими за получение доступа к дополни-
тельной памяти. Файл драйвера опознается
по длине и адресу начальной загрузки. При
инсталляции ALASMa необходимо подобрать
тот драйвер памяти, который соответствует
возможностям Вашего компьютера. О специа-
лизации того или иного драйвера недвусмыс-
ленно указывает его индивидуальное имя,
которое можно прочитать в каталоге диска.
Формат драйвера можно понять из прилагае-
мых исходных файлов и на их основе напи-
сать свое извращение, если таковое имеет-
ся.
8. В СЛЕДУЮЩИХ ВЕРСИЯХ
Существующая версия ALASMa не является
последней, так как пути усовершенствования
неисчислимы. Автор сделает все возможное,
чтобы сделать ассемблер еще более удобным
для пользователя. Список доработок, кото-
рые следует ожидать в будущих версиях в
первую очередь:
- увеличение скорости компиляции на 30%;
- универсальный дарйвер принтера;
- директивы условной компиляции;
- макрооперации и макроопределения;
- вывод меток не только по имени, но и по
значению;
- RAMDISK для файлов, подгружаемых с по-
мощью INCBIN;
- устранение недостатков, связанных с
однопроходностью;
- увеличение памяти меток до 64 Кбайт
(4 страницы);
- возможность просмотра неиспользованных
меток;
- запись на диск откомпилированного
объектного кода;
- директивы повтора по списку параметров;
- индикация номера строки в процессе
редактирования текста.
9.ЗАКЛЮЧЕНИЕ
Напоследок скажу, что пользуясь этим
ассемблером, я забыл много проблем, свя-
занных при работе в другими редакторами.
Программа выпускается в трех видах -
42`символьная по восемь точек высота сим-
вола, 42`символьная по шесть точек и спе-
циально для любителей мелкоты и желающих
попортить себе зрение - 64`символьная вер-
сии. Структура текста ALASM`а жестко ток-
кенизирована, что позволяет иметь листинг
большой программы на одной странице и при
этом не скупиться на ремарки и коммента-
рии. Для желающих поделиться впечатлениями
и пожеланиями, а также по вопросам приоб-
ретения новых версий программы, автор ос-
тавил свои координаты:
╔═════════════════════════════╗
║ 310177 Украина ║
║ г. Харьков,177 ║
║ проспект Славы ║
║ дом 7 квартира 17 ║
║ Мищенко Алексей Анатольевич ║
║ Телефон: (0572) 70-37-49. ║
╚═════════════════════════════╝
Other articles: