Ветвления и циклы (JZ, JN, JMP)

Код всегда выполняется строго сверху вниз. Но любая игра состоит из циклов и условий. Если змейка съела яблоко — растим хвост, иначе — просто ползем дальше. Как сломать этот прямой путь?

Для этого существуют инструкции переходов (Jumps) — своеобразные телепорты для Счётчика команд (Program Counter).

Есть безусловный переход — JMP. Когда процессор натыкается на него, он просто забывает, где был, и перепрыгивает на ту строчку кода, которую ему указали. Именно так создается бесконечный Игровой цикл (Game Loop), который заставляет игру работать кадр за кадром, возвращаясь в начало.

Но куда интереснее условные переходы: JZ (Прыгни, если Нуль) и JN (Прыгни, если Отрицательно). Они работают в паре с флагами АЛУ. Процессор смотрит на флаг: если условие выполнено (например, флаг Negative горит), телепорт срабатывает, и программа идет по одной ветке. Если флаг не горит — телепорт игнорируется, и программа спокойно идет дальше. Это и есть аппаратный фундамент для операторов if / else, без которых не обходится ни одна программа.

Практический пример. Сердце любой игры — главный игровой цикл: прочитать геймпад (LDA 254), обновить позицию змейки (ADD, STA), нарисовать кадр (STA 255), проверить столкновение со стеной (SUB, JZ на Game Over) — и безусловный прыжок JMP обратно на начало цикла. Эти 5-10 ассемблерных команд выполняются 60 раз в секунду, создавая иллюзию движения. Каждый кадр — это один полный проход счётчика команд по коду игрового цикла.