2.5 Описание операторов
() Круглая скобка – Выражение, заключённое в круглые скобки вычисляется отдельно. Т.е. сперва вычисляется значение выражения в скобках, затем всё остальное. Например 1+2*3 -> 7
(1+2)*3 ->9
+ Унарный плюс – Говорит о том, что число положительно
- Унарный минус – Говорит о том, что число отрицательно
* Умножение – Математическое умножение. Операнды берутся как 32 - разрядные целые числа со знаком, результатом является также 32 – разрядные целое число со знаком.
+ Сложение – Математическое сложение. Операнды берутся как 32-разрядные целые числа со знаком, результатом является также 32 – разрядные целое число со знаком.
- Вычитание – Математическое вычитание. Производится вычитание значения второго операнда из первого. Операнды берутся как 32-разрядные целые числа со знаком, результатом является также 32 – разрядные целое число со знаком.
/ Деление – Производится деление значения первого операнда на второй.
Операнды берутся как 32-разрядные целые числа со знаком, результатом является также 32 – разрядные целое число со знаком.
LT, < Меньше – Возвращает значение «Правда» (true), если операнд стоящий слева меньше операнда стоящего справа.
LE, <= меньше либо равно – Возвращает значение «Правда» (true), если операнд стоящий слева меньше, либо равен операнду стоящего справа.
NE, <> , != Неравность – Возвращает значение «Правда» (true), если два операнда между собой не равны. И возвращает значение «Ложь» (false),
два операнда между собой равны.
EQ, = , == Равность – Возвращает значение «Правда» (true), если два операнда между собой равны. И возвращает значение «Ложь» (false),
два операнда между собой не равны.
GT, > Больше – Возвращает значение «Правда» (true), если операнд стоящий слева больше операнда стоящего справа.
GE, >= больше либо равно – Возвращает значение «Правда» (true), если операнд стоящий слева больше, либо равен операнду стоящего справа.
AND, && Логическое «И» – Используется для того чтобы выполнить операцию логического «И» между двумя целочисленными операндами. Если оба операнда являются ненулевыми, результат - 1; иначе - ноль.
Например : B’1010 && B’0011 → 1
B’1010 && B’0101 → 1
B’1010 && B’0000 → 0
BINAND, & Поразрядное Логическое «И» – Используется для того чтобы выполнить операцию логического «И» между двумя целочисленными операндами поразрядно.
Например : B’1010 & B’0011 → B’0010
B’1010 & B’0101 → B’0000
B’1010 & B’0000 → B’0000
BITNOT, ~ Поразрядное логическое отрицание – Используется для того чтобы выполнить операцию поразрядного логического отрицания целочисленного операнда.
Например : ~ B’1010 →B’11111111111111111111111111110101
BINOR, | Поразрядное Логическое «ИЛИ» – Используется для того чтобы выполнить операцию логического «ИЛИ» между двумя целочисленными операндами поразрядно.
Например : B’1010 | B’0101 → B’1111
B’1010 | B’0000 → B’1010
BINXOR, ^ Поразрядное исключающее «ИЛИ» – Используется для того чтобы выполнить операцию логического «Исключающего ИЛИ» между двумя целочисленными операндами поразрядно.
Например : B’1010 ^ B’0101 → B’1111
B’1010 ^ B’0011 → B’1001
MOD, % Модуль (остаток от деления) – Используется для получения остатка от деления первого операнда на второй. Операнды берутся как 32-разрядные целые числа со знаком, результатом является также 32 – разрядные целое число со знаком.
Например : 2 % 2 → 0
12 % 7 → 5
3 % 2 → 1
NOT, ! Логическое отрицание – Используется для инверсии логического аргумента.
Например : ! B’0101 → 0
! B’0000 → 1
OR, || Логическое «ИЛИ» – Используется для того чтобы выполнить операцию логического «ИЛИ» между двумя целочисленными операндами.
Например : B’1010 || B’0000 → 1
B’0000 || B’0000 → 0
BYTE2 Второй байт – берет один операнд, который интерпретируется как 32-разрядное целочисленное значение без знака. Результат - средний младший байт (биты от 15 до 8) операнда.
Например : BYTE2 0x12345678 → 0x56
BYTE3 Третий байт – берет один операнд, который интерпретируется как 32-разрядное целочисленное значение без знака. Результат - средний старший байт (биты от 23 до 16) операнда.
Например : BYTE3 0x12345678 → 0x34
DATE Текущая дата/время – данный оператор подставляет дату текущего компилирования.
DATE 1 секунды (0-59)
DATE 2 минуты (0-59)
DATE 3 часы (0-23)
DATE 4 число месяца (1-31)
DATE 5 месяц (1-12)
DATE 6 год (в формате 1998→98, 1999→99, 00, 01)
Например : today: DC8 DATE 6, DATE 5, DATE 4
HIGH Старший байт – берет один операнд, который интерпретируется как 16-разрядное целочисленное значение без знака. Результат – целочисленное 8-ми разрядное значение старшего байта операнда.
Например : HIGH 0xABCD → 0xAB
HWRD Старшее слово – берет один операнд, который интерпретируется как 32-разрядное целочисленное значение без знака. Результат - старшее слово (биты от 31 до 16) операнда.
Например : HWRD 0x12345678 → 0x1234
LOW Младший байт – берет один операнд, который интерпретируется как 16-разрядное целочисленное значение без знака. Результат – целочисленное 8-ми разрядное значение младшего байта операнда.
Например : LOW 0xABCD → 0xCD
LWRD Младшее слово – берет один операнд, который интерпретируется как 32-разрядное целочисленное значение без знака. Результат - старшее слово (биты от 15 до 0) операнда.
Например : LWRD 0x12345678 → 0x5678
SFB, SFE начало сегмента и окончание сегмента. Имеет только один операнд. Операндом является символическое имя перемещаемого сегмента. Линкер подставляет абсолютный адрес первого байта сегмента взамен символьному имени.
Синтаксис: SFB(segment [{+|-} offset])
SFE(segment [{+|-} offset])
segment – имя перемещаемого сегмента, которое должно быть определено до использования оператора SFB
offset – смещение, отсчитывается от начала текущего сегмента. Параметр не обязателен его можно опустить
Например : NAME demo
RSEG CODE
start: DC16 SFB (CODE)
NAME demo
RSEG CODE
end: DC16 SFE (CODE)
размер сегмента MY_SEGMENT может быть вычислен из следующего выражения
SFE(MY_SEGMENT)-SFB(MY_SEGMENT)
SHL, << Логический сдвиг влево – первый операнд интерпретируется как целочисленное 32-разрядное значение. Второй операнд указывает число битов, на которое необходимо сдвинуть первый операнд влево.
Например : B’00011100 << 3 → B’11100000
B’00000111111111111 << 5 → B’11111111111100000
14 << 1 → 28
SHR, >> Логический сдвиг вправо – первый операнд интерпретируется как целочисленное 32-разрядное значение. Второй операнд указывает число битов, на которое необходимо сдвинуть первый операнд вправо.
Например : B’01110000 >> 3 → B’00001110
B’1111111111111111 >> 20 → 0
14 >> 1 → 7
SIZEOF Размер сегмента - генерирует разницу SFE-SFB для его аргумента, который назван именем перемещаемого сегмента; то есть вычисляет размер сегмента в байтах . Это выполняется, когда сегменты связаны.
Синтаксис: SIZEOF segment
segment - имя перемещаемого сегмента, которое должно быть определено прежде чем используется SIZEOF.
Например : NAME demo
RSEG CODE
size: DC16 SIZEOF CODE
устанавливает размер сегмента CODE на size
UGT Больше по модулю - Возвращает значение «Правда» (true), если операнд стоящий слева больше операнда стоящего справа. Операнды обрабатываются как беззнаковые целые числа.
ULT Меньше по модулю - Возвращает значение «Правда» (true), если операнд стоящий слева меньше операнда стоящего справа. Операнды обрабатываются как беззнаковые целые числа.
XOR Исключающее «ИЛИ» - Используется для того чтобы выполнить операцию «Исключающее ИЛИ» между двумя целочисленными операндами.
Например : B’0101 XOR B’1010 → 0
B’0101 XOR B’0000 → 1
