Детектор нуля (BusZero)

Входы (Inputs)

ПинТипОписание
Abus8Входная шина

Выходы (Outputs)

ПинТипОписание
Qbit1 если A=0, иначе 0

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

BusZero сжимает целый байт в один бит-вердикт: «шина пустая или нет?». Внутри это восьмивходовое ИЛИ-НЕ: сначала все биты собираются через ИЛИ, а итог инвертируется. Единица на выходе появляется только в одном случае — когда все восемь битов равны нулю. Хотя бы одна единица где угодно на шине — и вердикт уже 0: даже один битик в младшем разряде рушит проверку.

Главное свойство: BusZero проверяет равенство с нулём, не раскладывая байт на отдельные биты. Не нужно тянуть восемь проводов и строить каскад вентилей — один узел выдаёт готовый флаг. Ещё сильнее он раскрывается в паре с BusXOR: прогнав через детектор результат A XOR B, ты получаешь компаратор — единица на выходе означает A = B. Так процессор сравнивает два числа, не имея отдельного узла сравнения.

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

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

A (bin)A (dec)Q
0000000001
0000000110
100000001280
111111112550

Применение

Это и есть флаг нуля Z — один из главных регистров состояния процессора. После арифметики результат АЛУ прогоняется через детектор нуля, и флаг Z запоминает: «получился ноль». На нём строятся условные переходы JZ и JNZ и циклы «пока не ноль»: счётчик уменьшается на единицу за итерацию, и как только он обнулился, процессор выходит из цикла. Так работают задержки и подсчёт шагов.

Вторая роль — проверка значений без порчи данных: детектор подключается сбоку к шине и ничего на ней не изменяет. На уровне 25 «Проверка на минус» флаги помогают процессору ветвиться по состоянию числа. Равенство двух значений проверяется связкой BusXOR + BusZero: сначала XOR, затем проверка на ноль. Тот же флаг стоит за командами ассемблера: «если результат нулевой — прыгай», а если нет — продолжай по порядку.

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

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

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

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

Как определить, что шина равна нулю?

BusZero выдаёт 1, только когда все 8 бит равны 0. Это удобно для условного перехода JZ.

Чем BusZero отличается от флага Zero у АЛУ8?

Встроенный флаг АЛУ8 проверяет только результат арифметики, а BusZero подключается к любой шине: данные из RAM, состояние геймпада, текущий счётчик. Он показывает ноль там, где тебе нужно, а не только там, где считает АЛУ.

Как с помощью BusZero сравнить два числа?

Сначала XOR: A XOR B даёт ноль только при равенстве. Результат — на вход BusZero: единица означает «числа равны», ноль — «различаются». Это и есть схема компаратора.