ЗНАЕТЕ ЛИ ВЫ?

Основные директивы и команды препроцессора ассемблера



Директивы

Основные директивы уже упоминались в предыдущих разделах. Перечислим их еще раз.

Директива end

Директива не имеет операндов и используется для обозначения конца программы. При ее отсутствии транслятор выдает сообщение об ошибке. Пример ее использование имеется в приведенных текстах программ.

Директивы equ, teq

Директивы используются для присваивания значений символам. Они имеют следующий формат

<символ>] equ <выражение> [; комментарий]

<символ>] teq <выражение> [; комментарий]

Пример

Z equ 5 ; символу z присваивается значение 5

t equ Z+3 ; символу t присваивается значение 8

t1 teq t+t/z ; символу t1 присваивается значение 9

В соответствии с данными директивами символу, стоящему в поле метки (в первой позиции) присваивается результат вычисления выражения, стоящего в поле операнда. Если в выражении используется символ, то он должен быть определен ранее (выше в программе). Разница между директивами equ, teq состоит в том, что символ, определенный директивой teq далее в программе может быть переопределен с помощью этой же директивы.

Директивы extern, public

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

extern <список символов>

public <список символов>

Пример

extern z

public k,x1,I

Директива extern z означает, что символ z не определяется в данном программном модуле, а будет определен в другом программном модуле, с которым данный будет объединен при компоновке. Символ, объявленный директивой extern, может быть также определен в командном файле компоновки. Транслятор отложит его вычисление до компоновки.

Директива public k,x1,i означает, что символы k,x1,i , значение которых определяется в данном программном модуле, будут также использованы в других. Транслятор запомнит их значение в выходном объектном модуле для использования при компоновке (в противном случае после присваивания значений транслятор “забывает” символы).

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

extern z

public k,x1,i

x equ 1+2

t equ Z+3

k equ +7

I equ -7

x1 equ 10

x5 equ t+1

Y equ x1*t

X2 equ z*t

X3 equ 5/z

Как видно из примера программы, неопределенные символы могут использоваться в выражениях, однако последнее выражение 5/z вызовет сообщение об ошибке при трансляции (деление на 0), так как в общем случае z может быть равно 0. Поэтому подобные выражения недопустимы.

Директивы db, dw, ds

Директивы используются для резервирования ячеек памяти и размещения в памяти констант и начальных значений переменных. Формат директив:

[метка] db <список выражений>

[метка] dw <список выражений>

[метка] ds <список выражений>

Примеры

M1 db 3,4,5,6

M2 db 3*4,5/2

В соответствии с данными директивами при загрузке программы в память в отдельные ее ячейки (в соответствии с размещением директивы в тексте программы) будут записаны величины 3, 4, 5, 6, результаты вычисления выражений 3*4 и 5/2. Метки в этих директивах являются необязательными элементами. Если они присутствуют, то они являются символическими адресами ячеек, в которых размещены константы. Так М1 будет являться адресом ячейки, где расположена константа 3, а М2 адресом ячейки с константой 3*4.

Директива db размещает в ячейках значения длиной в байт. Директива dw размещает в двух последовательных ячейках слова длиной в 2байта.

Пример

М3 dw 0AC5Eh

В соответствии с данной директивой в ячейку с символическим адресом М3будет записано число 0Ach, а в следующую - число 5Eh.

Директива ds резервирует (оставляет пустыми) в памяти для последующего использования при выполнении программы заданное число ячеек.

М3 ds 6

В соответствии с данной директивой в памяти будет зарезервировано 6 ячеек памяти. Первой пустой ячейке будет присвоен символический адрес М3. место резервирования ячеек определяется расположением директивы в программе.

Директива include

Директива используется для включения одного файла в другой. Формат директивы

include <имя файла>

Следует отметить следующее. Включаемый файл не должен содержать в конце директиву end, так как после выполнения директивы include в середине основного окажется директива end, а транслятор ничего после нее воспринимать не будет. Включаемый файл должен находится в рабочей директории. Директиву include нельзя использовать для включения в файл макроопределений, для этого используется команда препроцессора %include.

Команды препроцессора

Команды препроцессора были рассмотрены в подразделе “Средства макроассемблера”. Напомним их назначение.

Команда %includeиспользуется для включения в файл библиотеки макрорасширений.

Команды %macroи%endm определяют начало и конец макроопределения.





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.190.82 (0.008 с.)