Индексный регистр (IndexRegister)

Входы (Inputs)

ПинТипОписание
Databus8Входные данные (адрес)
ClockbitТактовый сигнал
WEbitЗагрузить Data
IncbitУвеличить на 1

Выходы (Outputs)

ПинТипОписание
Qbus8Текущее значение

Логика работы

Представь закладку в книге: она отмечает страницу, с которой ты сейчас читаешь. Индексный регистр IX — такая же закладка, только для памяти: в нём лежит адрес ячейки RAM, к которой программа обращается в данный момент. Закладку можно передвинуть на страницу вперёд (Inc) или сразу перескочить на конкретную (загрузка через WE и Data).

Главное свойство — косвенная адресация: команда берёт адрес не из себя, а из IX. Пример: LDX 16 кладёт в IX число 16; LDAX читает RAM[16] в аккумулятор; INX сдвигает закладку на 17; ещё один LDAX — уже читает RAM[17]. Один и тот же код при этом обрабатывает массив любой длины.

Нюанс: приоритет Inc выше, чем WE. Если на одном фронте оба сигнала равны 1, регистр увеличится на единицу, а загрузка Data будет проигнорирована. Поэтому LDX и INX никогда не совмещают в одном такте.

Примеры (последовательность тактов)

ТактКомандаWEIncIX после фронта
1LDX 161016 — закладка на начало массива
2INX0117 — сдвиг к следующему элементу
3LDAX0017 — не меняется, читается RAM[17]
4LDX 20010200 — резкий прыжок на новый адрес

Такт 3 показывает, что команды косвенного чтения пользуются закладкой, но не двигают её.

Применение

Уровень 21 «Указатели» вводит IX, и дальше (уровни 21–29) без него не обходится ни одна работа с массивами: очередь точек в Змейке, буферы данных, обход таблиц. Инструкции LDX, INX, LDAX и STAX — весь словарь общения с индексным регистром.

Конкретное применение — цикл по массиву: LDX ставит закладку на первый элемент, в теле цикла LDAX или STAX читает и пишет данные по адресу IX, INX сдвигает закладку, а условный переход возвращает к началу, пока не обработан последний элемент.

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Зачем нужен индексный регистр?

Для косвенной адресации: адрес берётся из регистра, а не из команды — так работают циклы по массивам.

Чем IX отличается от аккумулятора?

Аккумулятор хранит данные, над которыми идёт работа, а IX — адрес, где эти данные лежат. Команда LDAX связывает их: читает в аккумулятор то, на что указывает IX.

Что произойдёт, если подать WE = 1 и Inc = 1 одновременно?

Сработает только инкремент: у Inc приоритет выше, и значение Data будет проигнорировано.