 |
і выражение_1 GT выражение_2 і -1, если выражение_1 больше вы- і
і і ражения_2, в противном случае і
і і 0. і
і і і
і выражение_1 GE выражение_2 і -1, если выражение_1 больше или і
і і равно выражению_2, в противном і
і і случае 0. і
і і і
і выражение_1 LT выражение_2 і -1, если выражение_1 меньше вы- і
і і ражения_2, в противном случае і
і і 0. і
і і і
і выражение_1 LE выражение_2 і -1, если выражение_1 меньше или і
і і равно выражения_2, в противном і
і і случае 0. і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Операции EQ или NE интерпретируют выражения, как числа без
знака. Например, -1 EQ 0ffffh имеет значение -1 (если только вы
не выбрали процессор 80386 или не используете режим Ideal; в пос-
леднем случае значение -1 имеет выражение -1 EQ 0ffffffffh).
Операции Gt, GE, LT и LE интерпретируют выражения, как числа
со знаком. Например, 1 GE -1 имеет значение -1, но 1 GE 0ffffh
имеет значение 0.
Турбо Ассемблер 3.0/tasm/#1-2 = 110 =
Задание адресного подтипа выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо Ассемблер обеспечивает операции, которые позволяют вам
изменить или переопределить тип выражений. Эти операции перечис-
лены в следующей таблице:
Операции переопределения типа Таблица 5.19
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Выражение іЗначение і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
івыражение_1 PTR выражение_2іПреобразует выражение_2 к типу, оп-і
і іределяемому выражением_1. При этомі
і і0=UNKNOWN, 1=BYTE, 2=WORD, 4=DWORD,і
і і6=PWORD, 8=QWORD, 10=TBYTE, 0ffffh=і
і іNEAR, 0fffeh=FAR, все про-і
і ічие=UNKNOWN (только для режимаі
і іMASM). і
і і і
ітип PTR выражение_2 іПреобразует выражение к заданномуі
і или тип выражение іадресному подтипу (только для режи-і
і іма Ideal). і
і і і
ітип LOW выражение іПреобразует выражение к заданномуі
і іадресному подтипу. Описанный типі
і ідолжен быть меньше по размеру, чемі
і ітип выражения ( только для режимаі
і іIdeal). і
і і і
ітип HIGH выражение іПреобразует выражение к заданномуі
і іадресному подтипу. Описанный типі
і ідолжен быть меньше по размеру, чемі
і ітип выражения. Возвращаемый адресі
і інастраивается на старшую часть объ-і
і іекта, описанного адресным выражени-і
і іем ( только для режима Ideal). і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Приведем некоторые примеры:
IDEAL
big DD 12345678h
MOV ax,[WORD big] ; ax = 5678h
MOV al,[BYTE PTR big] ; al = 78h
MOV ax,[WORD HIGH big] ; ax = 1234h
MOV ax,[WORD LOW big] ; ax = 5678h
MOV al,[BYTE LOW WORD HIGH big] ; al = третьему байту big
; = 34h
MASM:
MOV ax,2 PTR big ; ax = 5678h
MOV ax,WORD PTR big ; ax = 5678h (WORD имеет
; значение 2)
Турбо Ассемблер 3.0/tasm/#1-2 = 111 =
Получение типа выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В режиме MASM вы можете получить числовое значение типа вы-
ражения путем использования операции TYPE. (В режиме MASM этого
сделать нельзя, поскольку типы не описываются числовыми значения-
ми.) Операция TYPE имеет следующий синтаксис:
TYPE выражение
Операция TYPE возвращает размер объекта, описанный адресным
выражением:
Значение TYPE Таблица 5.20
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Выражение і Значение і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і byte і 1 і
і word і 2 і
і dword і 4 і
і pword і 6 і
і qword і 8 і
і tbyte і 10 і
і short і 0ffffh і
і near і 0ffffh і
і far і 0fffeh і
і структура/объединение і Размер экземпляра структуры или і
і і объединения. і
і таблица і Размер экземпляра таблицы. і
АДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Приведем пример:
avar = 5
darray dd 10 dup (1)
x struc
dw ?
dt ?
ends
fp label far
tavar = TYPE avar ; = 0
tbvar = TYPE davar ; = 4
tx = TYPE x ; = 12
tfp = TYPE fp ; = 0FFFFh
Турбо Ассемблер 3.0/tasm/#1-2 = 112 =
Переопределение сегментной части адресного выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Адресные выражения имеют значения, состоящие из сегмента и
смещения. Вы можете задавать сегмент явно в виде сегментного ре-
гистра. (Если вы задаете его, как значение группы, Турбо Ассемб-
лер определяет, какой сегментный регистр нужно использовать,
на основе предполагаемых значение сегментных регистров
(ASSUME)). Для изменения сегментной части адресного выражения ис-
пользуется следующий синтаксис:
выражение_1 : выражение_2
Данная операция возвращает адресное выражение, использующее
в качестве смещения выражение_2, а в качестве сегмента или значе-
ния группы - выражение_1. Например:
VarPtr dd dgroup:memvar ; dgrout - это группа
mov cl,es[si+4] ; переопределение сегмента
: ; ES
Получение сегмента и смещения адресного выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Для получения сегмента и смещения адресного выражения вы мо-
жете использовать операции SEG и OFFSET. Операция SEG возвращает
сегментную часть адресного выражения. Она имеет следующий син-
таксис:
SEG выражение
Приведем пример исходного кода:
DATASEG
temp DW 0
CODESEG
mov ax,SEG temp
mov ds,ax
ASSUME ds:SEG temp
Операция OFFSET возвращает смещение адресного выражения и
имеет следующий синтаксис:
OFFSET выражение
Заметим, что когда вы используете операцию смещения, убеди-
тесь, что выражение ссылается на корректный сегмент. Например,
если вы используете режим MASM и не используете упрощенные дирек-
тивы, выражение:
OFFSET BUFFER ; буфер - это адрес в памяти
что не тоже самое, что:
Турбо Ассемблер 3.0/tasm/#1-2 = 113 =
OFFSET DGROUP:BUFFER ; Dgroup - это группа, содержащая
; сегмент, который содержит BUFFER
(если содержащий BUFFER сегмент не является первым сегментом
группы).
Если вы не переопределяете сегмент с помощью операции :, в
режиме Ideal адреса автоматически вычисляются относительно любой
|