Предыдущий раздел | ОСНОВНЫЕ ОПЕРАТОРЫ АССЕМБЛЕРА | Следующий раздел |
Вспомогательные псевдооператоры – дополняют основные операторы (исполнительные и псевдооператоры) с целью уточнения их операндов. Примером такого оператора является рассмотренный ранее псевдооператор short. Рассмотрим некоторые другие вспомогательные операторы.
1) seg – вычисляет значение адреса-сегмента – номера параграфа, образующего совместно со смещением логический адрес программного объекта, заданного в ассемблерной программе своей меткой. Например, операторы
mov ax, seg Table
mov bx, Table
загрузят номер параграфа и смещение адреса переменной Table в регистры AX и BX соответственно.
Оператор seg нельзя использовать в com-программах.
2) $ – вычисляет адрес-смещение той точки программы, где находится данный оператор $. Например, при трансляции операторов
Mess db ‘Hello’
Messl equ $-Mess
транслятор определит число символов в строке Mess и присвоит его константе Messl.
3) byte, word, dword – псевдооператоры, уточняющие длины операндов. Если оператор имеет два операнда, то достаточно уточнить длину лишь одного из них, так как длина другого операнда такая же.
Например, с помощью этого оператора можно получить доступ к отдельным байтам в таблице слов. Пусть таблица определена следующим образом:
Table times 100 dw 0
Тогда оператор
First_byte equ byte Table
присвоит имя First_byte первому байту таблицы Table. Можно присвоить имя любому другому байту этой таблицы, например, оператор:
Fifth_byte equ First_byte+4
присвоит имя Fifth_byte пятому байту таблицы Table.
Если один из операндов – регистр, то применение псевдооператора, уточняющего длину операндов, излишне, так как по имени регистра транслятор «знает» его длину.
short,near, far – псевдооператоры, задающие тип метки перехода.
Метка типа short (короткая) присваивается тому исполнительному оператору, переходы на который возможны только из этого же сегмента ОП и не превышают расстояние в 128 байт. Задание данного типа метки производится по умолчанию.
Метка типа near (ближняя) присваивается тому исполнительному оператору, переходы на который возможны только из этого же сегмента ОП. Псевдооператор near записывается между оператором jmp и меткой перехода. Пример:
jmp near Label.
Метка типа far (дальняя) присваивается тому исполнительному оператору, переходы на который возможны из любых сегментов ОП. Нетрудно заменить тип метки short (или near) на тип far и наоборот. Например, если программа содержит оператор
Start: mov cx, 100
то метка Start имеет тип short или near, что позволяет ссылаться на нее командам перехода, находящимся в том же сегменте памяти. Для того чтобы на это же место программы могли делать переходы команды jmp, расположенные в других сегментах ОП, необходимо задать в программе альтернативную метку типа far:
Far_start equ far Start
Ранее были записаны прмеры использования оператора far для реализации межсегментных безусловных переходов и для межсегментных вызовов процедур.
Предыдущий раздел | В начало | Следующий раздел |