Скачиваний:
20
Добавлен:
01.05.2014
Размер:
1.7 Mб
Скачать

1.9.Формат оператора

Оператор исходной программы состоит из четырех полей. Каждое поле не обязательно ([ ]).

Табл.2.8

Поле метки

Поле операции

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

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

[Label:]

|Name][Operation]

[Operand,... ]

[;Comment] <CR,LF>

LOAD­_Reg_A:

LD

Reg_A,#23

;Reg_A=23

Поле метки: содержит или метку (Label:) или имя (Name). Метка может предшествовать машинным командам, макровызовам, директивам резервирования памяти, директивам определения кода и пустым операторам. Значение метки, предворяющей команду, соответствует значению программного счётчика этой команды. Имя используется для присвоения ряду атрибутов имени (макро-определения , директива EQU)

Поле директивы: содержит мнемонику машинной команды, операции или имя пользовательского макро. Содержимое поля операции определяет выполняемую команду

(JUMP,ADD,LD...)

Поле операнда: содержимое и синтаксис зависят от операции в операторе. Операндами могут быть идентификаторы, выражения, числа, выражения, определяющие способ адресации. В одной команде допускается до 3 операндов.

Поле коментария: позволяет описывать действие каждого оператора. Поле начинается с “;”. Текст, помещенный после “;” не ассемблируется.

Примечания:

1. Все параметры в операторе должны размещаться на одной строке.

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

3. Количество пробелов между полями операторов не ограничено.

4. Пустая строка ( то есть, содержащая только пробелы комментарии, или пустой оператор ) может быть расположена в любом месте программы.

5. Строка, содержащая только метку, может быть расположена только внутри сегментов. То есть, только после первой директивы xSEG.

1.10. Сегменты

Сегмент - фрагмент памяти, определенный внутри модуля или раздела памяти для использования программами пользователя. Каждый сегмент имеет определенную функцию.

ASM96 имеет 5 типов сегментов:

- не перекрывающийся сегмент регистров (RSEG);

- перекрывающийся сегмент регистров (OSEG);

- сегмент данных (DSEG);

- сегмент стека (SSEG);

- сегмент кода (CSEG).

Директивы выбора сегмента позволяют вам завершить один сегмент (деактивировать сегмент) и проинициализировать новый сегмент (code, data, register ) как указано в директиве.

Программа продолжается в указанном сегменте до следующей директивы выбора сегмента или конца программы.

Синтаксис директив определения сегмента:

{RSEG|OSEG|DSEG|SSEG|CSEG} [REL|AT < базовый адрес>]

Сегмент регистров (перекрывающийся (OSEG) и не перекрывающийся (RSEG) ).

Сегмент регистров - часть памяти, распределяемой в разделе Register RAM микроконтроллера (30h-1FF). Переменные, принадлежащие сегменту регистров могут использоваться в программе как регистры. Внутри этого сегмента может быть определено только резервирование памяти. Если сегмент регистров обьявлен как перекрывающийся (директивой OSEG), перемещающая программа RL96 и компоновщик могут разрешить перекрывать этот сегмент другим, если они одновременно не активны. Неперекрывающиеся сегменты не могут быть перекрыты.

Сегмент данных (DSEG)

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

Сегмент стека (SSEG)

Сегмент стека - часть памяти, распределяемой в разделе оперативной памяти (RAM). Переменные, принадлежащие этому сегменту могут вызываться, используя адресацию через указатель вершины стека или любой другой регистр, используемый как указатель.Программа может содержать только один сегмент стека.

Сегмент кода (CSEG)

Сегмент кода - часть памяти, распределяемой в разделе ROM. Этот сегмент используется для сохранения констант программы и кода. Переменные, принадлежащие сегменту кода могут использоваться как операнды (используя прямой, непосредственной ,косвенный или индексный режимы адресации) или как адресаты команд вызова подпрограмм и перехода.

Неперекрывающиеся и перекрывающиеся сегменты

Вы можете определить сегмент или как неперекрывающийся или как перекрывающийся .

AT указывает, что сегмент неперекрывающийся и начинается с указанного базового адреса.

REL указывает, что сегмент является перекрывающимся. REL устанавливается по умолчанию, если ни REL , ни AT явно не указаны.

Когда Вы определяете сегмент как неперекрывающийся, создается новый сегмент. Когда Вы определяете сегмент как перекрывающийся, продолжается предыдущий перекрывающийся сегмент такого же типа типа (если такой уже существует). Таким образом, объектный модуль содержит не более одного перекрывающегося сегмента каждого типа и неограниченное количество неперекрывающихся сегментов.

Соседние файлы в папке Лабораторные работы по МПС