Уровень 25: Проверка на минус
Открыть уровень →Где это в машине →
Задание
Цель: Изучите условный переход JN (Jump if Negative). Запустите тестовую программу и убедитесь, что переход работает.
JN (Jump if Negative) — условный переход, срабатывающий, когда бит 7 результата = 1 (отрицательное число в дополнительном коде — способ хранения отрицательных чисел, где старший бит играет роль знака: 1 — минус; подробнее — в статье о дополнительном коде).
Главная идея уровня: процессор умеет отвечать на вопрос «каким был результат»: бит 7 в дополнительном коде — это знак, и JN прыгает, когда результат отрицательный. Флаги превращают арифметику в решения.
Материалы по теме
- Флаги состояния: Как процессор понимает мир
- Ветвления и циклы (JZ, JN, JMP)
- Справка по ассемблеру →
- ALU8 — арифметико-логическое устройство
- BusZero — детектор нуля
Решение для самопроверки
Сначала попробуйте собрать схему сами. Решение ниже — способ свериться, если застряли или уже справились.
Что должно получиться: JN срабатывает и Acc = 99 — переход по отрицательному результату работает.
Как это работает аппаратно:
- Splitter извлекает бит 7 из выхода ALU (флаг Negative).
- Элемент AND комбинирует: Decoder.JumpCond AND Bit7.
- Элемент OR комбинирует: JumpUncond OR (JumpCond AND Bit7) → PC.Load.
- При PC.Load=1 счётчик команд загружает адрес перехода из операнда.
5 − 10 = 251 выглядит странно, но работает благодаря арифметике по модулю 256: переполнение просто отбрасывается, и 251 — это то же самое, что −5 в дополнительном коде. Бит 7 при этом равен 1 — признак отрицательного числа.
Программа-тест:
- LDA 10 → Acc = 10
- STA 10 → RAM[10] = 10
- LDA 5 → Acc = 5
- SUB 10 → Acc = 5 − RAM[10] = 5 − 10 = 251 (бит 7 = 1, отрицательное)
- JN negative → переход (бит 7 = 1)
- LDA 99 → Acc = 99
- HLT
Если JN работает, Acc = 99. Если нет — Acc останется 251.
Нажмите «Выполнить», затем «Чекпойнт».
Проверь себя
Почему 5 − 10 даёт 251, и JN считает это отрицательным?
Арифметика по модулю 256: 251 — это −5 в дополнительном коде, бит 7 = 1 — признак отрицательного числа.