Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методички по ассемблеру / Методичка_часть2.doc
Скачиваний:
602
Добавлен:
02.05.2014
Размер:
545.28 Кб
Скачать

3.4. Выражения

Мы уже упоминали выражения при описании многих директив ассемблера. Выражение— это набор чисел, меток или строк, связанных друг с другом операторами. Например: 2 + 2 — выражение, состоящее из двух чисел (2 и 2) и оператора +. Каждое выражение имеет значение, которое определяется как результат действия операторов. Так, значение выражения 2 + 2 — число 4. Все выражения вычисляются в ходе ассемблирования программы, следовательно, в полученном коде используются только значения.

Оператор <>(угловые скобки). Часть выражения, заключенная в угловые скобки, не вычисляется, а применяется как строка символов, например:

message1 equ <foobar>

Оператор () (круглые скобки). Часть выражения, заключенная в круглые скобки, вычисляется в первую очередь.

mov al, 2*(3+4) ; mov al,14

Арифметические операторы: + (плюс), – (минус), * (умножение), / (целочисленное деление), MOD (остаток от деления). Они выполняют соответствующие арифметические действия.

mov al,90 mod 7 ; mov al,6

Кроме того, к арифметическим операторам относится унарный минус — минус, который ставят перед отрицательным числом.

Логические операторы: AND (И), NOT (НЕ), OR (ИЛИ), XOR (исключающее ИЛИ), SHL (сдвиг влево), SHR (сдвиг вправо). Эти операторы выполняют соответствующие логические действия.

mov ax,1234h AND 4321h ; mov ax,0220h

Операторы сравнения: EQ (равно), GE (больше или равно), GT (больше), LE (меньше или равно), LT (меньше), NE (не равно). Результат действия каждого из этих операторов — единица, если условие выполняется, и ноль — если не выполняется.

.errnz $ gt 65535 ; Если адрес больше 64 Кб – ошибка

Операторы адресации:

SEG выражение — сегментный адрес;

OFFSET выражение — смещение;

THIS тип — текущий адрес (MASM и TASM);

Тип PTR выражение — переопределение типа;

LARGE выражение — 32-битное смещение (TASM и WASM);

SMALL выражение — 16-битное смещение (TASM и WASM);

SHORT выражение — 8-битное смещение.

SEG и OFFSET возвращают соответствующую часть адреса своего аргумента:

mov dx, offset msg ; Занести в DX смещение переменной msg

THIS создает операнд, адресом которого является текущее значение счетчика:

mov al, this byte-1 ; Занести в AX последний байт кода

; предыдущей команды.

PTR создает аргумент, адресом которого является значение выражения, а тип указан явно:

mov dword ptr [si],0 ; Записать 4 байта нулей по адресу DS:SI

LARGE, SMALL и SHORT используются с командами передачи управления, если возникают двусмысленности при косвенных переходах:

jmp large dword ptr old_address

; Переменная old_address содержит 32-битное смещение

jmp small dword ptr old_address

; Переменная old_address содержит 16-битный сегментный адрес

; и 16-битное смещение.

jmp short short_label ; Метка short_label находится

; ближе, чем +128/-127 байт от этой команды, так что можно

; использовать короткую форму команды JMP.

Другие операторы:

. (точка) — ссылка на элемент структуры;

: (двоеточие) — переопределение сегмента;

[] (прямые скобки) — косвенная адресация;

? — неинициализированное значение;

число DUP (значение) — повторяющееся значение.

Эти пять операторов описаны ранее, когда говорилось о структурах данных, методах адресации и псевдокомандах определения данных.

LENGTH метка – число элементов данных

table dw 0,1,2,3,4,5,6,7 ; Определить таблицу из 8 слов.

table_count = length table ; table_count = 8

SIZE метка – размер данных

table_size = size table ; table_size = 16