Шинное исключающее ИЛИ (BusXOR)

Входы (Inputs)

ПинТипОписание
Abus8Первая шина
Bbus8Вторая шина

Выходы (Outputs)

ПинТипОписание
Qbus8A ^ B (побитовое XOR)

Логика работы

BusXOR — детектор различий. Он сравнивает две шины бит за битом и ставит единицу там, где биты не совпали: 0 против 1 или 1 против 0. Совпали — ноль. Таблица получается своенравная: 0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 = 1, но 1 XOR 1 = 0. Если И и ИЛИ отвечают на вопрос «есть ли единицы», то XOR — на вопрос «есть ли разница».

Из правила «различие даёт единицу» следуют два главных свойства. Первое: A XOR A = 00000000 — сравнение байта с самим собой всегда даёт ноль. Второе: XOR с маской 11111111 переворачивает все биты: 10101010 XOR 11111111 = 01010101, то есть X XOR 11111111 = NOT X. Маску можно сузить: XOR с 00001111 инвертирует только младшую тетраду, не трогая старшую.

Тонкость: XOR обратим сам в себя. Зашифруй байт ключом K — получишь C = A XOR K. Примени тот же ключ снова — A вернётся без потерь: C XOR K = A. Ни И, ни ИЛИ таким свойством не обладают, и именно поэтому XOR — основа простейших шифров и контрольных сумм.

Примеры (8 бит)

A (bin)B (bin)Q (bin)Q (dec)
10101010111111110101010185
1100110011001100000000000
000011111111000011111111255
101101100000111110111001185

Применение

В АЛУ (уровень 13) XOR входит в базовую четвёрку операций. Но настоящая слава приходит к нему в связке с детектором нуля: прогнав A XOR B через BusZero, процессор получает готовый компаратор — единица на выходе означает, что два байта равны. На этом строится команда сравнения и все условные переходы «если равно».

В проекте компьютера (уровень 16 и дальше) XOR переключает биты: приложил к регистру маску 00000001 — младший бит мигнул, приложил ещё раз — погас обратно. Тем же свойством пользуется простое шифрование: значение XOR-ится с ключом и хранится «взболтанным», а при чтении второй XOR с тем же ключом восстанавливает оригинал. На XOR строятся и контрольные суммы: последовательный XOR всех байтов сообщения мгновенно покажет, не потерялся ли по дороге хоть один бит.

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Зачем нужно побитовое XOR?

Для сравнения, шифрования и переключения битов. XOR числа с самим собой всегда даёт 0.

Как сравнить два байта на равенство?

Подай их на входы A и B, а результат — на BusZero. Если байты равны, XOR даст 00000000, и на выходе будет 1. Любое различие хоть в одном бите даст 0.

Почему XOR называют переключателем битов?

Единицы маски переворачивают выбранные биты, нули оставляют на месте. Применишь маску дважды — биты вернутся: 1 XOR 1 = 0. Идеально для toggle-операций вроде мигания светодиода.