Node:Директивы MIXAL, Next:Выражения, Previous:Базовая структура, Up: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 Это также комментарий