Передовица » Software » Языки программирования » ASM+

ASM+

Для загрузки диска перейти в раздел The Best.

Автор: Сергей Громов. Москва.

Этот ассемблер радикально быстрее обычного ASM. Имеет команды для полуавтоматического выделения ячеек в нулевой странице и в памяти, дополнительные типы данных. Алгоритм сортировки, с помощью которого ускорен поиск символов, подсказан Сергеем Дударевым.


                  BEST - ассемблер 3.1


   Ассемблер  предназначен  для использования профессиона-
льными программистами и имеет ряд преимуществ по сравнению
со  штатным  ассемблером,  имеющимся  в  комплекте системы
The BEST:

   - благодаря  улучшенной системе хранения меток скорость
     трансляции  возрасла от 2 раз на маленьких программах
     до 7 (!) раз на больших системах

   - операторы  условного  ассемблирования могут быть вло-
     женными.  Допускается до 255 уровней вложенности. Ка-
     ждый   уровень  должен  начинаться  с  команды  DO  и
     заканчиваться командой FIN


                     Новые операции.

   - введена  возможность  использования отрицательных чи-
     сел.  Отрицательное  число  представляется в дополни-
     тельном коде. Так, команда

                   LDA #-3

     эквивалентна команде

                   LDA #$FD

   - введены  операции  "<"  (меньше),  ">" (больше) и "="
     (равно).  Сравнивается результат вычисления выражения
     слева  от  знака и число (метка, константа) справа от
     знака. Если условие соблюдается, то результатом будет
     единица,  иначе - ноль. Эти операции удобно применять
     в командах условного ассемблирования

   - введена  операция "?". Она аналогична операции "*" (в
     смысле EQU *), но выдает адрес текущей строки относи-
     тельно последнего ORG, игнорируя последующие LOCи:

                   ORG $2000
                   LOC $4000
             LABEL EQU ?

     В этом примере метке LABEL будет присвоен адрес $2000


                      Новые команды.

CHB (CHine Binary) 
     Позволяет  вставлять в объектный код заранее подгото-
     вленные  бинарные модули, например, таблицы или блоки
     спрайтов. Формат команды:

         <текст программы>
         [<метка>] CHB <имя файла типа B>
         <продолжение программы>

     В  этом  примере по адресу <метка> будет вставлен би-
     нарный файл <имя файла>.

DFH
     Позволяет  вводить шестнадцатиричные числа. Цифры мо-
     гут  идти  друг  за другом без разделителей, тогда из
     каждой  пары цифр будет составлено число. Цифры могут
     идти  через разделители, тогда каждая цифра, отделен-
     ная  от остальных, будет считаться числом. Разделите-
     лем  может быть любой символ, кроме шестнадцатиричной
     цифры, в том числе и пробел. Писать комментарии после
     этой команды не рекомендуется.

LOC
     Ее действие аналогично команде ORG, но изменение базы
     ассемблирования не приводит к созданию нового файла.

ZERO и DZ
     Позволяют  оперировать  областями  данных  в  нулевой
     странице. Описание команд:

       ZERO <нач1>,<кон1>,[<нач2>,<кон2>,<нач3>,...]
         Команда выделяет области памяти в нулевой страни-
         це для хранения данных. Параметры:
           нач1 - начало первой области,
           кон1 - конец первой области (включительно),
           нач2 - начало второй области и т.д.        
         Все  параметры  должны находиться в пределах от 0
         до $FF. Области не могут пересекаться.

       <метка> DZ <длина>
         Команда  выделяет  область  памяти длиной <длина>
         в  одной  из объявленных областей и объявляет эту
         память  занятой. Выделяемая область памяти всегда
         непрерывна.  Сначала  заполняется  первая область
         данных,  затем  вторая и т.д. Если в первой обла-
         сти  места  нет,  то проверяется область 2 и т.д.
         Если  нет  места ни в одной из областей, выдается
         сообщение об ошибке.

     Пример:
         
             1         ZERO $80,$8F,$C0,$DF
             2 VAR1    DZ $06
             3 VAR2    DZ $12
             4 VAR3    DZ $08
             5 VAR4    DZ $0F

     В этом примере:
       1) объявлено 2 области данных: $80-$8F ($10 байт) и
          $C0-$DF ($20 байт);
       2) для VAR1 есть место в области 1, поэтому для нее
          выполнена команда VAR1 EQU $80;
       3) для VAR2 места в 1 области нет, и эта переменная
          размещается в области 2: VAR2 EQU $C0;
       4) для  VAR3  есть место в области 1, и выполняется
          операция VAR3 EQU $86;    
       5) для VAR4 нет места ни в одной из областей, и вы-
          дается сообщение об ошибке, хотя в сумме в обла-
          стях 1 и 2 памяти хватает.

BASE и DB
     Позволяют оперировать областями данных в основной па-
     мяти  (аналогично  ZERO  и DZ). Области BASE не могут
     находиться в нулевой странице.

DEFASC
     Позволяет  в  процессе ассемблирования перекодировать
     текст, заданный командами ASC и REV, а также в форма-
     те '<символ>', из кодов ASCII в произвольный код. Фо-
     рмат команды:

         DEFASC <имя файла>
         
     Файл  должен  содержать таблицу перекодировки и может
     иметь любой тип. Таблица строится так, чтобы в нужной
     кодовой позиции стоял требуемый символ или код ASCII.
     Из  файла  берутся  первые 256 байт без контроля типа
     файла.  В  связи  с  этим использование файлов типа B
     нежелательно.

ASZ
     Аналогична  команде  ASC, но в конец строки автомати-
     чески добавляется 0.

   Ассемблер  оформлен в виде резидентной программы и пре-
дназначен  для работы в среде The BEST версий не ниже 5.0.
Программа  имеет  встроенную подсказку. Чтобы получить ее,
нужно просто ввести команду T без параметров.


                                 Автор доработок  С.Громов

                                         (C) 1994 USN Ltd.

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *