Из журнала ZX Format #3, Санкт-Петербург, 03.1996 XL Design Inc. представляет TASM 4.0(XLD) Turbo ASseMbler for ZX-Spectrum 128k ОПИСАНИЕ (C) XL Design Inc. 1996 (C) Сергей Павлов _________________________________________ Дополнительные возможности по сравне- нию с 3.0(3.1): - Встроенная кэш-директория - Поддержка недокументированных команд (SLI,INF, OUT(C),#00) - Поддержка двоичной арифметики - Метки длиной до 7 байт - Дополнительные арифметические опера- ции - Использование половинок от IX,IY - В команде PUSH введена возможность ввода регистров через запятую - Скорость ассемблирования увеличена в 1.8 раза - Скорость при работе в редакторе увели- чена в 2.5 раза - Исправлены ошибки,связанные с *BREAK*, тремя кавычками, Merge'м и т.д. - Длина объектного модуля вычисляется из последнего записанного в память байта - В DEFS можно использовать не только одиночные символы, но и строки. ________________ Загрузка Этот процесс можно назвать основным, поэтому расскажу о нем подробнее. Первое, что Вам необходимо сделать, это найти файл TASM4.0x и запустить его из лю- бого бута. Если первая операция не увен- чалась успехом, и Вы не нашли искомый файл, то необходимо выйти в 48 бэйсик с открытым портом. Сделать это не просто, а очень просто. Достаточно войти в 128 бэйсик и набрать usr 0, после чего подтвердить сие клавишей eнтер. После этого необходимо напечатать: CLEAR 24999 OUT 32765,20 RANDOMIZE USR 15619: REM: LOAD "tasm4.0x" CODE RANDOMIZE USR 49152 Этим лекцию по запуску заканчиваю. Скажу лишь, что повторный запуск делается так: RANDOMIZE USR 23600. Главное меню Основной экран главного меню поделен на две основные части (информационную и системную). Информационная часть выглядит следующим образом: WORK> A:WORKNAME MAIN> A:MAINNAME А - номер дисковода, на котором в дан- ный момент Вы работаете, WОRКNAME - имя рабочего файла; MAINNAME - имя основного файла, т.е. файла, из которого будет про- исходить ассемблирование. Далее по порядку о системной части. В скобках указана кнопка, по которой проис- ходит выбор описываемого пункта. Edit (E) - Выход в редактирование. Ес- ли не набрано имя файла, то запрашивается имя. При отсутствии файла на диске выри- совывается надпись New File, что предзна- менует открытие нового файла. Assemble (A) - Ассемблирование. Если не указано имя файла, то будет соответ- ствующий запрос. Ассемблирование происхо- дит в два прохода (PASS1 и PASS2). Во время первого прохода подготавливается таблица меток и проверяется синтаксис, а во время второго создается машинный код и подставляются значения в таблицу меток. Если в процессе возникает ошибка, то вы- падет нечто вроде: PASS 1:00001 0 METKA LF A,#03 Число, стоящее после "PASS 1", указы- вает на номер строки, в которой была сде- лана ошибка. Если перед числом стоит сим- вол "I", то ошибка произошла в подключае- мом файле. После номера строки стоит код ошибки, и далее сама строка. Коды ошибок будут рассмотрены в главе "Ошибки". Если ассемблирование прошло успешно, то поя- вятся следующие сообщения: *** END ASSM *** Sym:nnnnn (Оставшееся место под таблицу меток) Run:nnnnn (Адрес последнeго ORG) Len:nnnnn (Длина программы. Высчитывается по формуле: Len=End-Run, где Еnd - последний записанный в память байт, Run - адрес пос- леднего ORG.) New Name (N) - Смена имени рабочего фай- ла. Main File(M) - Смена имени основного фай- ла. Work File(W) - Перезагрузка рабочего фай- ла. Рабочий файл будет автоматически уда- лен из памяти, но если он не был сохра- нен, то будет дан запрос о его сохране- нии. Merge File (G) - Подклейка файла. Import 2.0 (I) - Импортирование из TASM2.0. Save (S) - Запись рабочего файла. Автома- тически перезаписывается. Obj Save (O) - Выгрузка объектного моду- ля. Старт и длина берутся из параметров Run и Len. Load FNT (F) - Подгрузка нового шрифта. Шрифт имеет длину 512 байт, подгружается в тело программы и имеет формат 1х8. Symbol Lst (Y) - Вывод на печать таблицы меток. Disk Drive (D) - Смена текущего дисково- да. Quit (Q) - ... Run Prog (R) - Запуск программы с адреса Run. Catalog (C) - Пытается выводить каталог. По сравнению с предыдущими, в этой версии поле данных немного расширено. Beeper (B) - Вкл\Выкл бульканья при нажа- тии на кнопочки. Редактор Вы видите на экране курсор. Курсорные клавиши его перемещают. Имеются сервисные кнопочки: +<1>(Edit) - Табуляция. +<2>(C.Lock) - Раздвиг строки. +<3>(True.Vid) - По страницам вверх. +<4>(Inv.Vid) - По страницам вниз. +<9>(Graph) - Удаление символа справа от курсора. + - Вставка строки. + - Удаление строки. + - Занесение строки в буфер. + - Продолжение поиска. +(Ext.Mode) - Вход в дополни- тельный командный режим. Командный режим имеет следующие кнопки: - Выход из редактора. - Вставка буфера в текст. - Oчистка буфера. - Продолжение поиска с заменой. - Поиск. - Поиск с замeной. При нахождении бу- дет выдано: Replace(Y/N/G) Y - Да, заменить. N - Нет. G - Заменить до конца текста. - В начало текста. - В конец текста. Выражения. В поле операндов могут записываться как отдельные операнды,так и выражения, кото- рыми задается последовательность алгебро- ических и логических операций над конс- тантами, метками, счетчиками адресов. В выражениях, обрабатываемых TASM'ом, до- пускаются следующие константы (с примера- ми): десятичная константа (30) шеснадцатиричная константа (#40 или 40H) двоичная константа (%1101001101) символьная константа ("А") и операторы (примеры в скобках): + Сложение (3+3=6) - Вычитание (3-2=1) * Умножение (2*2=4) / Деление (4/2=2) | OR (%100|%111=%111) & AND (%111&%011=%011) ! XOR (%010!%111=%101) ^ EXCHANGE (Обмен старшего с младшим бай- том (#9C40^=#409C) { HIGH BYTE (Взятие старшего байта (#9C40{=#009C) } LOW BYTE (Взятие младшего байта (#9C40}=#0040) [ ROLL LEFT (16-битный циклический сдвиг влево. 15-бит переносится в 0. (%1[=%10) ] ROLL RIGHT (16-битный циклический сдвиг вправо. 0-бит переносится в 15. (%10]=%1) Новый TASM, как и старый, не ставит приоритетов в арифметических операциях. Все действия выполняются последовательно. Найдя скобку, он следит только за ее зак- рытием. Дополнительные возможности В команды INCBIN и INCLUDE была встрое- на кэш директория, что весьма ускорило доступ к диску при ассемблировании. Появились следующие команды: SLI - по непонятным причинам не была реа- лизована в предыдущих версиях. INF(#ED,#70) - Взята из STS. В некоторых каталогах она имеет мнемонику IN F,(C). OUT(C),#00(#ED,#71) - Так же, как и INF была взята из STS'а. Команды DEFB, DEFW, DEFS, DEFM для удобства были продублированы на DB, DW, DS, DM. Поддержаны половинки от регистров IX и IY, и, введя строку INC LX, Вы не отправитесь на поиски ошибки. Для тех, кто не знает, что такое LX, объясняю: LX-IXlow;HX-IXhigh;LY-IYlow;HY-IYhigh В команде DEFS была реализована воз- можность повтора не только одиночных бай- тов, но и стрингов. Например: DS 10,"hello",#FF,"bye",#FF Это повторит всю строку 10 раз. Для полной совместимости с GENS'ом бы- ла исправлена ошибка обработки трех кавы- чек ("""). В командах PUSH и POP была введена возможность ввода регистров через запя- тую. Например строка: PUSH AF,BC,DE,HL при дизассемблировании даст: PUSH AF PUSH BC PUSH DE PUSH HL Техническая информация Перед стартом TASM загружается в 4 банк, с адреса #C000. После запуска ком- пилятор перекидывается в 3 банк, где рас- полагается таблица меток. При работе ис- пользуются следующие страницы: #11 - Для Includ'ов и буфера. #13 - Там сидит Compiler+Таблица меток. #14 - Сам TASM. #16 - Для МAIN FILE. #17 - Первые 4 килобайта используются для кэш директории. В теле TASM'а (в 4 банке) имеются сле- дующие переменные: #C635(50741) - Атрибуты экрана + цвет бордюра. #C633/34(50739/40) - Задержки при нажатии на клавишу. #C636(50742) - Состояние Beeper (1-Yep, 0-Nop) Ошибки 0 - Синтаксическая ошибка 1 - Поле метки более 7 символов 2 - Не полностью закрыты скобки 3 - Недопустимое для данной команды число 4 - Отсутствует запятая 5 - Недопустимое для данной команды выра- жение 6 - Метка определена более одного раза 7 - Не открыты скобки там, где необходимо 8 - Использование зарезервированного сло- ва не по назначению 9 - Деление на ноль. Переполнение, короче Bad Number. F - Не найден файл на диске (INCLUDE, INCBIN) _____________ При нахождении ошибок, а также по воп- росам приобретения следующих версий просьба обращаться в редакцию ZF. Напоми- наем, что TASM4.0 (XLD) присутствует в ПРИЛОЖЕНИИ. _________________________________________