Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Операторы отношения. Логические операторы
В общем случае константное выражение, указываемое в директивах IF и IFЕ, может быть любым, но по смыслу оно, конечно, должно быть логическим выражением. До сих пор мы рассматривали только арифметические (числовые) выражения ЯА, а теперь рассмотрим, как записываются логические выражения. Они считаются частным случаем константных выражений "вообще", поэтому, хотя в основном используются в конструкциях макроязыка, принадлежат все же "чистому" ЯА. Прежде всего отметим, что в ЯА "ложью" считается число 0, а "истиной" считается число -1 (0FFFFh). В ЯА имеется шесть операторов отношения: <выражение> ЕQ <выражение> <выражение> NЕ <выражение> <выражение> LТ <выражение> <выражение> LЕ <выражение> <выражение> GТ <выражение> <выражение> GЕ <выражение> Названия этих операторов расшифровываются следующим образом: Е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 EQ DWORD;; двойное слово 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 ЕNDI F ENDМ Теперь уточним действия логических операторов. По смыслуих операндами, конечно, должны быть логические выражения, однако в ЯА ими могут быть и любые другие константные выражения (но не адресные), значения которых трактуются как 16-битовые слова. Значением этих операторов также является 16-битовое слово, которое получается в результате поразрядного выполнения соответствующей операции (i-й бит результата определяется только i-ми битами операндов). Например: SCALE EQU 1010b MOV AX, SCALE AND 11b;эквивалентно MOV AX,10b AND AX, SCALE XOR 11b;эквивалентно AND AX,1001b Другими словами, эти операторы выполняются аналогично одноименным командам ПК. Однако не следует путать эти операторы и команды: операторы используются для записи операндов команд и директив и вычисляются еще на этапе трансляции программы (в машинной программе их уже нет), а команды выполняются на этапе счета программы.
Date: 2015-10-21; view: 391; Нарушение авторских прав |