АЛУ (ALU8)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| A | bus8 | Первый операнд |
| B | bus8 | Второй операнд |
| Opcode | bus8 | Код операции (0–7) |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Result | bus8 | Результат |
| Zero | bit | 1 если Result=0 |
Логика работы
АЛУ — это калькулятор с ручкой переключения режимов: подаёшь два байта A и B, выставляешь код операции на входе Opcode — и на выходе Result появляется ответ. Внутри спрятан красивый трюк: никакого «переключения режимов» на самом деле нет. Сумматор и все логические блоки считают свои результаты одновременно и постоянно, а каскад мультиплексоров по битам opcode просто выбирает, чей результат сейчас показать на выходе.
Главное свойство: восемь операций в одном чипе. Код 0–7 на входе Opcode — и АЛУ складывает, вычитает, делает И, ИЛИ, XOR, инвертирует или сдвигает. Возьмём A = 00001010 (10) и B = 00000110 (6): opcode 0 (ADD) даст 00010000 (16), opcode 2 (AND) — 00000010 (2), а opcode 7 (SHR) — 00000101 (5). Схема не перестраивается — меняется только выбранный провод.
Нюанс: операции NOT, SHL и SHR игнорируют вход B — им нужен только A. Сама схема полностью комбинационная, без тактов: изменились входы — результат обновляется сразу же. Рядом с Result живёт флаг Zero: он равен 1, когда результат равен нулю, и именно по нему процессор понимает, что вычитание дало ноль.
Примеры
| A (dec) | B (dec) | Opcode | Операция | Result | Zero |
|---|---|---|---|---|---|
| 10 | 6 | 0 | ADD | 00010000 (16) | 0 |
| 10 | 6 | 1 | SUB | 00000100 (4) | 0 |
| 6 | 6 | 1 | SUB | 00000000 (0) | 1 |
| 10 | 6 | 2 | AND | 00000010 (2) | 0 |
| 10 | 6 | 3 | OR | 00001110 (14) | 0 |
| 10 | — | 5 | NOT | 11110101 (245) | 0 |
| 10 | — | 7 | SHR | 00000101 (5) | 0 |
В третьей строке вычитание числа из самого себя дало ноль — и флаг Zero подскочил к 1. Так процессор сравнивает числа. Для NOT и SHR значение B не важно: эти операции берут только A.
Таблица операций
| Opcode | Мнемоника | Операция |
|---|---|---|
| 0 | ADD | Result = A + B |
| 1 | SUB | Result = A − B |
| 2 | AND | Result = A & B |
| 3 | OR | Result = A | B |
| 4 | XOR | Result = A ^ B |
| 5 | NOT | Result = ~A (B игнорируется) |
| 6 | SHL | Result = A << 1 (B игнорируется) |
| 7 | SHR | Result = A >> 1 (B игнорируется) |
Применение
На уровне 13 ты собираешь селектор операций сам: каскад мультиплексоров, который по битам opcode выбирает между результатами сумматора и логических блоков. В готовом компьютере (уровни 13–18 и 25) АЛУ — сердце процесса: аккумулятор подаётся на вход A, RAM — на вход B, декодер команд выставляет Opcode, а результат возвращается в аккумулятор или в память.
Конкретные приёмы: сравнение двух чисел — это SUB плюс взгляд на флаг Zero (ноль — значит равны); инструкция JZ делает условный переход именно по этому флагу; умножение и деление на 2 заменяются сдвигами SHL и SHR; маскирование отдельных битов — через AND и OR. По сути любая «умная» команда процессора сводится к одной из восьми операций АЛУ.
Смежные компоненты
Статьи по теме
Частые вопросы
Что умеет ALU8?
Восемь операций: ADD, SUB, AND, OR, XOR, NOT, SHL и SHR — выбираются кодом операции на входе.
Как АЛУ выбирает операцию?
Все вычислительные блоки работают параллельно и одновременно, а каскад мультиплексоров по битам opcode подключает к выходу Result ровно один нужный провод — тот, где уже лежит готовый ответ.
Зачем нужен флаг Zero?
Он равен 1, когда результат равен нулю. По нему инструкция JZ делает условный переход: вычти одно из другого и проверь Zero — так процессор сравнивает числа и строит циклы.