Унарная операция MASK
Унарная операция MASK создает маску на основе битового поля, в котором биты в возвращаемом значении устанавливаются в 1 и соответствуют битам в поле, которое представляет идентификатор. Возвращаемое значение зависит от типа идентификатора, что показано в приведенной ниже таблице. Заметим, что для всех других идентификаторов использовать операцию MASK не разрешается.
Значения, возвращаемые MASKВыражение | Значение |
---|
MASK имя_записи | Возвращает маску, в которой биты, резервированные для представления битовых полей в определении записи, равны 1, а остальные равны 0. | MASK имя_поля_записи | Возвращает маску, в которой биты, резервированные для поля в определении записи, равны 1, а остальные равны 0. | MASK имя_перечисления | Возвращает маску, в которой биты, резервированные для представления максимального значения в определении перечисления, равны 1, а остальные равны 0. |
Общие арифметические операции
Общие арифметические операции используются для работы с константами, значениями идентификаторов и значениями других общих арифметических операций. Общими операциями являются операции сложения, вычитания, умножения и деления. Другие операции специально предназначены для программирования на языке Ассемблера. В следующих разделах мы обсудим все эти темы.
Простые арифметические операции
Турбо Ассемблер поддерживает простые арифметические операции. которые приведены в следующей таблице:
Простые арифметические операцииВыражение | Значение |
---|
+выражение | Выражение. | -выражение | Отрицание выражения. | выражение_1 + выражение_2 | Выражение_1 плюс выражение_2. | выражение_1 - выражение_2 | Выражение_1 минус выражение_2. | выражение_1 * выражение_2 | Выражение_1, умноженное на выражение_2. | выражение_1 / выражение_2 | Выражение_1, деленное на выражение_2 (используются целые числа со знаком). Выражение_2 не может быть нулевым или превышать по размеру 16 бит. | выражение_1 MOD выражение_2 | Остаток от деления выражения_1 на выражение_2. Применяются теже правила, что и при делении. |
Логические арифметические операции
Логические арифметические операции позволяют вам выполнять операции булевской алгебры. Каждая из этих операций выполняется поразрядно, то есть, логическая операция выполняется по одному биту. Логические операции приведены в следующей таблице.
Логические арифметические операцииВыражение | Значение |
---|
NOT выражение | Поразрядное дополнение выражения. | выражение_1 AND выражение_2 | Поразрядная операция "И". | выражение_1 OR выражение_2 | Поразрядная операция "ИЛИ". | выражение_1 XOR выражение_2 | Поразрядная операция "исключающее ИЛИ". |
Поразрядные операции сдвига
Поразрядные операции сдвига смещают значения вправо или влево на фиксированное число бит. Вы можете использовать их для быстрого выполнения операций умножения или деления или для доступа к битовому полю в значении. В следующей таблице приведен список операций сдвига.
Логические операции сдвигаВыражение | Значение |
---|
выражение_1 SHL выражение_2 | Выражение_1 сдвигается влево на число бит, заданных выражением_2 (при отрицательном значении выражения_2 выполняется сдвиг вправо). | выражение_1 SHR выражение_2 | Выражение_1 сдвигается вправо на число бит, заданных выражением_2 (при отрицательном значении выражения_2 выполняется сдвиг влево). |
Операции сравнения
Операции сравнения позволяют сравнить два выражение и проверить их равенство или неравенство или что одно из них больше или меньше другого. Эти операции равны -1, если условие истинно (True), или 0 в противном случае. Следующая таблица показывает, как можно использовать эти операции.
Операции сравненияВыражение | Значение |
---|
выражение_1 EQ выражение_2 | -1, если выражение_1 равно выражению_2, в противном случае 0. | выражение_1 NE выражение_2 | -1, если выражение_ 1 не равно выражению_2, в противном случае 0. | выражение_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.
Задание адресного подтипа выражения
Турбо Ассемблер обеспечивает операции, которые позволяют вам изменить или переопределить тип выражений. Эти операции перечислены в следующей таблице:
Операции переопределения типаВыражение | Значение |
---|
выражение_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)
Получение типа выражения
В режиме MASM вы можете получить числовое значение типа выражения путем использования операции TYPE. (В режиме MASM этого сделать нельзя, поскольку типы не описываются числовыми значениями.) Операция TYPE имеет следующий синтаксис:
TYPE выражение
Операция TYPE возвращает размер объекта, описанный адресным выражением:
Значение TYPEВыражение | Значение |
---|
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
1 2 3 4 5 6 7
8 8 8
| |