Счётчик команд (ProgramCounter)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| Clock | bit | Тактовый сигнал — срабатывание по фронту (0→1) |
| Reset | bit | Сброс счётчика в 0 (высший приоритет) |
| Load | bit | Загрузка адреса Addr в счётчик (средний приоритет) |
| Addr | bus8 | Адрес для загрузки (используется командами JMP, JZ, JN) |
| Inc | bus8 | Шаг инкремента (по умолчанию 1, если пин не подключён) |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Q | bus8 | Текущий адрес команды (0–255) |
Логика работы
Представь указку учителя на строчке задачи: пока она не сдвинулась, класс читает одну и ту же строку. Счётчик команд PC — указка процессора: в нём лежит адрес байта в ROM, который будет исполнен следующим. Именно он превращает россыпь байтов в программу с порядком выполнения.
По каждому фронту Clock срабатывает одно из трёх действий по старшинству: Reset = 1 — сброс в 0; Load = 1 — загрузка адреса Addr (так работают JMP, JZ и JN); иначе Q увеличивается на Inc, а если Inc не подключён — на 1. Пример: программа с адреса 0 идёт 0 → 1 → 2 → 3, встречает JMP 20 — и следующий такт даёт Q = 20.
Нюанс уровня 19: команда занимает два байта — код операции и операнд. С шагом по умолчанию процессор свалился бы в середину команды, поэтому Inc подключают к константе 2: PC перескакивает через байт операнда. А на границе памяти 255 + 1 = 0 — счёт замыкается по кругу.
Примеры (последовательность тактов)
| Ситуация | Reset | Load | Addr | Q после фронта |
|---|---|---|---|---|
| Перезапуск программы | 1 | 0 | — | 0 |
| Обычное выполнение (Inc = 1) | 0 | 0 | — | Q + 1 (например, 3 → 4) |
| JMP 20 | 0 | 1 | 20 | 20 |
| Шаг PC+2, уровень 19 (Inc = 2) | 0 | 0 | — | Q + 2 (например, 4 → 6) |
Первая строка главнее остальных: Reset перекрывает и загрузку, и инкремент.
Применение
PC строится на уровне 14 и с уровня 16 живёт в каждом процессоре курса (уровни 16–29). Классическая обвязка: Q идёт на адресный вход ROM, операнд команды — на Addr, а сигналы дешифратора JumpUncond и JumpCond через флаги управляют Load.
Конкретное применение — все циклы и ветвления: JZ и JN с адресом назад превращают повтор в цикл, JMP на начало игрового цикла не даёт программе «убежать» в пустую память, а Reset перезапускает Змейку с чистого листа.
Смежные компоненты
Статьи по теме
Частые вопросы
Что делает счётчик команд?
Хранит адрес текущей команды и увеличивается каждый такт — процессор выполняет программу по порядку.
Зачем нужен вход +Inc?
Чтобы команды переходов могли сдвигать адрес сразу на несколько позиций.
Что произойдёт на адресе 255?
Следующий фронт даст 255 + 1 = 0: счётчик замкнёт по кругу, и процессор продолжит читать программу с начала памяти.
Почему на уровне 19 шаг равен двум?
Потому что команда занимает два байта: код операции и операнд. Шаг 2 переносит PC сразу на начало следующей команды.