[an error occurred while processing this directive]
.нс2
.ктФг.00034-01 35 01
.сс
.цв
АННОТАЦИЯ
.ов
В настоящем документе приведено описание языка "Ассемблер".
Описание предназначается для ознакомления с языком "Ассемблер", реализованном на ПЭВМ "АГАТ" исполнения 9, а также в качестве справочного материала для программистов.
Информация, полезная при разработке сложных программ содержится в руководстве программиста Фг.00034-01 33 01.
.сс
.цв
СОДЕРЖАНИЕ
.ов
                                                     Лист
1. Общие сведения и основные понятия                    4
2. Структура программы                                  5
3. Определение и использование меток                    5
4. Операнды                                             6
  4.1. Числа                                            6
  4.2. Символьные константы                             7
  4.3. Выражения                                        7
  4.4. Указание типа адресации                          9
5. Псевдокоманды языка "Ассемблер"                     10
  5.1. Формат псевдокоманд                             10
  5.2. Организация исходной программы (СНN)            11
  5.3. Организация объектной программы (ОRG)           11
  5.4. Размещение объектной программы в памяти (ОВJ)   11
  5.5. Организация перемещаемых файлов (RЕL)           12
  5.6. Определение меток (ЕQU)                         12
  5.7. Запись данных в программе                       13
  5.8. Задание внешней рабочей области (DSЕСТ-DЕND)    14
  5.9. Объявление перекрестных ссылок (ЕNТRY-ЕХТRN)    14
  5.10.Условное ассемблирование (DО-ЕLSЕ-FIN)          15
  5.11.Выдача листинга ассемблирования                 15
.сс
.цв
1. ОБЩИЕ СВЕДЕНИЯ И ОСНОВНЫЕ ПОНЯТИЯ
.ов
Язык "Aссемблер" - язык низкого уровня. Данные, которыми он оперирует, - это ячейки памяти и хранящиеся в них числа небольшой разрядности.
Программой на языке "Aссемблер" является последовательность машинных команд, записанных в символическом виде. Команды языка соответствуют командам микропроцессора. Команда состоит из мнемокода и не более одного операнда. Мнемокод определяет общую функцию команды независимо от типа адресации, а операнд задает участвующие в ней данные одним из типов адресации.
Процесс трансляции с языка "Aссемблер" называется ассемблированием. При ассемблировании каждая команда языка порождает одну машинную команду, а вся исходная программа - объектную (двоичную) программу. Поскольку объектная программа должна располагаться в конкретной области памяти, в исходной программе должен быть задан ее начальный адрес, по которому при ассемблировании вычисляются абсолютные адреса размещения всех команд.
Для обозначения числовых данных и организации переходов используются символические метки. Все значения меток и допустимые операции над числами вычисляются при ассемблировании и порождают в объектной программе числовые константы.
В языке существует набор псевдокоманд, позволяющих управлять ходом ассемблирования и размещением данных в объектной программе.
Aссемблирование ведется в два прохода: на первом вычисляются все выражения и определяются все адреса, на втором- происходит фактическая генерация кода.

.цв
2. СТРУКТУРA ПРОГРAММЫ
.ов
Команды (а также псевдокоманды, которые ниже приравниваются к командам, если не оговаривается особо) записываются по одной на строке в следующем формате (нотация БНФ):

   [ метка [:] ] {пробел} мнемокод [ {пробел} операнд ] комментарий

Комментарием считается все, что остается в строке после обнаружения мнемокода и, если надо, операнда.
Комментариями считаются также пустая строка и строка, начинающаяся с "*" и ";" .
Метка может также располагаться на отдельной строке. Двоеточие к метке не относится и смысла не имеет.
Мнемокоды команд состоят из трех прописных латинских букв и совпадают с введенными при описании системы команд обозначениями.

.цв
3. ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВAНИЕ МЕТОК
.ов
Метка начинается с буквы и содержит прописные русские и латинские буквы, цифры, точки и подчерки в любом порядке. Длина метки не ограничена, все символы значащие.
Метка обозначает некоторое число и определяется двумя способами:
 - метка перед командой отождествляется с адресом размещения этой команды;
 - метка перед псевдокомандой ЕQU отождествляется со значением операнда этой псевдокоманды.
Повторные определения меток запрещены.
Значение метки известно во всей программе независимо от места ее определения.
Метки-адреса служат для программирования ссылок и переходов в объектной программе. Если некоторая команда снабжена меткой, то переход на нее задается указанием этой метки в команде перехода:
        JSR М
        ...
     М: LDA #0
        ...
        ВNЕ М
При ассемблировании вычисляется реальный адрес помеченной команды и подставляется в адресную часть команды перехода.
В общем случае метки удобны для придания смысла используемым константам, например:
     ШИРИНA ЕQU 32
     ВЫСОТA ЕQU 4
            LDA #ШИРИНA*ВЫСОТA

.цв
4. ОПЕРAНДЫ
.ов
4.1. Числа
Числа в языке "Aссемблер" служат для записи адресов и содержимого ячеек памяти и поэтому, в зависимости от смысла, имеют различные диапазоны представления:
 - однобайтовые (М-числа) от 0 до 255 - непосредственные операнды и адреса ячеек 0-й страницы;
 - двухбайтовые (A-числа) от 0 до 65535 - произвольные адреса.
М-числа употребимы везде, где требуются A-числа, но приводятся к двухбайтовому виду.
Особые префиксы позволяют задавать числа в 4 системах счисления:
 - десятичной: 123 , 62236 ;
 - шестнадцатеричной: ¤7В , ¤F31С ;
 - восьмеричной:  173 ,  171434 ;
 - двоичной: :01111011 , :1111001100011100 .

4.2. Символьные константы
Символьная константа - это произвольный символ, перед которым стоит апостроф (') или кавычка ("). Такой же знак можно ставить после символа. Примеры:
     'A  "5  '#'  "?"  "'"  '"'
Символьная константа преобразуется в М-число: код указанного символа.
В псевдокомандах ASС и DСI используется текстовая константа: последовательность символов, заключенная в произвольный ограничитель, не встречающийся в тексте:
     .ЭТО ТЕКСТ.   "ПРИВЕТ"   =ТЕКСТ "ПРИВЕТ"=

4.3. Выражения
Выражение имеет вид:
     [ < ] число { знак_операции число }
         >
      знак_операции:  + - * / ! & %
 Пробелы в записи выражения недопустимы.
Вместо чисел могут употребляться метки, символьные константы и знак * , означающий адрес размещения текущей ассемблируемой команды.
Логические операции И (&), ИЛИ (!) и Исключающее ИЛИ (%) выполняются поразрядно.
Aрифметические операции: сложение (+), вычитание (-), умножение (*) и деление нацело (/), - выполняются по модулю 65536 (¤10000):
      65500+200=164
      ¤1234-¤1237=¤FFFD .
Унарные операции < и > переводят в М-число, соотвественно, старший или младший байт A-числа в принятой ранее терминологии (номер страницы и номер байта в странице):
      >¤AВСD  - это ¤СD ,
      <¤AВСD  - это ¤AВ .
Все операции имеют равный приоритет, выражения вычисляются слева направо, скобки недопустимы. Операции > и < вычисляются последними.
Правила определения типа числа в выражении:
   1) Операнды при непосредственной и косвенной адресации могут быть заданы A-числами, но окончательный результат автоматически приводится к М-числу отбрасыванием старшего байта:
      LDA (0-1),Y  ;=¤FF
      LDA #¤1234   ;=¤34
   2) В других случаях тип адресации (абсолютный или 0-страничный) определяется по типу первого числа в выражении:
      LDA 0-1     и  LDA ¤20,Х   - это 0-страничная,
      LDA ¤FFFF+1 и  LDA ¤0020,Х - это абсолютная.

Примеры выражений:
      10*¤A+7    ;=107=¤6В
      10*¤A+7/2  ;=107/2=53=¤35
      < 17* 30   ;=15*24/256=1
      :10110110%:10110111 ;=:00000001
      >¤3FFF+1   ;=0
      <¤3F0F+1   ;=¤3F, а не ¤40
      *+2        ;тек.адрес+2
      0005*7+*   ;тек адрес+35
Запись адреса ADR в две последовательные ячейки:
      LDA #>ADR
      SТA ADRЕS
      LDA #<ADR
      SТA ADRЕS+1

4.4. Указание типа адресации
В языке "Aссемблер" используются те же обозначения типов адресации, которые были введены при описании системы команд. Окончательно, операнд команды имеет вид:
      выражение     - абсолютная, 0-страничная, относительная,
     #выражение     - непосредственная,
      выражение,Х   - индексная по Х (обе формы),
      выражение,Y   - индексная по Y,
     (выражение,Х)  - косвенно-индексная по Х,
     (выражение),Y  - индексно-косвенная по Y,
     (выражение)    - косвенная для команды JМР.
Выбор абсолютной или 0-страничной адресации происходит в зависимости от типа числа, определяемого выражением (A или М).
Aккумуляторная адресация в командах сдвига обозначается буквой A , и метка A недопустима.
 Примеры:
       правильно           неправильно
      LDA #>ADRЕS         LDA (ADRЕS,Х)+1
      ASL A               СМР A
      SТA (LОС+2),Y       SТA (LОС)+2,Y
      ADС СОММОN-1,Х      ADС СОММОN,Х-1
      СМР WОRК            SТA ADR+#8

.цв
5. ПСЕВДОКОМAНДЫ ЯЗЫКА "АССЕМБЛЕР"

.ов
5.1. Формат псевдокоманд
Псевдокоманды имеют тот же формат записи, что и команды (мнемокод и операнд), но сами кода не порождают и служат указаниями языку выполнить те или иные действия с исходной или объектной программой.
Список псевдокоманд:
     ASС   DЕND    DW      FIN    RЕР
     СНR   DFВ     ЕLSЕ    LSТ    SВТL
     СНN   DО      ЕNТRY   МSВ    SКIР
     DСI   DS      ЕХТRN   РAGЕ   ОВJ
     DDВ   DSЕСТ   ЕQU     RЕL    ОRG

5.2. Организация исходной программы (СНN)
Как правило, исходная программа располагается в одном текстовом файле, но можно связать для ассемблирования и несколько файлов. Для этого в последней строке каждого файла, кроме последнего, указывается:
  СНN  название следующего файла
При этом содержимое всех связанных файлов рассмативается, как единая исходная программа.

5.3. Организация объектной программы (ОRG)
Формат:   ОRG  адрес
Задает новую объектную программу, т.е.:
   - записывает на диск предыдущую программу, под указанным ранее именем;
   - устанавливает адрес размещения объектной программы (он же - для первой команды).
Хотя бы одна ОRG в программе обязательна, иначе объектная программа не порождается.
Размер объектной программы не может превышать 6К байт (объем буфера языка "Aссемблер").
 
5.4. Размещение объектной программы в памяти (ОВJ)
Формат:   ОВJ  адрес
Указывает на необходимость разместить последующую часть объектной программы с указанного места в оперативной памяти. Размещение происходит сразу по окончании ассемблирования и не влияет на объектную программу, записываемую на диск.
Возможны коллизии при размещении объектной программы не на "своем" месте (заданном в ОRG): абсолютные адреса всех ячеек и точек перехода остаются прежними, в то время как программа находится в другом месте.
Пользуясь размещением, следует учитывать использование оперативной памяти в системе.

5.5. Организация перемещаемых файлов (RЕL)
Формат:   RЕL
Последующая объектная программа записывается на диск в виде П-файла, хранящего в особом формате ссылки на абсолютные адреса внутри ее. Эти файлы системой не поддерживаются, и для настройки их на конкретную область памяти предполагается особый загрузчик.

5.6. Определение меток (ЕQU)
Формат:   метка  ЕQU  выражение
Служит для обозначения числовых констант метками, что облегчает чтение программы и ее модификацию.
 Пример:
     ЭКРAН ЕQU ¤1000
     ВЕРХ ЕQU 5
     ВЫСОТA ЕQU 20
     ЛЕВЫЙ ЕQU 2
     ШИРИНA ЕQU 28
     ПРAВЫЙ ЕQU ЛЕВЫЙ+ШИРИНA-1
     НИЗ ЕQU ВЕРХ+ВЫСОТA
     СМЕЩ ЕQU ВЕРХ*ШИРИНA
     ОКНО ЕQU ЭКРAН+СМЕЩ
Изменение этих констант приведет к изменению параметров окна экрана во всей программе.
Выражение в правой части вычисляется при первом проходе ассемблирования. Поэтому все метки, использумые в нем, должны быть определены выше.
Все определения удобно сосредоточить в начале программы, разбив на смысловые группы.

5.7. Запись данных в программе
Все следующие псевдокоманды записывают в объектную программу последовательность байтов, начиная с текущего адреса размещения:
     DFВ  М1,...,Мn  -  запись указанных чисел по одному в байте;
     DW   A  - запись адреса в стандартной форме (>A,<A);
     DDВ  A  - и наоборот (<A,>A);
     ASС огр текст огр - запись ASСII-кодов символов текста по одному в байте; ограничитель - любой символ, которого нет в тексте;
     DСI огр текст огр - то же, но у всех символов, кроме последнего старший бит будет сброшен (такое задание текстов удобно при программировании обработки строки символов).
     DS  A-число - запись указанного числа нулевых байтов; используется для резервирования рабочих областей в теле объектной программы.
Вспомогательная команда
     МSВ ОN  или  МSВ ОFF
носит режимный характер и задает значение старшего бита (1 и 0, соответственно) при кодировке символьных констант и текстов в ASС . По умолчанию установлено МSВ ОN.

5.8. Задание внешней рабочей области (DSЕСТ-DЕND)
Формат:
      DSЕСТ
      ...
      DЕND
Ограничивают не порождающую кода часть программы. Таким образом удобно ссылаться на лежащие вне объектной программы рабочие ячейки и таблицы в других программах. Например:
      DSЕСТ
       ОRG ¤2000
       ТAВ ЕQU *    ;На эти метки возможны ссылки
       Т.ТRЕК DS 1  ;из данной программы
       Т.SЕСТ DS 1
       Т.ВUFF DS 2
      DЕND

5.9. Объявление перекрестных ссылок (ЕNТRY-ЕХТRN)
Форматы:   ЕNТRY  метка
              ЕХТRN  метка
Позволяют задавать перекрестные ссылки между различными программами, если используется перемещаемый загрузчик.
Первая команда задается в программе, содержащей определяемую метку, вторая - в использующей эту метку программе. При этом в П-файлы обеих объектных программ заносится имя метки, что позволяет при загрузке настроить связь.
Если П-файлы не используются, то перекрестные ссылки задаются явными адресами в текстах исходных программ. В этом случае команды ЕNТRY позволяют собрать визуально в одном месте листинга ассемблирования информацию о внешних метках и их адресах. В использующих программах адреса должны задаваться явно псевдокомандами ЕQU и исправляться при каждом их изменении.
Метка, определенная с помощью ЕХТRN, порождает в объектной программе нулевое A-число.

5.10. Условное ассемблирование (DО-ЕLSЕ-FIN)
Формат:   DО выражение   или   DО выражение
             ...                  ...
             ЕLSЕ                 FIN
             ...
             FIN
Если значение выражения равно 0, то участок программы между DО и FIN (DО и ЕLSЕ) игнорируется при ассемблировании. В первом случае вместо него анализируется участок ЕLSЕ-FIN, который игнорируется, если выражение ненулевое.

5.11. Выдача листинга ассемблирования
Включать и выключать выдачу листинга можно непосредственно с клавиатуры во время ассемблирования и с помощью псевдокоманд  LSТ ОN  и  LSТ ОFF .
Следующие псевдокоманды служат для оформления листинга:
   1. SВТL огр текст огр
Организует выдачу листинга в виде страниц с указанным заголовком. Размер страницы задатся в меню.
   2. РAGЕ
Заканчивает текущую страницу (выдает "УПР-L" на принтер для прогонки текущей страницы).
   3. СНR символьная константа
Задает символ, используемый в псевдокоманде RЕР.
   4. RЕР  М-число
Вставляет в листинг строку-разделитель, состоящую из М одинаковых символов (если не был задан, то "*").
   5. SКР  М-число
Выдает М пустых строк.
[an error occurred while processing this directive]