ZX User #02
05 декабря 1996
  Софт  

Система - описание макро ассемблера-отладчика ALASM128/512 v2.8.

<b>Система</b> - описание макро ассемблера-отладчика ALASM128/512 v2.8.
                           ┌───────┐
                           │СИСТЕМА│
                           └───────┘


     Теневой макро ассемблер-отладчик ALASM128/512 v2.8
        Краткое описание функциональных возможностей.

                      Оглавление:
    1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
    2. ХОЛОДНЫЙ ЗАПУСК
    3. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
    4. КОМАНДЫ РЕДАКТОРА
    5. ДИРЕКТИВЫ АССЕМБЛЕРА
    6. ОШИБКИ КОМПИЛЯТОРА
    7. В СЛЕДУЮЩИХ ВЕРСИЯХ

════════════════════════════════════════════════════════════════

    1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
   ALASM позволяет работать одновременно с несколькими текстами,
расположенными в разных страницах памяти пользователя. Переход
от редактирования одной страницы к другой осуществляется вводом
команды
PAGE [страница]
из рабочей строки асемблера. Количество текстов, которые может
обрабатывать ALASM, зависит только от объема памяти компьютера.
    Страницы в ассемблере нумеруются по маске максимального зна-
чения, выводимого в порт #7FFD для переключения страницы.

────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────

    2. ХОЛОДНЫЙ ЗАПУСК
   При запуске ассемблера из TR-DOS экран очищается и на нем по-
является авторское вступление, после чего проводится тест памяти
по двум старшим и трем младшим битам порта #7FFD. Его результаты
выводятся на экран в виде   XXX кб   mask XX. Числа указывают,
сколько памяти доступно ассемблеру на Вашем компьютере и какие
биты порта записи #7FFD отвечают за доступ. По этим битам мас-
кируется операнд команды PAGE.
   Ниже теста памяти выводится HELP, содержащий список команд
ассемблера и его редактора. Горячие клавиши этих команд вынесены
в заглавный режим. Ниже предлагается нажать CS/0 для запуска
SETUP или получения дополнительной информации. Меню SETUP позво-
лит вам изменить визуальные и конфигуративные параметры работы
ассебблера и, при желании, записать их на диск. Все изменения,
внесенные в SETUP, записываются непосредственно в тело моноблока
ассемблера "alasm.C". Функции запуска SETUP или получения допол-
нительной информации доступны только при холодном запуске.
   После соответствующего сообщения нажатие любой клавиши приве-
дет к очистке экрана и выходу в рабочую строку ассемблера.

────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────

    3. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
   Среда ассемблера обладает собственной системой команд, боль-
шинство которых совместимы с командами TASM2.0.
    Список этих команд может быть получен на экране нажатием
клажиши "H" (HELP). Ввести необходимую команду можно, нажав ла-
тинскую букву, входящую в состав этой команды в виде заглавной.
При этом введенная команда отображается в рабочей строке, после
чего, если это необходимо, ждет ввода операндов или, в зависи-
мости от назначения, подтверждения нажатием ENTER.
   После ввода команды она дублируется в рабочем экране и выпол-
няется. В случае некорректности операндов выводится соответству-
ющее сообщение.
   Выполнение любой команды может быть прервано нажатием BREAK.
   Если в результате выполнения команды может быть потерян
текст, то, если он был изменен, выводится запрос на его сохране-
ние:        File has been changed. Save(Y/N)?
   В систему команд среды ассемблера входят:

Help
Формат: HELP
Вывод на экран списка команд, доступных в ассемблере и редакторе.
Команда HELP не содержит операндов и не нуждается в подтвержде-
нии нажатием ENTER.

Quit
Формат: QUIT [адрес][,страница]
Выход из ассемблера. В случае, если параметры не заданы, проис-
ходит выход через дно стека, в противном случае осуществляется
безусловный переход по указанному адресу. Параметр "страница"
выводится в порт #7FFD с установкой бита 4 (по умолчанию задает-
ся 0). В качестве параметров "адрес" и "страница" могут быть ис-
пользованы метки или содержащие их арифметические выражения.

Debug
Формат: DEBUG
Выход в отладчик STS. При отсутствии в странице 7 монитора
выдается соответствующее сообщение. Если перед вводом этой ко-
манды был откомпилирован текст, то в указатель адреса отладки
монитора будет записан адрес последнего ORG. При этом, набрав
в отладчике SS/5, Вы получите возможность отлаживать свою про-
грамму, наблюдая на экране имена меток по их адресам.

Run
Формат: RUN [адрес][,страница]
Выполняет те же действия, что и команда QUIT, но перед этим за-
носит в стек адрес возврата в резидентный модуль ассемблера,
что позволяет вернуться в ассемблер из запускаемой программы
по команде RET. По умолчанию параметр "адрес" принимает значение
последней директивы ORG, а параметр "страница" - 0.

Work
Формат: WORK [filename[.ext]]
Загрузка файла в текущую рабочую страницу.
По умолчанию задается расширение "H".
"filename" может представлять собой маску. В этом случае будет
загружен первый файл, который ей удовлетворяет.
В случае, если параметр "filename" не введен, то пользователю
предоставляется возможность выбрать файл из каталога текущего
диска путем выбора его курсором из списка файлов, появляющегося
в верхнй части экрана.

Catalogue
Формат: CATALOGUE [mask]
По умолчанию задается "*.*" (все файлы).
Выводит на экран каталог диска.
Формат маски определяется следующим образом:
знак "?" определяет, что в данной позиции может находиться
любой символ. Знак "*" определяет, что, начиная с данной позиции,
все символы могут принимать произвольные значения. При достижении
ограничителя (символ "." или конец строки) предполагается, что
остальная часть строки заполнена символами "ПРОБЕЛ".

nUmbers
Формат: NUMBERS [параметр]
Смена системы счисления отображаемой числовой информации. "Пара-
метр" представляет собой одно из двух выражений: "DEC" или "HEX".
     
Name
Формат: NAME newfilename[.ext]
Сменить имя файла на новое.
По умолчанию задается расширение "H".
"newfilename" - новое имя файла.

Print
Формат: PRINT [bytes list]
Выводит в порт ZX-LPRINT текущий текст, предварительно выводя
указанный список байт. Байты указываются через запятую.

Edit
Формат: EDIT [имя файла]
Переход к редактированию файла в текущей странице. В случае,
если задан параметр "имя файла", файл с таким именем загружа-
ется в текущую страницу. Если же файл на диске не найден, в
текущей странице создается новый файл с введенным именем.

Merge
Формат: MERGE имя файла
Подгрузка текстового файла формата ALASM в конец текущего файла.
Параметр "имя файла" является обязательным.

counT
Формат: COUNT арифметическое выражение
Производит вычисление указанного арифметического выражения. Ре-
зультат вычислений выводится в десятичной и шестнадцатиричной
системах. В качестве параметров арифметического выражения могут
использоваться метки, их старшие и младшие байты.

sYmbol
Формат: SYMBOL [маска]
Вывод на экран списка меток, удовлетворяющих условию "маска".
Команда выполняется только в случае, если до этого была произ-
ведена компиляция. В качестве атрибута метки могут выводиться
следующие сообщения:
число - Значение метки, определенное при компиляции;
NoDef - Метка не была определена, но была использована;
Macro - Метка представляет собой имя блока макроопределения;
Wrong - Формат метки не определен вследствие ошибок компиляции.

Assemble
Формат: ASSEMBLE
Производит компиляцию текста в текущей странице, начиная с пер-
вой строки. В процессе компиляции на экран выводится количество-
откомпилированных строк для контроля зависания машины.
По окончании компиляции на экран выводятся сообщения:
 Symbols: AAAAA-BBBBB
Указанная разность представляет собой количество свободной памяти
в странице, отведенной под таблицу меток. В случае, если таблица
меток разведена по различным страницам, параметр AAAAA указывает
адрес последней записи в POST SYMBOLS PAGE, а параметр BBBBB -
в SYMBOL LIST PAGE;
 Time= XXX.XX
Это число представляет собой точное время компиляции текста с
точностью до сотых долей секунды.

Save
Формат: SAVE
Текуший файл записывается на диск. В случае, если файл с таким
именем на диске уже существует, он удаляется без дополнительных
запросов.

Info
Формат: INFO
Выдает на экран номер версии, список номеров системных страниц
памяти и перечисление файлов, находящихся во всей памяти ком-
пьютера на момент подачи команды.

paGe
Формат: PAGE [номер страницы]
Переход к странице, указанной в качестве параметра "страница".
До следующего изменения параметра команды PAGE указанная страни-
ца становится текущей и все команды для текущих страниц будут
выполняться над ней.

────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────

    4. КОМАНДЫ РЕДАКТОРА
    При входе в окно редактирования экран разбивается на две части:
окно редактирования и информационная строка, в которой отображается
номер страницы текущего файла, его имя, количество свободной па-
мяти в этой странице и количество байт, перенесенных в карман
(если это число не равно 0). В этой же строке обеспечивается пода-
ча сервисных команд обслуживания текста.
    В процессе редактирования пользователю доступны сервисные ко-
манды обслуживания текста, однако в отличии от среды ассемблера,
результат их выполнения не отображается на экране в виде тексто-
вого сообщения, а контролируется самим пользователем.
Список команд редактора асемблера ALASM:

Quit
Формат: Q
Выход из редактора в среду асемблера.

Begin
Формат: B
Переход к началу текста.

End
Формат: E
Переход к концу текста.

Search
Формат: SEARCH [строка символов]
Поиск строки символов по тексту. Поиск начинается с позиции, сле-
дующей за текущей позицией курсора и продолжается до конца тек-
ста. При остановке поиска он может быть продолжен путем ввода
комбинации SS/I, причем если такая командя дана за концом послед-
ней строки текста, поиск будет начат с его начала.
Если параметр "строка символов" не указан, то будет использована
строка, введенная в предыдущий раз.

sYmbol
Формат: SYMBOL [имя метки]
Поиск описания метки по тексту. При поиске предполагается, что
первый символ имени метки находится в нулевой позиции.
Свойства - аналогично SEARCH.

coDe
Формат: CODE XXX>[код символа]
Установка в позицию курсора символа с произвольным кодом, наби-
раемым на клавиатуре. При вводе команды появляется код символа,
находящегося в текущей позиции курсора и предлагается заменить
его на другой. Если параметр игнорировать, никаких действий
произведено не будет.

Restore
Формат: R
Копирование содержимого кармана в позицию курсора. Строка, на
которой находится курсор, оказывается первой после содержимого
кармана. После этой операции сбрасывается флаг разрешения до-
полнения кармана.

Clear
Формат: C
Очистка кармана.

Xreplace
Формат: REPLACE строка1строка2
Начиная с позиции, следующей за текущей позицией курсора, про-
изводится поиск текста "строка1". Как только он будет обнаружен,
выдается сообщение "REPLACE(Y/N/G)?". При ответе "Y" текущая
"строка1" заменяется на "строка2" и поиск продолжается дальше.
При ответе "N" поиск продолжается без замены. При ответе "G"
все встреченные выражения "строка1" будут заменены на "строка2"
без дополнительных запросов. В любой момент работы команды ее
выполнение может быть прервано нажатием BREAK (CS/SPACE).

Line
Формат: LINE номер строки
Устанавливает курсор на строку с указанным номером. Строки
нумеруются с нулевой и до конца текста с приращением 1 на
каждой строке.

    При редактировании текста пользователю доступны функции,
вызываемые одновременным нажатием двух клавиш. Эти функции
ускоряют работу в редакторе и не имеют операндов:
SS/I - продолжение поиска;
SS/D - переключение русского и латинского регистров ввода тек-
       стовой информации. Изменение регистра индицируется
       видоизменением курсора;
SS/Q - удаление текущей строки. При выполнении этой команды
       удаляемая строма автоматически переносится в карман, но
       только в том случае, если он не был занят другой инфор-
       мацией;
SS/W - вставка пустой строки. Текущая строка сдвигается вноз;
SS/E - копирование текущей строки в карман. После этой команды
       курсор перемещается на следующую строку;
CS/1 - табуляция;
CS/2 - вставка пробела в позицию курсора. Остальная часть строки
       сдвигается вправо;

────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────

    5. ДИРЕКТИВЫ АССЕМБЛЕРА
    При написании компилятора Автор придерживался набора дирек-
тив, принятых в TASM3.0. Директивы, не присутствующие в вышеука-
занном творении, выбраны в соответствии с международной практи-
кой написания компиляторов языка ассанблера, т.е. с помощью
фонаря и англо-русского словаря.
Список директив компилятора ALASM и их описание:

1.
        ORG адрес[,страница]
Установка адреса компиляции. По умолчанию параметр "страница"
задается равным 0. В качестве информации о текущем адресе ком-
пиляции может использоваться символ "$", эквивалентный обраще-
нию к зарезервивованной переменной, содержащей адрес первого
байта команды, в которой произошло обращение.
Пример:
        ORG #7D19
        LDIR
;LDIR записан по адресу #7D19
        ORG #C069,#84
        INDR
;INDR записан по адресу #C069 в странице #84 512й памяти
────────────────────────────────────────────────────────────────
2.
метка   EQU значение
Присваивает метке значение, эквивалентное параметру "значение".
Пример:
SCREEN  EQU #4000          ;SCREEN=#4000
ATTRS   EQU #5B00          ;ATTRS=#5B00
SCR_LEN EQU ATTRS-SCREEN   ;SCR_LEN=#1B00
────────────────────────────────────────────────────────────────
3. Опреации выделения старшего и младшего байтов слова:
NUMB1   EQU #1234
NUMB2   EQU #ABCD
STBMLB  EQU .NUMB1*256+'NUMB2  ;STBMLB=#ЗЧAB
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 BC,END-BEGIN      ;[A] прерываний
        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.H",
;загруженный в страницу 1, потом OTDR, затем в текущую страницу
;будет загружен и откомпилирован текст "ALASM2.H", после чего
;с диска будет считан основной файл и компиляция продолжится
;с команды HALT.        
────────────────────────────────────────────────────────────────
6.
        MAIN "имя файла"[,страница]
Указание основного файла компиляции. Директива MAIN должна быть
первой исполнимой директивой подчиненного файла. 
Будьте внимательны с именами файлов, содержащими символы "." или
"*". Лучше заменить их на символ "?".
Пример:
        MAIN "MAKEб?7",6
        LDIR
;После подачи команды ASSEMBLE компиляция передается
;программе MAKEб*7, находящейся в странице 6,
;затем находящийся в ней INCLUDE вызывает подчиненную
;программу, состоящую из директивы MAIN и команды LDIR.
;Во включаемых файлах MAIN игнорируется, поэтому после ассембли-
;рования LDIR происходит возврат в основную програму и продолже-
;ние компиляции.
────────────────────────────────────────────────────────────────
7.
        INCBIN "имя файла"[,длина]
Включение в компилируемую программу кодового блока, записанного
на диске под именем "имя файла" размером "длина" байт или по
умолчанию из данных каталога.
Пример:
        ORG #E000
        LD HL,SCRFILE
        LD DE,#4000
        LD BC,6144
        LDIR
        RET
SCRFILE INCBIN "SCRб?7",6144
;По адресу SCRFILE в процессе компиляции будет загружен файл
;SCRб*7, который после запуска будет перенесен в экран.
────────────────────────────────────────────────────────────────
8.
        DUP число
Левая программная скобка. Указывает на начало блока, который необ-
ходимо компилировать "число" раз подряд
        EDUP
Правая программная скобка. Указывает на конец повторяемого блока.
Пример:
       DUP 32
        LDI
        LD A,B
        OR C
        JR Z,$+3  ;$ - адрес первого байта компилируемой команды
        LD (HL),D
       EDUP
;Блок текста между DUP и EDUP будет откомпилирован 32 раза
────────────────────────────────────────────────────────────────
9.
        DEFM "строка символов"[,"строка символов"]
Резервирование строки символов.
Пример:
        DEFM "Здесь была строка символов"," ВАСЯ"
────────────────────────────────────────────────────────────────
10.
        DEFB байт[,список байт]
Резервирование списка байт
Пример:
        DEFB "У",13,10,"попа",13,10,"была",13,10,"собака",13,10
────────────────────────────────────────────────────────────────
11.
        DEFW слово[,список слов]
Резервирование списка слов.
Пример:
        DEFW ALASKA,BUFFER,12,#BD15,32767,.NUMB1
────────────────────────────────────────────────────────────────
12.
        DEFS количество повторений[,список байт]
Список байт (по умолчанию - 0) копируется в текущий адрес компи-
ляции. Число циклов равно параметру "количество повторений".
Пример:
        LD SP,#5B00
        DEFS 8,#C5,#D5,#E5,#F5
;эквивалентно
;      DUP 8
;       PUSH BC
;       PUSH DE
;       PUSH HL
;       PUSH AF
;      EDUP
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────


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

  Список ошибок времени компиляции
    ассемблера ALASM128/512
   0 - синтаксическая ошибка;
   1 - зарезерворована;
   2 - зарезервирована;
   3 - короткий переход некорректен;
   4 - зарезервирована;
   5 - зарезервирована;
   6 - повторное описание метки;
   7 - зарезервирована;
   8 - зарезервирована;
   9 - зарезервирована;
   10 - компиляция в ПЗУ;
   11 - недопустимая операция;
   12 - неправильная MACRO-операция;
   13 - не используется;
   14 - ошибка системного стека;
   15 - ошибка диска;

Ошибки времени заполнения:
wrong short - неправильное обращение к метке за пределами
              "короткого" поля;
not defined - метка не определена.

────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────

    7. В СЛЕДУЮЩИХ ВЕРСИЯХ
Существующая версия ALASMa не является последней, так как пути
усовершенствования неисчислимы. Автор сделает все возможное,
чтобы сделать ассемблер еще более удобным для пользователя.
Список доработок, которые следует ожидать в будущих версиях в
первую очередь:
 - увеличение скорости компиляции более чем в 2 раза;
 - возможность настройки системных данных;
 - увеличение возможностей конфигурирования;
 - поддрежка режима расширенной памяти на всех типах машин;
 - перекодировка йцукен-яверты;
 - увеличение плотности хранения текста при сохранении
     совместимости форматов версий сверху вниз;
 - директивы условной компиляции;
 - макрооперации и макроопределения;
 - вывод меток не только по имени, но и по значению;
 - RAMDISK для файлов, подгружаемых с помощью INCBIN;
 - устранение недостатков, связанных с однопроходностью.




Другие статьи номера:

Хит - ТОП 10 игра для Спектрума.

Система - описание макро ассемблера-отладчика ALASM128/512 v2.8.

Обзор - обзор нового софта и игр.

Письма читателей - письмо от TOM HAIL с предложение к обьединении.

Реклама - ПРОДАЕТСЯ ZX -Spectrum 48 Kb.


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

Похожие статьи:
Эказамен - Вам предлагается решить игровой этюд по программе "Deactivators".
AD&D - Дневник барда Серебряная Роза.
Анoнс - игра Another World на спектруме.
От редакции - Минская Еженедельная Модемная Газета.
Hackers - О программировании ВГ93.

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