Выражения в ассемблере это

Обновлено: 04.11.2024

Связь с администрацией сайта:

Среди толпы я одинок

  • Вы здесь: > > > >
  • Глава 6 - ассемблер(выражения, приоритеты и ссылки вперёд)

Глава 6 - ассемблер(выражения, приоритеты и ссылки вперёд)

Глава 6 - ассемблер(выражения, приоритеты и ссылки вперёд)

  • Written by Administrator
  • Tagged under АссемблерAssemblerСамоучитель по ассемблеру
  • Print

Выражения

В языке ассемблера выражения могут быть использованы в инструкциях или директивах и состоят из операндов и операторов. Операнды представляют значения, регистры или адреса ячеек памяти, используемых определенным образом по контексту программы. Операторы выполняют арифметические, логические, побитовые и другие операции над операндами выражений. Ниже даны описания наиболее часто используемых в выражениях операторов.

Арифметические операторы.
выражение_1 * выражение_2
выражение_1 / выражение_2
выражение_1 MOD выражение_2
выражение_1 + выражение_2
выражение_1 – выражение_2
+ выражение
– выражение

Эти операторы обеспечивают выполнение основных арифметических действий (здесь MOD - остаток от деления выражения_1 на выражение_2, а знаком / обозначается деление нацело). Результатом арифметического оператора является абсолютное значение.

Операторы сдвига .
выражение SHR счетчик
выражение SHL счетчик

Операторы SHR и SHL сдвигают значение выражения соответственно вправо и влево на число разрядов, определяемое счетчиком. Биты, выдвигаемые за пределы выражения, теряются. Замечание: не следует путать операторы SHR и SHL с одноименными инструкциями процессора.

Операторы отношений.
выражение_1 EQ выражение_2
выражение_1 NE выражение_2
выражение_1 LT выражение_2
выражение_1 LE выражение_2
выражение_1 GT выражение_2
выражение_1 GE выражение_2

Мнемонические коды отношений расшифровываются следующим образом:
EQ – равно;
NE – не равно;
LT – меньше;
LE – меньше или равно;
GT – больше;
GE – больше или равно.

Операторы отношений формируют значение 0FFFFh при выполнении условия и 0000h в противном случае. Выражения должны иметь абсолютные значения. Операторы отношений обычно используются в директивах условного ассемблирования и инструкциях условного перехода.

Операции с битами.
NOT выражение
выражение_1 AND выражение-2
выражение_1 OR выражение-2
выражение_1 XOR выражение-2
Мнемоники операций расшифровываются следующим образом:
NOT – инверсия;
AND – логическое И;
OR – логическое ИЛИ;
XOR – исключающее логическое ИЛИ.

Операции выполняются над каждыми соответствующими битами выражений. Выражения должны иметь абсолютные значения.

Оператор индекса.
[[выражение_1]] [выражение_2]

Оператор индекса [] складывает указанные выражения подобно тому, как это делает оператор +, с той разницей, что первое выражение необязательно, при его отсутствии предполагается 0 (двойные квадратные скобки указывают н а то, что операнд не обязателен).

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

При помощи оператора PTR переменная или метка, задаваемая выражением, может трактоваться как переменная или метка указанного типа. Тип может быть задан одним из следующих имен или значений:
Таблица 4.1. Типы оператора PTR

Операторы HIGH и LOW
HIGH выражение
LOW выражение
Операторы HIGH и LOW вычисляют соответственно старшие и младшие 8 битов значения выражения. Выражение может иметь любое значение.

Оператор SEG
SEG выражение

Этот оператор вычисляет значение атрибута СЕГМЕНТ выражения. Выражение может быть меткой, переменной, именем сегмента, именем группы или другим символом.

Оператор OFFSET
OFFSET выражение

Этот оператор вычисляет значение атрибута СМЕЩЕНИЕ выражения. Выражение может быть меткой, переменной, именем сегмента или другим символом. Для имени сегмента вычисляется смещение от начала этого сегмента до последнего сгенерированного в этом сегменте байта.

Оператор SIZE
SIZE переменная
Оператор SIZE определяет число байтов памяти, выделенных переменной.

Приоритеты операций

При вычислении значения выражения операции выполняются в соответствии со следующим списком приоритетов (в порядке убывания):
1) LENGTH, SIZE, WIDTH, MASK, (), [], <>.
2) Оператор имени поля структуры (.).
3) Оператор переключения сегмента (:).
4) PTR, OFFSET, SEG, TYPE, THIS.
5) HIGH, LOW.
6) Унарные + и -.
7) *, /, MOD, SHR, SHL.
8) Бинарные + и -.
9) EQ, NE, LT, LE, GT, GE.
10) NOT.
11) AND.
12) OR, XOR.
13) SHORT, .TYPE.
(Некоторые операции не были рассмотрены выше ввиду довольно редкого их использования)

Ссылки вперёд

Хотя ассемблер и допускает ссылки вперед (т.е. к еще необъявленным объектам программы), такие ссылки могут при неправильном использовании приводить к ошибкам. Пример ссылки вперед:
JMP MET
.
MET: .

1) Если ссылка вперед является переменной, вычисляемой относительно регистров ES, SS или CS, следует использовать оператор переключения сегмента. Если он не использован, делается попытка вычисления адреса относительно регистра DS.

2) Если ссылка вперед является меткой инструкции в команде JMP и отстоит не далее, чем на 128 байтов, можно использовать оператор SHORT. Если этого не делать, метке будет присвоен тип FAR, что не вызовет ошибки, но на 2-м проходе ассемблер для сокращения размера содержащей ссылку инструкции вынужден будет вставить дополнительную и ненужную инструкцию NOP.

Читайте также: