Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как противостоять манипуляциям мужчин? Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Операторы отношения. Логические операторы



В общем случае константное выражение, указываемое в директивах IF и IFЕ, может быть любым, но по смыслу оно, конечно, должно быть логическим выраже­нием. До сих пор мы рассматривали только арифметические (числовые) выраже­ния ЯА, а теперь рассмотрим, как записываются логические выражения. Они счи­таются частным случаем константных выражений "вообще", поэтому, хотя в основ­ном используются в конструкциях макроязыка, принадлежат все же "чистому" ЯА.

Прежде всего отметим, что в ЯА "ложью" считается число 0, а "истиной" считается число -1 (0FFFFh).

В ЯА имеется шесть операторов отношения:

<выражение> ЕQ <выражение>

<выражение> <выражение>

<выражение> <выражение>

<выражение> <выражение>

<выражение> <выражение>

<выражение> <выражение>

Названия этих операторов расшифровываются следующим образом: ЕQ (equal) -равно, NE (not equal) - не равно, LТ (less or than) - меньше, LЕ (less оr equal!) -меньше или равно, GТ (greater or than) - больше, GЕ (greater оr equal) - больше или равно. Оба операнда должны быть либо константными выражениями, либо адресными выражениями, значениями которых обязаны быть адреса из одного и того же сегмента памяти. Если проверяемое отношение выполняется, то значением оператора является "истина", не выполняется - "ложь". Например, если константа N имеет значение 5, тогда:

N+1 LT 5 à 0 (ложь)

N-1 LT 5 à -1 (истина)

Следует, однако, отметить, что действия этих операторов слегка "заумны". Операторы ЕQ и NE трактуют свои операнды как 16-битовые знаковые числа в дополнительном коде, поэтому выражение -2 EQ 0FFFEh оказывается истинным. Остальные же операторы отношения правильно учитывают знаки своих операндов (например, отношение -1 LТ 0FFFЕh истинно), кроме одного случая: если сравниваемые операнды равны как 16-битовые знаковые числа в дополнительном коде, то эти операторы считают их равными (например, отношение -1 LЕ 0FFFFh считается ложным). Учитывая подобные "фокусы", лучше не использовать отрицательные числа в этих операторах.



В качестве примера на использование операторов отношения опишем в виде макроса SЕТ0 Х действие Х:=0 при условии, что Х - имя переменной размером в байт, слово или двойное слово:

SET0 MACRO X

IF TYPE X EQDWORD ;; двойное слово

MOV WORD PTR X,0

MOV WORD РТR Х+2 , 0

ЕLSE;; байт или слово

MOV Х,0

ENDIF

ЕNDМ

Логические значения и отношения можно объединять в более сложные логические выражения с помощью следующих логических операторов:

NОТ <константное выражение>

<константное выражение> АND <константное выражение>

<константное выражение> ОR<константное выражение>

<константное выражение> ХОR<константное выражение>

Эти операторы реализуют соответственно операции отрицания, конъюнкции, дизъюнкции и "исключающего ИЛИ".

В качестве примера опишем в виде макроса RSH В,N сдвиг значения байтовой переменной В на N разрядов вправо при условии, что N - явно заданное неотрицательное число. Мы не будем выделять особо случай N=1, когда сдвиг можно осуществить одной командой, однако учтем, что при N=0 сдвиг не нужен (макрорасширение должно быть пустым), а при N>7 результат сдвига известен заранее (это 0), поэтому сдвиг можно заменить записью нуля в В. С учетом этого получаем такое макроопределение:

RSH MACRO B,N

IF (N GТ 0) АND (N LT 8) ;; 0<N<8 ?

MOV CL,N

SHR B,CL

ЕLSЕ

IF N GЕ 8;; N>=8 ?

МОV В, 0

ЕNDIF

ЕNDIF

ENDМ

Теперь уточним действия логических операторов. По смыслуих операндами, конечно, должны быть логические выражения, однако в ЯА ими могут быть и любые другие константные выражения (но не адресные), значения которых трактуются как 16-битовые слова. Значением этих операторов также является 16-битовое слово, которое получается в результате поразрядного выполнения соответствующей операции (i-й бит результата определяется только

i-ми битами операндов). Например:

SCALE EQU 1010b

MOV AX , SCALE AND 11b ;эквивалентно MOV AX,10b

AND AX , SCALE XOR11b ;эквивалентно AND AX,1001b

Другими словами, эти операторы выполняются аналогично одноименным командам ПК. Однако не следует путать эти операторы и команды: операторы используются для записи операндов команд и директив и вычисляются еще на этапе трансляции программы (в машинной программе их уже нет), а команды выполняются на этапе счета программы.

 








Date: 2015-10-21; view: 33; Нарушение авторских прав

mydocx.ru - 2015-2018 year. (0.018 sec.) - Пожаловаться на публикацию