4.1 · Вычитание и дополнительный код
🎣 Крючок + прогноз (5 мин)
«В 74HC283 нет входа “минус”. Тем не менее любой процессор вычитает миллиарды раз в секунду тем же сумматором. Прогноз: как заставить сложение вычитать?»
🧠 Теория (14 мин)
Трюк циферблата
На 12-часовом циферблате «−3» и «+9» — одно и то же движение. В 4-битном мире (16 состояний) «−B» — то же, что «+(16−B)». Вычитание превращается в сложение с «дополнением».
Дополнительный код за два шага
−B = инвертировать все биты B и прибавить 1. Проверка: B=3 (0011) → инверсия 1100 → +1 = 1101 (это 13; и правда, 16−3=13). Тогда 7−3 = 7+13 = 20 = 1 0100 → отбрасываем вылезший пятый бит → 0100 = 4. Работает.
Где взять «инвертировать по команде»?
Вспомните ⭐⭐ урока 2.2: XOR — это НЕ с выключателем. Пропускаем каждый бит B через XOR с общей линией SUB: SUB=0 → B проходит как есть (сложение); SUB=1 → B инвертируется. А «+1»? Подаём тот же SUB на вход переноса C0 сумматора. Одна линия управления переключает операцию — красивейший трюк цифровой техники:
B ──[XOR×4]──┐
│ [74HC283]── Σ
SUB ──┴─► C0─┘
A ───────────┘🔧 Практика (20 мин)
Модернизация калькулятора
К схеме урока 2.5 добавьте 74HC86 на пути B и тумблер SUB (на все 4 XOR и на C0).
Прогноз → проверка
SUB=0: 7+3=10. SUB=1: 7−3=4 (перенос C4=1 при вычитании игнорируем — это «вылезший» бит циферблата). Ещё: 5−5, 9−2, 3−7 (!)
⭐⭐ Отрицательный результат
3−7 дал 1100. В дополнительном коде это… −4: старший бит = знак. Проверьте на 2−6, 1−8. Заполните таблицу соответствия 1000…1111 ↔ −8…−1.
✅ Чек-лист
- Выполняю дополнение вручную (инверсия + 1)
- Собрал сумматор-вычитатель с линией SUB
- ⭐⭐ Читаю отрицательные результаты по старшему биту