Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Логические операции

К логическим операциям относятся: логическое умножение (И, AND), логическое сложение (ИЛИ, OR), исключающее ИЛИ (XOR) и отрицание (NOT). Все эти инструкции изменяют регистр признаков.

 

Команда AND

 

Команда AND выполняет логическое умножение двух операндов — ol и о2. Результат сохраняется в операнде ol. Типы операндов такие же, как у команды ADD: операнды могут быть 8-, 16- или 32- битными регистрами, адресами памяти или непосредственными значениями.

 

AND o l, o2

 

Следующий пример вычисляет логическое И логической единицы и логического

нуля (1 AND 0).

 

mov a l, 1

mov b l, 0

and a l. b l

AL = one

BL = zero

AL = AL and BL = 0

 

Тот же самый пример, но записанный более компактно:

 

mov a l, 1;AL = one

and a l, 0; AL = AL and 0 = 1 and 0 = 0

 

 

Команда OR

 

Команда OR выполняет логическое сложение двух операндов — ol и о2. Результат сохраняется в операнде ol. Типы операндов такие же, как у команды

 

AND.

OR ol, o2

 

 

Дополнительные примеры использования логических команд будут приведены в последнем пункте данной главы. А пока рассмотрим простой пример установки наименее значимого бита (первый справа) переменной mask в 1.

 

or byte [mask],1

 

Команда XOR

 

Вычисляет так называемое «исключающее ИЛИ» операндов ol и о2. Результат сохраняется в о1. Типы операндов такие же, как у предыдущих инструкций. Формат команды:

 

XOR o l, о2

 

Исключающее ИЛИ обратимо: выражение ((х хог у) хог у) снова возвратит

 

х.

mov al,0x55; AL = 0x55

хог al,0xAA;AL = AL xor OxAA

xor al,0xAA;возвращаем в AL исходное значение - 0x55

 

Команда NOT

 

Используется для инверсии отдельных битов единственного операнда, который может быть регистром или памятью. Соответственно команда может быть записана в трех различных форматах:

 

NOT r/m8

NOT r/ml 6

NOT r/m32

 

Следующий пример демонстрирует различие между операциями N O T и NEG:

 

mov al,00000010b;AL = 2

mov bl,al;BL = 2

not al;после этой операции мы получим

;11111101b = OxFD (-3)

neg bl;a после этой операции результат будет

/другим: 11111110 = OxFE (-2)

 

Массивы битов (разрядные матрицы)

 

Любое число можно записать в двоичной системе в виде последовательности нулей и единиц. Например, любое 16-разрядное число состоит из 16 двоичных цифр — 0 и 1. Мы можем использовать одно число для хранения шестнадцати различных состояний — флагов. Нам не нужно тратить место на хранение 16 различных переменных, ведь для описания состояния (включено/выключено) вполне достаточно 1 бита. Переменная, используемая для хранения флагов, называется разрядной матрицей или массивом битов.

 

Высокоуровневые языки программирования также используют разрядные матрицы, например, при хранении набора значений перечисления, для экономии памяти. Мы уже знакомы с одной разрядной матрицей, которая очень часто используется в программировании — это регистр признаков микропроцессора. Мы будем очень часто сталкиваться с разрядными матрицами при программировании различных устройств: видеоадаптера, звуковой платы и т.д. В этом случае изменение одного бита в разрядной матрице может изменить режим работы устройства.

 

Для изменения значения отдельных битов в матрице служат логические операции. Первый операнд задает разрядную матрицу, с которой мы будем работать, а второй операнд задает так называемую маску, используемую для выбора отдельных битов.

 

Для установки определенных битов массива в единицу (все остальные биты при этом должны остаться без изменения) применяется команда OR. В качестве маски возьмите двоичное число, в котором единицы стоят на месте тех битов, которые вы хотите установить в массиве. Например, если вы хотите установить первый и последний биты массива, вы должны использовать маску 10000001. Все остальные биты останутся нетронутыми, поскольку 0 OR X всегда возвращает X.

 

Чтобы сбросить некоторые биты (установить их значение в 0), возьмите в качестве маски число, в котором нули стоят на месте тех битов, которые вы хотите сбросить, а единицы — во всех остальных позициях, а потом используйте команду AND. Поскольку 1 AND X всегда возвращает X, мы сбросим только необходимые нам биты.

 

Рассмотрим несколько примеров.

 

Пример. В регистре AL загружен массив битов. Нужно установить все нечетные позиции в 1. Предыдущее состояние массива неизвестно. or al, 10101010b;маска устанавливает все нечетные биты в 1

 

Пример. В массиве битов, хранящемся в регистре AL, сбросить 0-й и 7-й биты, все остальные оставить без изменения. Исходное состояние массива также неизвестно.

 

and a l, 01111110b;каждая 1 в маске сохраняет бит

;в ее позиции

 

С помощью XOR также можно изменять значения битов, не зная предыдущего состояния. Для этого в маске установите 1 для каждого бита, который вы хотите инвертировать (0 станет 1, а 1 станет 0), а для всех оставшихся битов установите 0. Если мы выполним XOR дважды, то получим исходное значение. Такое поведение операции XOR позволяет использовать эту команду для простого шифрования: к каждому байту шифруемых данных применяется XOR с постоянной маской (ключом), а для дешифровки тот же ключ применяется (XOR) к шифрованным данным.


УРОК 29

<== предыдущая лекция | следующая лекция ==>
Арифметические операции | Современные микропроцессоры
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 423; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.