Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
88
Добавлен:
12.03.2015
Размер:
320 Кб
Скачать

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

Соседние файлы в папке методички к 78К0