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

01. См. Операторы size и type в этом разделе.

Оператор OFFSET

------------------

Оператор OFFSET возвращает относительный адрес переменной или метки

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

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

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

MOV DX,OFFSET TABLEA

устанавливает в регистре DX относительный адрес (смещение) поля TABLEA в

сегменте данных. (Заметим, что команда LEA выполняет аналогичное действие,

но без использования оператора OFFSET.)

Оператор PTR

---------------

Оператор PTR используется совместно с атрибутами типа BYTE, WORD или

DWORD для локальной отмены определенных типов (DB, DW или DD) или с

атрибутами NEAR или FAR для отмены значения дистанции по умолчанию. Формат

оператора следующий:

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

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

ссылку на переменную или константу. Приведем несколько примеров оператора

PTR:

FLDB DB 22H

DB 35H

FLDW DW 2672H ;0бьектный код 7226

MOV AН,BYTE PTR FLDW ;Пересылает 1-й байт (72)

ADD BL,BYTE PTR FLDW+1 ;Прибавляет 2-й байт (26)

MOV BYTE PTR FLDW,05 ;Пересылает 05 в 1-й байт

MOV AX,WORD PTR FLDB ;3аносит в АХ байты (2235)

CALL FAR PTR[BX] ;Длинный вызов процедуры

Директива LABEL, описанная в следующем разделе, выполняет функцию,

аналогичную оператору PTR.

Оператор 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

---------------

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

указанной переменной:

Определение Число байтов

DB 1

DW 2

DD 4

DQ 8

DT 10

STRUC Число байтов, определённых в STRUC

NEAR метка FFFF

FAR метка FFFE

Формат оператора TYPE:

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

Ниже приведены примеры, иллюстрирующие применение операторов TYPE, LENGTH

и SIZE:

FLDB DB ?

TABLEA DW 20 DUP(?) ;Определение 20 слов

...

MOV AX,TYPE FLDB ;AX = 0001

MOV AX,TYPE TABLEA ;AX = 0002

MOV CX,LENGTH TABLEA ;CX = 000A (10)

MOV DX,SIZE TABLEA ;DX = 0014 (20)

Так как область TABLEA определена как DW, то оператор TYPE возвращает