Node:Директивы MIXAL, Next:, Previous:Базовая структура, Up:MIXAL



Директивы MIXAL

Инструкция MIXAL может быть либо одной из машинных инструкций MIX (see Набор инструкций MIX), либо одной из следующих псевдоинструкций ассемблера:

ORIG
Устанавливает значение адреса памяти, по которому будет расположена после компиляции следующая инструкция.
EQU
Используется для определения значения символа, например, SYM  EQU  2*200/3.
CON
Значение заданного выражения непосредственно копируется в память по текущему адресу.
ALF
Принимает в качестве операнда пять литер, составляющих пять байтов слова, которое непосредственно копирует в память по текущему адресу.
END
Обозначает конец программы. Операнд этой инструкции содержит адрес, с которого начинается выполнение программы.

Операндом ORIG, EQU, CON и END может быть любое выражение, задающее слово MIX-константу, т.е. либо простое выражение MIXAL (состоящее из чисел, символов и бинарных операций, see Выражения), либо w-выражение (see W-выражения).

Любая программа на MIXAL должна содержать директиву END с двоякой целью: во-первых, она обозначает точку прекращения работы ассемблера, и во-вторых, её (обязательный) операнд указывает начальный адрес скомпилированной программы (адрес, по которому виртуальная машина MIX должна начать разбор инструкций после загрузки программы). Также является обычной практикой (хотя и не обязательно) включать в программу по крайней мере одну директиву ORIG, чтобы обозначить начальное значение счётчика положения ассемблера (помните, что он содержит адрес, связанные с каждой скомпилированной инструкцией MIX). Таким образом, минимальной программой на MIXAL будет:

          ORIG  2000    установить начальный адрес компиляции
          NOP           эта инструкция будет загружена по адресу 2000
          HLT           а эта по адресу 2001
          END   2000    конец программы, начало по адресу 2000
эта строка не анализируется ассемблером

Ассемблер создаст две двоичные инструкции (NOP (+ 00 00 00 00 00) и HLT (+ 00 00 02 05)), которые будут загружены по адресам 2000 и 2001. Выполнение программы начнётся с адреса 2000. Каждая программа на MIXAL должна также содержать инструкцию HLT, которая означает конец выполнения программы (но не компиляции программы).

Директива EQU позволяет определять символические имена заданных значений. Например, мы можем переписать вышеприведённую программу следующим образом:

START     EQU   2000
          ORIG  START
          NOP
          HLT
          END   START

что даст тот же самый скомпилированный код. Символические константы (или, коротко, символы) могут определяться неявно, если их поместить в поле LABEL инструкции MIXAL. В этом случае перед компиляцией строки ассемблер присвоит символу значение счётчика положения. Поэтому третий способ записи нашей тривиальной программы:

          ORIG  2000
START     NOP
          HLT
          END   START

Директива CON позволяет непосредственно задавать содержимое, находящееся в памяти по адресу, указанному счётчиком положения. Например, если ассемблер встретит следующий участок кода:

          ORIG  1150
          CON   -1823473

он поместит в ячейку памяти 1150 значение - 00 06 61 11 49 (соответствующее десятичному значению -1823473).

Наконец, директива ALF позволяет задавать содержимое памяти как набор пяти литер (в кавычках), которые транслируются ассемблером в соответствующие значения байтов, создавая, таким образом, двоичное слово, размещаемое в соответствующей ячейке памяти. Эта директива полезна, если вам нужно поместить по адресу памяти сообщения для печати, как в следующем примере:

          OUT  MSG       MSG здесь ещё не определено (ссылка вперёд)
MSG       ALF  "THIS "   MSG определяется здесь
          ALF  "IS A "
          ALF  "MESSA"
          ALF  "GE.  "

Этот участок кода также показывает использование ссылок вперёд, что означает использование символа (в этом примере MSG) до его реального определения. Ассемблер MIXAL может обрабатывать ссылки вперёд с некоторыми ограничениями, описанными в следующем разделе (see Выражения).

Любая строка, начинающаяся со звёздочки, считается комментарием и игнорируется ассемблером.

* Это комментарий: эта строка игнорируется.
    * Это ошибка: * должна быть в первой колонке.

Как показано в предыдущем разделе, комментарии могут также быть расположены после поля OPERAND инструкции, отделённые от него пробелами:

LABEL     LDA   100  Это также комментарий