Выполнение в ЭВМ логических операций
Помимо арифметических операций, операционный блок любой вычислительной машины предполагает выполнение основных логических операций и сдвигов. Чаще всего такие операции реализуются дополнительными схемами, входящими в состав целочисленных операционных блоков. К базовым логическим операциям относятся: логическое отрицание (НЕ), или инверсия; логическое сложение (ИЛИ), или дизъюнкция; логическое умножение (И), или конъюнкция; сложение по модулю два (исключающее ИЛИ).
Логические операции выполняются в ЭВМ над логическими переменными'.
X = Х^ Хд_2 ••• X! Х0 — логическая переменная X,
Y = Y,,.! Уц_2 ... У) У0 — логическая переменная У,
где Xj, Yj е {0, 1).
Логическая переменная, как и другой машинный элемент информации, представляется в виде двоичного слова.
Конъюнкция (Z = X&Y)
Эта операция реализуется путем выполнения поразрядных операций конъюнкции Z; = Х;&У; в соответствии с табл. 4.13.
Таблица 4.13
Конъюнкция
X, |
У |
Z, |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
Пример.
Переносы между разрядами результата отсутствуют. Часто операцию конъюнкции называют операцией маскирования. При этом одну из переменных называют маской. С помощью операции маскирования можно выделять один или группу бит, определять модуль числа, знак числа и т.д.
Пример. Выделить модуль переменной X.
Частным случаем конъюнкции является операция тестирования X&Y, при выполнении которой устанавливаются только признаки результата операции конъюнкции без формирования его значения.
Дизъюнкция (Z = X vY)
Операция реализуется путем выполнения поразрядных операций дизъюнкции Zj = X; v Y; в соответствии с табл. 4.14 и может быть использована для образования какого-либо нового слова из частей слова.
Таблица 4.14
Дизъюнкции
X; |
Y. |
Z, |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
Сложение по модулю два (исключающее или) — (Z = X ф Y)
Пример.
Операция над переменными реализуется поразрядно в соответствии с табл. 4.15 и может быть использована для обнуления аккумулятора, определения знака произведения или частного путем сложения знаков операндов по модулю два.
Таблица 4.15
Сложение по модулю два
X, |
Y, |
z( |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
Пример.
Инверсия (отрицание) — ( X = X )
Пример.
Х = 00000110, X = 11111001.
Сравнение (X - Y)
При сравнении формируются только признаки результата вычитания X - Y, а сам результат нигде не фиксируется.
Сдвиги двоичных слов
Различают следующие шипы сдвигов: логические, арифметические и циклические.
При логическом сдвиге слова влево (соответствует умножению на два: А <— 2А) содержимое всех его бит сдвигается влево на 1 разряд. Освобождающийся разряд заполняется нулем, а выдвинутый бит чаще всего размещается в триггере переноса С. Схема сдвига для 8-разряд- ного регистра-аккумулятора приведена на рис. 4.68.

Рис. 4.68. Логический сдвиг влево на один разряд

Рис. 4.69. Логический сдвиг вправо на один разряд
Пример. Сдвинуть влево на 1 разряд X = 3.
С | 0 | 0000 0011 ДосдвигаХ = 3
С | 0 | 0000 0110 После сдвига X = 6
При логическом сдвиге вправо (соответствует делению на два: А <— <— А/2) содержимое всех его бит сдвигается вправо на 1 разряд (рис. 4.69).
Арифметический сдвиг влево полностью совпадает с логическим сдвигом влево (при представлении числа в ДК). Если число задано в ПК, то старший (знаковый) разряд не изменяется:
до сдвига: [Х]пк = 1000100 (-4);
после сдвига: [Х]пк = 1001000 (-8).
При арифметическом сдвиге вправо содержимое старшего (знакового) разряда не изменяется (рис. 4.70).

Рис. 4.70. Арифметический сдвиг вправо на один разряд
При циклическом сдвиге слова вправо выдвинутый бит размещают в триггере переноса С, а в освобождающийся разряд А7 размещают бит из триггера переноса (рис. 4.71).

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