Теневой ассемблер ALASM 3.8с (part 1). .СИСТЕМКИ
Теневой макро ассемблер-отладчик ALASM v3.8с
Краткое описание функциональных возможностей.
Оглавление:
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
2. ХOЛOДНЫЙ ЗАПУСК
3. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
4. КОМАНДЫ РЕДАКТОРА
5. ДИРЕКТИВЫ АССЕМБЛЕРА
б. ОШИБКИ КOМПИЛЯТOРА
7. ОПЦИИ МЕНЮ SETUP
8. В СЛЕДУЮЩИХ ВЕРСИЯХ
9. ОТЛИЧИЯ 0Т ПРЕДЫДУЩИХ ВЕРСИЙ
════════════════════════════════════════════════════════════════
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
ALASM позволяет работать одновременно с несколькими текстами,
расположенными в разных страницах памяти пользователя. Переход
от редактирования одной страницы к другой осуществляется вводом
команды
PAGE [страница]
из рабочей строки асемблера. Количество текстов, которые может
обрабатывать ALASM, зависит только от объема памяти компьютера.
Страницы в ассемблере нумеруются по маске максимального зна-
чения, передаваемого в драйвер расширенной памяти. При этом его
младшие 3 бита соответствуют битам, передаваемым в порт #7FFD.
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────
2. ХOЛOДНЫЙ ЗАПУСК
При запуске ассемблера из TR-DOS экран очищается и на нем по-
является авторское вступление, после чего проводится тест памяти
по всем восьми битам номера страницы драйвера. Его результаты
выводятся на экран в виде ХХХ кб mask ХХ. Числа указывают,
сколько памяти доступно ассемблеру на Вашем компьютере и какие
биты номера страницы отвечают за доступ. По этим битам мас-
кируется операнд команды PAGE и других команд.
Ниже теста памяти выводится HELP, содержащий список команд
ассемблера и его редактора. Горячие клавиши этих команд вынесены
в заглавный режим. Ниже предлагается нажать CS/0 для запуска
SETUP. Запуск которого позволит вам изменить визуальные и конфи-
гуративные параметры работы ассебблера и, при желании, записать
их на диск. Все изменения, внесенные в SETUP, записываются непо-
средственно в тело моноблока ассемблера "alasm.С". Функция за-
пуска SETUP доступна только при холодном запуске.
После соответствующего сообщения нажатие любой клавиши приве-
дет к очистке экрана и выходу в рабочую строку ассемблера.
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────
3. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
Среда ассемблера обладает собственной системой команд, боль-
шинство которых совместимы с командами TASM2.0.
Список этих команд может быть получен на экране нажатием
клажиши "Н" (HELP). Ввести необходимую команду можно, нажав ла-
тинскую букву, входящую в состав этой команды в виде заглавной.
При этом введенная команда отображается в рабочей строке, после
чего, если это необходимо, ждет ввода операндов или, в зависи-
мости от назначения, подтверждения нажатием ENTER.
После ввода команды она дублируется в рабочем экране и выпол-
няется. В случае некорректности операндов выводится соответству-
ющее сообщение.
Выполнение любой команды может быть прервано нажатием BREAK.
Если в результате выполнения команды может быть потерян
текст, то, если он был изменен, выводится запрос на его сохране-
ние: File has been changed. Save(Y/N)?
В систему команд среды ассемблера входят:
Help
Формат: HELP
Вывод на экран списка команд, доступных в ассемблере и редакторе
Команда HELP не содержит операндов и не нуждается в подтвержде-
нии нажатием ENTER.
Quit
Формат: QUIT [адрес][,страница]
Выход из ассемблера. В случае, если параметры не заданы, проис-
ходит выход через дно стека, в противном случае осуществляется
безусловный переход по указанному адресу. Параметр "страница"
передается в драйвер верхней памяти (по умолчанию задает-
ся 0). В качестве параметров "адрес" и "страница" могут быть ис-
пользованы метки или содержащие их арифметические выражения.
Debug
Формат: DEBUG
Выход в отладчик STS. При отсутствии в странице 7 монитора
выдается соответствующее сообщение. Если перед вводом этой ко-
манды был откомпилирован текст, то в указатель адреса отладки
монитора будет записан адрес последнего ORG. При этом, набрав
в отладчике SS/5, Вы получите возможность отлаживать свою про-
грамму, наблюдая на экране имена меток по их адресам.
Run
Формат: RUN [адрес][,страница]
Выполняет те же действия, что и команда QUIT, но перед этим за-
носит в стек адрес возврата в резидентный модуль ассемблера,
что позволяет вернуться в ассемблер из запускаемой программы
по команде RET. По умолчанию параметр "адрес" принимает значение
последней директивы ORG, а параметр "страница" - 0.
Work
Формат: W0RK [drive:][filename[.ext]]
Загрузка файла в текущую рабочую страницу.
По умолчанию задается расширение "Н".
"filename" может представлять собой маску. В этом случае будет
загружен первый файл, который ей удовлетворяет.
В случае, если параметр "filename" не введен, то пользователю
предоставляется возможность выбрать файл из каталога текущего
или указанного диска путем выбора его курсором из списка файлов,
появляющегося в верхнй части экрана.
Catalogue
Формат: CATAL0GUE [drive:][mask]
По умолчанию задается "*.*" (все файлы).
Выводит на экран каталог диска.
Формат маски определяется следующим образом:
знак "?" определяет, что в данной позиции может находиться
любой символ. Знак "*" определяет, что, начиная с данной позиции
все символы могут принимать произвольные значения. При достижени
ограничителя (символ "." или конец строки) предполагается, что
остальная часть строки заполнена символами "ПРОБЕЛ".
nUmbers
Формат: NUMBERS [параметр]
Смена системы счисления отображаемой числовой информации. "Пара-
метр" представляет собой одно из двух выражений: "DEC" или "НЕХ"
Name
Формат: NAME newfilename[.ext]
Сменить имя файла на новое.
По умолчанию задается расширение "Н".
"newfilename" - новое имя файла.
Print
Формат: PRINT [bytes list]
Выводит в порт ZX-LPRINT текущий текст, предварительно выводя
указанный список байт. Байты указываются через запятую.
Edit
Формат: EDIT [дисковод:][имя файла]
Переход к редактированию файла в текущей странице. В случае,
если задан параметр "имя файла", файл с таким именем загружа-
ется в текущую страницу. Если же файл на диске не найден, в
текущей странице создается новый файл с введенным именем.
Merge
Формат: MERGE [дисковод:]имя файла
Подгрузка текстового файла формата ALASM в конец текущего файла.
Параметр "имя файла" является обязательным.
counT
Формат: C0UNT арифметическое выражение
Производит вычисление указанного арифметического выражения. Ре-
зультат вычислений выводится в десятичной и шестнадцатиричной
системах. В качестве параметров арифметического выражения могут
использоваться метки, их старшие и младшие байты.
sYmbol
Формат: SYMB0L [маска]
Вывод на экран списка меток, удовлетворяющих условию "маска".
Команда выполняется только в случае, если до этого была произ-
ведена компиляция. В качестве атрибута метки могут выводиться
следующие сообщения:
число - Значение метки, определенное при компиляции;
NoDef - Метка не была определена, но была использована;
Macro - Метка представляет собой имя блока макроопределения;
Wrong - Формат метки не определен вследствие ошибок компиляции.
Assemble
Формат: ASSEMBLE
Производит компиляцию текста в текущей странице, начиная с пер-
вой строки. В процессе компиляции на экран выводится количество-
откомпилированных строк для контроля зависания машины.
По окончании компиляции на экран выводятся сообщения:
Symbols: ААААА-ВВВВВ
Указанная разность представляет собой количество свободной памят
в странице, отведенной под таблицу меток. В случае, если таблица
меток разведена по различным страницам, параметр ААААА указывает
адрес последней записи в P0ST SYMB0LS PAGE, а параметр ВВВВВ -
в SYMB0L LIST PAGE;
Save
Формат: SAVE [+][дисковод:]
Запись на диск отредактированного текста. При указании параметра
"+" на текущий или указанный дисковод записываются все файлы, у
которых установлен маркер изменения. В противном случае на диск
записывается текущий файл. В случае, если файл с таким именем на
диске уже существует, он удаляется без дополнительных запросов.
Info
Формат: INFO
Выдает на экран номер версии, список номеров системных страниц
памяти и перечисление файлов, находящихся во всей памяти ком-
пьютера на момент подачи команды.
paGe
Формат: PAGE [номер страницы]
Переход к странице, указанной в качестве параметра "страница".
До следующего изменения параметра команды PAGE указанная страни-
ца становится текущей и все команды для текущих страниц будут
выполняться над ней.
driVe
Формат: DRIVE дисковод:
Указанный дисковод становится текущим и все команды для текущего
дисковода будут оперировать с ним.
Jumb
Формат: JUMB [+]
Эта команда заменяет в текущем файле все указатели однократной
компиляции с "-" на "+". Если задан параметр, то будет просмо-
трена вся память.
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────
4. КОМАНДЫ РЕДАКТОРА
При входе в окно редактирования экран разбивается на две час
окно редактирования и информационная строка, в которой отображае
номер страницы текущего файла, его имя, количество свободной па-
мяти в этой странице и количество байт, перенесенных в карман
(если это число не равно 0). В этой же строке обеспечивается под
ча сервисных команд обслуживания текста.
В процессе редактирования пользователю доступны сервисные ко
манды обслуживания текста, однако в отличии от среды ассемблера,
результат их выполнения не отображается на экране в виде тексто-
вого сообщения, а контролируется самим пользователем.
Список команд редактора асемблера ALASM:
Quit
Формат: Q
Выход из редактора в среду асемблера.
Begin
Формат: В
Переход к началу текста.
End
Формат: E
Переход к концу текста.
Search
Формат: SEARCH [строка символов]
Поиск строки символов по тексту. Поиск начинается с позиции, сле
дующей за текущей позицией курсора и продолжается до конца тек-
ста. При остановке поиска он может быть продолжен путем ввода
комбинации SS/I, причем если такая командя дана за концом послед
ней строки текста, поиск будет начат с его начала.
Если параметр "строка символов" не указан, то будет использована
строка, введенная в предыдущий раз.
sYmbol
Формат: SYMB0L [имя метки]
Поиск описания метки по тексту. При поиске предполагается, что
первый символ имени метки находится в нулевой позиции.
Свойства - аналогично SEARCH.
coDe
Формат: C0DE ХХХ>[код символа]
Установка в позицию курсора символа с произвольным кодом, наби-
раемым на клавиатуре. При вводе команды появляется код символа,
находящегося в текущей позиции курсора и предлагается заменить
его на другой. Если параметр игнорировать, никаких действий
произведено не будет.
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 [+]
Без параметра производит сканирование текста в текущей странице
с целью замены директив "-" на "+" (эта операция автоматически
производится при загрузке каждого файла с диска). С параметром
[+] производится сканирование всех текстов, найденных в памяти.
При редактировании текста пользователю доступны функции,
вызываемые одновременным нажатием двух клавиш. Эти функции
ускоряют работу в редакторе и не имеют операндов:
SS/I - продолжение поиска;
SS/D - переключение русского и латинского регистров ввода тек-
стовой информации. Изменение регистра индицируется
видоизменением курсора;
SS/Q - удаление текущей строки. При выполнении этой команды
удаляемая строма автоматически переносится в карман, но
только в том случае, если он не был занят другой инфор-
мацией;
SS/W - вставка пустой строки. Текущая строка сдвигается вноз;
SS/E - копирование текущей строки в карман. После этой команды
курсор перемещается на следующую строку;
CS/1 - табуляция;
CS/2 - вставка пробела в позицию курсора. Остальная часть строки
сдвигается вправо;
SS/SP- на экран выводится список файлов, в котором с помощью
курсора выбырается нужный для редактирования;
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────
5. ДИРЕКТИВЫ АССЕМБЛЕРА
При написании компилятора Автор придерживался набора дирек-
тив, принятых в TASM3.0. Директивы, не присутствующие в вышеука-
занном творении, выбраны в соответствии с международной практи-
кой написания компиляторов языка ассанблера, т.е. с помощью
фонаря и англо-русского словаря.
Список директив компилятора ALASM и их описание:
1.
ORG адрес[,страница]
Установка адреса компиляции. По умолчанию параметр "страница"
задается равным 0. В качестве информации о текущем адресе ком-
пиляции может использоваться символ "$", эквивалентный обраще-
нию к зарезервивованной переменной, содержащей адрес первого
байта команды, в которой произошло обращение.
Пример:
ORG #7D19
LDIR
;LDIR записан по адресу #7D19
ORG #СОб9,#84
INDR
;INDR записан по адресу #СОб9 в странице #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. Опреации выделения старшего и младшего байтов слова:
NUMB1 EQU #1234
NUMB2 EQU #ABCD
STBMLB EQU .NUMB1*25б+'NUMB2 ;STBMLB=#ЗЧАВ
MLBSTB EQU 'NUMB1*25б+.NUMB2 ;MLBSTB=#12CD
;Старайтесь избегать деления на 25б для получения старшего байта
;необходимого слова, так как деление занимает в 280 раз больше
;времени, чем просто операция выделения старшего байта
DEFB 'NUMB2
;Абсолютно эквивалентно, но намного быстрее, чем
DEFB NUMB2/25б
;При задании байтового значения метки младший байт выделяется
;автоматически
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 А
HALT
JP NZ,MARKA ;JP - не случайно
RET
ENT
END
────────────────────────────────────────────────────────────────
5.
INCLUDE "дисковод:имя файла"[,страница]
Включение в компилируемый файл дополнительного текстового блока,
записанного на диске под именем "имя файла". При этом указанный
файл загружается в страницу, определенную параметром "страница"
(по умолчанию - текущая). По окончании компиляции включенного
блока компиляция продолжается со строки, следующей после данной
директивы. Особенностью данной директивы является то, что файл,
указанный в ней, не будет загружаться с диска, если он уже нахо-
дится в необходимой странице.
Пример:
LDIR
INCLUDE "T0KENIZE",1
0TDR
INCLUDE "ALASM2"
HALT
;Сначала быдет откомпилирован LDIR, потом текст "T0KENIZE.Н",
;загруженный в страницу 1, потом 0TDR, затем в текущую страницу
;будет загружен и откомпилирован текст "ALASM2.Н", после чего
;с диска будет считан основной файл и компиляция продолжится
;с команды HALT.
────────────────────────────────────────────────────────────────
б.
MAIN "имя файла"[,страница]
Указание основного файла компиляции. Директива MAIN должна быть
первой исполнимой директивой подчиненного файла.
Будьте внимательны с именами файлов, содержащими символы "." или
"*". Лучше заменить их на символ "?".
Пример:
MAIN "МАКEб?7",б
LDIR
;После подачи команды ASSEMBLE компиляция передается
;программе МАКEб*7, находящейся в странице б,
;затем находящийся в ней INCLUDE вызывает подчиненную
;программу, состоящую из директивы MAIN и команды LDIR.
;Во включаемых файлах MAIN игнорируется, поэтому после ассембли-
;рования LDIR происходит возврат в основную програму и продолже-
;ние компиляции.
────────────────────────────────────────────────────────────────
7.
INCBIN "дисковод:имя файла"[,длина]
Включение в компилируемую программу кодового блока, записанного
на диске под именем "имя файла" размером "длина" байт или по
умолчанию из данных каталога.
Пример:
ORG #E000
LD HL,SCRFILE
LD DE,#4000
LD ВС,б144
LDIR
RET
SCRFILE INCBIN "SСRб?7",б144
;По адресу SCRFILE в процессе компиляции будет загружен файл
;SСRб*7, который после запуска будет перенесен в экран.
────────────────────────────────────────────────────────────────
8.
DUP число
Левая программная скобка. Указывает на начало блока, который нео
ходимо компилировать "число" раз подряд
EDUP
Правая программная скобка. Указывает на конец повторяемого блока
Пример:
DUP 32
LDI
LD А,В
0R С
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,327б7,.NUMB1
────────────────────────────────────────────────────────────────
12.
DEFS количество повторений[,список байт]
Список байт (по умолчанию - 0) копируется в текущий адрес компи-
ляции. Число циклов равно параметру "количество повторений".
Пример:
LD SP,#5В00
DEFS 8,#С5,#D5,#E5,#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 327б8
DUP #4000
DEFW SHLUSS
SHLUSS=SHLUSS+1
EDUP
;вся память выше #8000 будет заполнена увеличивающимися словами
;от 0 до 1б384
────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────
б. При компиляции исходного текста возможна выдача ошибок
времени компиляции, связанных с невнимательностью программиста.
Список ошибок времени компиляции
ассемблера ALASM
0 - синтаксическая ошибка;
1 - зарезерворована;
2 - зарезервирована;
3 - короткий переход некорректен;
4 - зарезервирована;
5 - зарезервирована;
б - повторное описание метки;
1 - зарезерворована;
2 - зарезервирована;
3 - короткий переход некорректен;
4 - зарезервирована;
5 - зарезервирована;
б - повторное описание метки;
7 - зарезервирована;
8 - зарезервирована;
9 - зарезервирована;
10 - компиляция в ПЗУ;
11 - недопустимая операция;
12 - неправильная MACR0-операция;
13 - не используется;
14 - ошибка системного стека;
15 - ошибка диска;
Ошибки времени заполнения:
wrong short - неправильное обращение к метке за пределами
"короткого" поля;
пот defined - метка не определена.
────────────────────────────────────────────────────────────────
Other articles: