Теневой многотекстовый ассемблер "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. ║ ╚═════════════════════════════╝