Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Описание языка Макроассемблера для УУМ-32




Основой языка Макроассемблера для УУМ-32 является язык Ассемблера для УУМ-32, поэтому необходимо сперва рассмотреть его.

 

1) Формат строк программы на Ассемблере для УУМ-32

Программа, написанная на языке Ассемблера для УУМ-32, представляет собой последовательность строк, каждая из которых имеет следующий формат:

[МЕТКА:] [ДИРЕКТИВА|[+]КОМАНДА [ОПЕРАНДЫ]] [;КООМЕНТАРИЙ]

Регистр символов в исходном коде роли не играет, поэтому пользователь имеет возможность оформлять исходный код так, как считает нужным.

Рассмотрим каждое поле строки в отдельности.

· Поле метки

Метки предназначены для символического представления машинных адресов в программе - в процессе трансляции исходного кода программы каждой метке присваивается машинный адрес.

Имя метки – это идентификатор. К идентификатору предъявляется ряд требований:

§ Идентификатор должен начинаться с буквы или символа подчеркивания.

§ Начиная со второго символа в состав идентификатора помимо букв и символа подчеркивания могут входить цифры.

§ Максимальная длина идентификатора составляет 32 символа.

Метка является необязательным элементом строки программы.

 

· Поле команды или директивы

В этом поле пользователь указывает мнемоническое имя машинной команды либо директиву ассемблера.

Машинная команда может предваряться символом «+», что означает использование расширенного формата команды.

Список поддерживаемых команд и директив приведен в разделах «Система команд» и «Директивы ассемблера» данного документа.

Строка программы может не содержать команды или директивы.

· Поле операнда

Поле операнда предназначено для указания списка операндов для машинной команды или директивы ассемблера. Операндов может быть несколько, в этом случае они отделяются друг от друга запятыми. Тип операнда зависит от машинной команды или директивы, для которой он указывается. Рассмотрим наиболее часто используемые типы операндов:

§ Операнд - адрес

Данный операнд определяет некий машинный адрес. Операнд может задаваться меткой, числом или специальным символом “*”, который представляет текущее значение программного счетчика (PC).

Операнд данного типа можно использовать как для машинной команды, так и для директивы.

В случае использования операнда для машинной команды его можно задать с индексированием относительно регистра X (после операнда следует указать «[X]») или относительно базового регистра B (после операнда следует указать «[B]»).

Также операнд может быть предварен одним из следующих символов:

- # - для операнда, предваренного данным символом, будет использоваться непосредственная адресация

- @ - для операнда, предваренного данным символом, будет использоваться косвенная адресация

 

§ Операнд - регистр

Как следует из названия, операнд-регистр предназначен для определения имени регистра. В программе разрешено использовать только так называемые “программно доступные” регистры. Их список приведен в разделе «Программно доступные регистры». Регистровые операнды используют и с машинными командами, и с регистрами.

 

§ Операнд - натуральное число

Данный операнд может задаваться только натуральным числом. Операнды данного типа, как правило, используются для определения номеров или количества элементов как в машинных командах, так и в директивах.

 

§ Операнд – строковой литерал

Операнд этого типа задает строковую константу, которая представляет собой последовательность символов, заключенную в одинарные кавычки (символ “’”). Строковые литералы, в отличие от других операндов, используются только в директивах.

 

· Поле комментария

Комментарии предназначены для документирования исходного кода программы. В языке Ассемблера для УУМ-32 поддерживаются только строчные комментарии. Каждый комментарий начинается с символа “;”.

 

2) Система команд

На сегодняшний день система команд УУМ-32 состоит из 41 команды.

Таблица команд приведена в Приложении 1.

 

3) Директивы ассемблера

Все директивы ассемблера приведены в таблице 5.4.

Таблица 5.4. Директивы Ассемблера

Директива Описание
START Директива ассемблера, задающая точку начала главной секции. Синтаксис: label: START addr • label - имя главной секции • addr - стартовый адрес главной секции Пример: helloWorld: START 0
ALIAS Директива ассемблера, служащая для определения синонимов. Синтаксис: label: ALIAS alias • label - метка синонима • alias - имя существующей метки Пример: myArray: ALIAS array
BYTE Директива ассемблера, служащая для формирования константы или массива типа byte (байт). Синтаксис: [label:] BYTE N1[, N2, ...] • label - метка константы или массива • N1, N2, ... - список констант, возможно задание символьной строки, заключенной в одинарные кавычки Пример: text: BYTE 'Hello, World', 33, 0xD, 0xA
HALF Директива ассемблера, служащая для формирования константы или массива типа half (полуслово). Синтаксис: [label:] HALF N1[, N2, ...] • label - метка константы или массива • N1, N2, ... - список констант, возможно задание символьной строки, заключенной в одинарные кавычки Пример: text: HALF 1, 2, 0xFF
WORD Директива ассемблера, служащая для формирования константы или массива типа word (машинное слово). Синтаксис: [label:] WORD N1[, N2, ...] • label - метка константы или массива • N1, N2, ... - список констант или константных выражений Пример: array: WORD 555, -100, 0xFE, 0b1010, *-1, (x1+x2-x3)/2
CSECT Директива ассемблера, задающая точку начала новой управляющей секции. Синтаксис: label: CSECT addr • label - имя управляющей секции • addr - стартовый адрес управляющей секции Пример: subPrograms: CSECT 0
EQU Директива ассемблера, служащая для определения имен. Синтаксис: label: EQU expression • label - метка имени • expression - инициализирующее выражение Пример: arrayHalfSize: EQU (*-arrayBegin)/2
EXPORT Директива ассемблера, определяющая экспортируемые из текущей управляющей секции имена. Синтаксис: EXPORT name1[, name2, name3, ...] • name1, name2 - экспортируемые из текущей управляющей секции имена Пример: EXPORT array, text, maxValue
IMPORT Директива ассемблера, определяющая импортируемые в текущую управляющую секцию имена. Синтаксис: IMPORT name1[, name2, name3, ...] • name1, name2 - импортируемые в текущую управляющую секцию имена Пример: IMPORT array, text, maxValue
RESB Директива ассемблера, служащая для резервирования определенного числа байт (тип byte). Синтаксис: [label:] RESB n • label - метка резервируемого блока памяти • n - количество резервируемых элементов Пример: buffer: RESB 10
RESH Директива ассемблера, служащая для резервирования определенного числа полуслов (тип half). Синтаксис: [label:] RESH n • label - метка резервируемого блока памяти • n - количество резервируемых элементов Пример: buffer: RESH 10
RESW Директива ассемблера, служащая для резервирования определенного числа машинных слов (тип word). Синтаксис: [label:] RESW n • label - метка резервируемого блока памяти • n - количество резервируемых элементов Пример: buffer: RESW 10
END Директива ассемблера, задающая точку конца программы. Синтаксис: END Пример: END

 

4) Программно доступные регистры

В УУМ-32 имеется 16 программно доступных регистров. Информация о них приведена в таблице 5.5.

Таблица 5.5. Программно доступные регистры УУМ-32

Регистр Порядковый номер Назначение
A (accumulator) Операции ввода вывода
B (base) Базовый регистр для адресации с базированием
X (index) Индексный регистр для адресации с индексированием
SW (status word) Слово состояния процессора
R0 – R11 4 - 15 Регистры общего назначения

 


 

5) Язык Макроассемблера для УУМ-32

Язык Макроассемблера для УУМ-32 является расширением языка Ассемблера для УУМ-32. Он появился после добавления в компилятор модуля макропроцессора, что позволило использовать в исходном коде программы макросы.

Макрос (макроинструкция) – это удобное средство записи часто используемых групп предложений исходного языка программирования. Макросы в коде задаются при помощи макродиректив.

Начало макроопределения в макропроцессоре задается с помощью ключевого слова MACRO. Именем макроопределения служит текст в поле метки. В поле операнда находятся имена формальных параметров макроопределения (каждое имя начинается спецсимволом «&»). Имя и параметры макроса определяют шаблон или прототип используемой разработчиком макроинструкции. После директивы начала макроопределения следуют предложения, составляющие тело макроопределения. Признаком конца макроопределения является директива MEND.

Директивы Макроассемблера для УУМ-32 приведены в таблице 5.6.

Таблица 5.6. Директивы Макроассемблера для УУМ-32

Директива Описание
INCLUDE Служит для подключения макробиблиотек Синтаксис: INCLUDE “ИМЯ_ФАЙЛА_БИБЛИОТЕКИ” Пример: INCLUDE “macrolib.uum32mlb”
MACRO Определяет начало макроса Синтаксис: lablel: MACRO [&p1[, &p2 [,…]]] Пример: space: MACRO &count
MEND Определяет конец макроса Синтаксис: MEND

 

Пример кода программы для УУМ-32 приведен в Приложении 7.


Поделиться:

Дата добавления: 2015-08-05; просмотров: 106; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты