Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 184

Unknown Author

Примеры:

LENGTH А = 100 LENGTH В ~ 100 LENGTH С = 1 LENGTH D = 1

N EQU 1011b

A DB 100 DUP(?)

В DW 100 DUP (1,5 DUP(0)) С DD 20,30,66 DUP(0)

D DB 9 abed'

Оператор LENGTH имеет смысл, только если в директиве, описывающей имя переменной, указан один операнд и им является конструкция вида k DUP(x); в этом случае оператор сообщает количество (к) элементов, описанных по этой директиве. В остальных случаях смысл оператора малопонятен.

SIZE <имя переменной>

И этот оператор относится к константным выражениям, а его операнд должен быть таким же, как и в операторе LENGTH. Значение оператора SIZE вычисляется по следующей формуле:

SIZE V = (ТУРЕ V) * (LENGTH V)

Оператор SIZE имеет смысл, только если в директиве, описывающей имя переменной, указан один операнд и им является конструкция вида k DUP(x); в этом случае оператор указывает количество байтов, занятых всеми элементами, описанных по этой директиве. В остальных случаях оператор мало о чем говорит.

.ТУРЕ <имя>

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

характеристики имени (нумерация битов ведется справа налево от 0 до 7, значение 1 у бита означает наличие характеристики):

номер бита    характеристика

0    имя описано как метка или имя процедуры

1    имя    описано как переменная

5    имя    описано (так или иначе) в    программе

7_имя    описано (в EXTRN) как внешнее (остальные биты равны 0).

Для имен регистров, констант, сегментов, групп, макросов, типов записей и структур, полей записей и структур оператор выдает значение 20h. Нулевое значение оператора означает, что имя никак не описано в программе либо является названием команды, директивы или оператора, либо является именем, которому по директиве EQU поставлено в соответствие нечисловое значение.

Оператор .TYPE обычно используется в макроопределениях для проверки имен, заданных как фактические параметры.

THIS <тип>

Этот оператор относится к адресным выражениям. Его значение - адрес, который равен текущему значению счетчика размещения ($) и которому предписывается указанный тип. (В качестве операнда могут использоваться служебные слова BYTE, WORD, DWORD, NEAR, FAR или соответствующие им числовые значения).

Оператор THIS обычно используется в директиве EQU для порождения имени, адресующего текущую точку программы и имеющую заданный тип (в подобных целях используется и директива LABEL - см. разд. 14.6). Например:

Л EQU THIS WORD В DB 20 DUP (?) LI EQU THIS FAR L2: MOV AX,0

;A и В ссылаются на один и тот же массив, ; но А - массив из слов, а В - из байтов ;Ы и L2 метят одну и ту же команду,

; но L1 - дальняя метка, a L2 - близкая

HIGH <константное выражение^

LOW <константное выражение>

Это константные операторы. Их результат - старший (левый) байт (для HIGH) или младший байт (для LOW) значения операнда. Например: