![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы отношения. Логические операторыСодержание книги
Поиск на нашем сайте
В общем случае константное выражение, указываемое в директивах 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 Другими словами, эти операторы выполняются аналогично одноименным командам ПК. Однако не следует путать эти операторы и команды: операторы используются для записи операндов команд и директив и вычисляются еще на этапе трансляции программы (в машинной программе их уже нет), а команды выполняются на этапе счета программы.
|
|||||
Последнее изменение этой страницы: 2016-12-13; просмотров: 198; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.172.178 (0.009 с.) |