|
|
|
|
Операторы отношений
Кроме использования символов с предопределенными значениями и арифметических выражений MASM поддерживает операторы отношений, которые могут
применяться для управления операторами условного ассемблирования. Операторами отношений являются операторы, выражающие взаимосвязь между двумя
значениями. Less than (меньше чем), greater than (больше чем), equal to (равно) и not equal to (не равно) - примеры операторов отношений.
Эти операторы позволяют выполнять специальные действия по проверке на попадание в диапазон. Использование операторов отношений разрешает создавать
довольно сложные программные структуры, которые автоматически настраиваются на конкретную среду функционирования (например, определение размера области
данных для запоминания резервной области памяти). Однако, используя операторы отношений, MASM не всегда выполняет то, что планировалось.
Работая с целыми со знаком, вы можете посчитать OFFFFh и -1 за одно и то же значение. За некоторым исключением MASM также использует
взаимозаменяемость значений. Хотя ранние версии MASM при работе с отрицательными числами имели некоторые сложности, более новые версии (1.2 и выше)
знают, что -1 равно 0FFFFh, однако при сравнении величин двух чисел MASM рассматривает их по-разному. Это иллюстрирует следующий пример:
True FFFF dw 1 gt -1 очевидно
False 0000 dw 1 gt 0FFFFh 65535, а не -1
True FFFF dw -1 ge 0FFFFh -1=-1
False 0000 dw -1 gt 0FFFFh -1 не больше -1
|
В примере показано, что MASM рассматривает 0FFFFh как положи тельное целое число 65535, однако при сравнении с -1 0FFFFh интерпретируется как -1.
Об этом можно заметить: "Кто предостережен, тот вооружен".
Полный список операторов отношений приведен в Табл. 1-5. Пример использования этих операторов при программировании макроструктур помещен в конце
данной главы. В Табл. 1-6 приведен список директив условного ассемблирования.
Таблица 1-5. Логические операторы и операторы отношений
условного ассемблирования
------------------------------------------------------------
Оператор Синтаксис Описание применения
------------------------------------------------------------
EQ exp1 EQ exp2 TRUE,если выражение1 равно вы-
ражению2
NE exp1 NE exp2 TRUE,если выражение1 не равно
выражению2
LT exp1 LT ехр2 TRUE,если выражение1 меньше
выражения2
LE exp1 LE exp2 TRUE,если выражение1 меньше
или равно выражению 2
GT exp1 GT exp2 TRUE,если выражение1 больше
выражения2
GE exp1 GE exp2 TRUE,если выражение1 больше
или равно выражению2
NOT NOT exp TRUE,если выражение - FALSE,
иначе FALSE
AND exp1 AND exp2 TRUE,если только оба выражение1
и выражение2 - TRUE
OR exp1 OR exp2 TRUE,если выражение1 либо выра-
жение2 - TRUE
XOR exp1 XOR exp2 TRUE,если выражение1 равно лог.
NOT от выражения2
FALSE (0000 16-CC) Для IF TRUE любое нулевое выра-
жение - FALSE
TRUE (FFFF 16-CC) Для IF TRUE любoe ненулевое вы-
ражение - TRUE
---------------------------------------------------------
|
Таблица 1-6. Список директив условного ассемблирования
---------------------------------------------------------
Директива Описание применения
---------------------------------------------------------
.LFCOND Приводит список ассемблерных условий, со-
ответствующих FALSE.
.SFCOND Подавляет выдачу списка условий, соответ-
ствующих FALSE. По умолчанию устанавлива-
ется .SFCOND.
.TFCOND Включает список условного ассемблирования
FALSE аналогично переключателю MASM /X.
Действует независимо от переключателей
.LFCOND и .SFCOND.
.LIST Приводит список исходных строк. Противо-
положно .ХLIST, но не изменяет характерис-
тик листинга условного ассемблирования,
определенных .LFCOND,.SFCOND или .TFCOND.
.XLIST Подавляет любую выдачу. Перекрывает все
предыдущие директивы.
------------------------------------------------------------
|
|
|