Уровень 21: Указатели
Открыть уровень →Где это в машине →
Задание
Цель: Подключите данные к ALU8.B через BusMUX: RAM → A, операнд ROM#1 → B. Важно: IX на этом уровне не подключается — его путь адресный (RAM.Addr), а не шина данных. Он заработает позже: выбор источника адреса через addrmux появится на уровнях 23+, первые задачи с IX — на уровнях 27–29.
На этом уровне в схему добавлен Индексный Регистр (IX) — специальный регистр для косвенной адресации.
Главная идея уровня: адрес может быть данным: IX хранит адрес, по которому процессор читает операнд, и это открывает косвенную адресацию — доступ к памяти по указателю, а не по зашитой константе. Так в машине появляется работа с массивами.
Путь к уровню
Компетенции, к которым ведёт этот уровень, и их уровни формирования.
Материалы по теме
- Указатели и индексные регистры (IX)
- Справка по ассемблеру →
- IndexRegister (IX) — индексный регистр
- RAM — оперативная память
Решение для самопроверки
Сначала попробуйте собрать схему сами. Решение ниже — способ свериться, если застряли или уже справились.
Что должно получиться: при Sel=0 ALU8.B получает данные из RAM, операнд приходит из ROM#1 — схема уровней 19–20 сохранена.
IX позволяет обращаться к памяти по адресу, который хранится в самом регистре (а не в операнде инструкции). Это полезно для работы с массивами и таблицами.
Физически «указатель» — это переключатель: BusMUX переключает источник данных для ALU8.B. Пока Sel=0, процессор видит на шине содержимое RAM по адресу из операнда. Если подать Sel=1, BusMUX передаст на ALU8.B непосредственный операнд из ROM#1 — этим сигналом позже управит дешифратор; прямое подключение IX к этому входу появилось на других уровнях. Меняется не адресная шина — меняется источник данных в пути данных АЛУ.
Задачи: 1. BusConstant = 2 → PC.Inc (как в уровнях 19–20). 2. ROM#1.Data → RAM.Addr (как в уровне 20). 3. Подключите данные к ALU8.B (порт 1). Используйте BusMUX: RAM.DataOut → BusMUX.A, ROM#1.Data → BusMUX.B. Sel пока не трогайте (Sel=0 выбирает данные RAM; Sel=1 выбрал бы непосредственный операнд ROM#1 — этим сигналом позже управит дешифратор).
IX уже подключён к тактовому сигналу (Clock). На уровнях 27–29 IX полностью работоспособен и управляется инструкциями: - LDX N — загрузить в IX значение N - INX — увеличить IX на 1 - LDAX — загрузить в Acc значение из RAM[IX] - STAX — сохранить Acc в RAM[IX]
Проверь себя
Почему на этом уровне IX не подключается к шине данных?
Путь IX — адресный (RAM.Addr), а не шина данных; управляющий сигнал Sel для переключения источника данных появится у дешифратора на следующих уровнях, первые задачи с IX — уровни 27–29.