Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sysprog.docx
Скачиваний:
15
Добавлен:
24.08.2019
Размер:
641.97 Кб
Скачать

Add cx,counter

Во время выполнения программы процессор локализует указанную переменную в памяти путем объединения величины смещения к этой переменной с адресом сегмента данных.

При индексной адресации памяти ссылка на операнд определяется через базовый или индексный регистр, константы, переменные смещения и простые переменные. Квадратные скобки, определяющие операнды индексной адресации, действуют как знак плюс (+). Для индексном адресации памяти можно использовать:

u базовый регистр BX в виде [BX] вместе с сегментным регистром DS или базовый регистр BP в виде [BP] вместе с сегментным регистром SS. Например, с помощью команды: MOV DX,[BX] ;Базовый регистр в регистр DX пересылается элемент, взятый по относительному адресу в регистре BX и абсолютному адресу сегмента в регистре DS; — индексный регистр DI в виде [DI] или индексный регистр SI в виде [SI], оба вместе с сегментным регистром DS. Например, с помощью команды:

MOV AX,[SI] ;Индексный регистр в регистр AХ пересылается элемент, взятый по относительному адресу в регистре SI и абсолютному адресу сегмента в регистре DS;

u [константу], содержащую непосредственный номер или имя в квадратных скобках. Например, с помощью команды MOV [BX+SI+4],AX ;База+индекс+константа содержимое регистра АХ пересылается по адресу, который вычисляется, как сумма абсолютного адреса в регистре DS, относительного адреса в регистре BX, относительного адреса в регистре SI и константы 4;

u смещение (+ или -) совместно с индексным операндом. Существует небольшое различие при использовании константы и смещения. Например, с помощью команды: MOV DX,8[DI][4] ;Смещение+индекс+константа в регистр DX пересылается элемент, взятый по абсолютному адресу в регистре DS, смещению 8, относительному адресу в регистре DI и константе 4.

Эти операнды можно комбинировать в любой последовательности. Но нельзя использовать одновременно два базовых регистра [BX + BP] или два индексных регистра [DI + SI]. Обычно индексированные адреса используются для локализации элементов данных в таблицах.

Операторы языка ассемблер

Существует три типа ассемблерных операторов: операторы атрибута, операторы, возвращающие значение, и операторы, специфицирующие битовую строку.

Операторы, специфицирующие битовую строку, оператор MASK, счетчик сдвига и оператор WIDTH относятся к директиве RECORD.

Оператор LENGTH

Оператор LENGTH возвращает число элементов, определенных операндом DUP. Например, следующая команда MOV заносит в регистр DX значение 10:

TABLEA DW 10 DUP(?) ...

MOV DX,LENGTH TABLEA

В случае, если операнд DUP отсутствует, то оператор LENGTH возвращает значение 01.

 

Оператор OFFSET

Оператор OFFSET возвращает относительный адрес переменной или метки внутри сегмента данных или кода. Оператор имеет следующий формат:

OFFSET переменная или метка

Например, команда

MOV DX,OFFSET TABLEA

устанавливает в регистре DX относительный адрес (смещение) поля TABLEA в сегменте данных. (Заметим, что команда LEA выполняет аналогичное действие, но без использования оператора OFFSET.)

Оператор PTR

Оператор PTR используется совместно с атрибутами типа BYTE, WORD или DWORD для локальной отмены определенных типов (DB, DW или DD) или с атрибутами NEAR или FAR для отмены значения дистанции по умолчанию. Формат оператора следующий:

тип PTR выражение

В поле «тип» указывается новый атрибут, например BYTE. Выражение имеет ссылку на переменную или константу.

Оператор SEG

Оператор SEG возвращает адрес сегмента, в котором расположена указанная переменная или метка. Наиболее подходящим является использование этого оператора в программах, состоящих из нескольких отдельно ассемблируемых сегментов. Формат оператора:

SEG переменная или метка

Примеры применения оператора SEG в командах MOV:

MOV DX,SEG FLOW ;Адрес сегмента данных

MOV DX,SEG A20 ;Адрес сегмента кода

Оператор SHORT

Назначение оператора SHORT — модификация атрибута NEAR в команде JMP, если переход не превышает границы +127 и -128 байт:

JMP SHORT метка

В результате Ассемблер сокращает машинный код операнда от двух до одного байта. Эта возможность оказывается полезной для коротких переходов вперед, так как в этом случае Ассемблер не может сам определить расстояние до адреса перехода и резервирует два байта при отсутствии оператора SHORT.

 

Оператор SIZE

Оператор SIZE возвращает произведение длины LENGTH и типа TYPE и полезен только при ссылках на переменную с операндом DUP. Формат оператора:

SIZE переменная

Оператор TYPE

Оператор TYPE возвращает число байтов, соответствующее определению указанной переменной:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]