Предыдущий раздел ОСНОВНЫЕ ОПЕРАТОРЫ АССЕМБЛЕРА Следующий раздел

1.7. Вспомогательные псевдооператоры

Вспомогательные псевдооператоры – дополняют основные операторы (исполнительные и псевдооператоры) с целью уточнения их операндов. Примером такого оператора является рассмотренный ранее псевдооператор 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 для реализации межсегментных безусловных переходов и для межсегментных вызовов процедур.

 


Предыдущий раздел В начало Следующий раздел