sicp.io
5.2.2 · Управление в регистре

Счетчик команд как управление в виде данных

Регистр pc определяет следующую команду, поэтому контроллер может продвигаться вперед, преобразуя полное состояние машины.

Вопрос для размышления

Как одна процедура перехода может представлять несколько команд машины?

  • Использование значения pc для выбора одной команды
  • Совместное продвижение регистров управления и данных
  • Распознавание состояния останова в контроллере

Состояние содержит pc, a, b, temp и cycles. Каждая ветка cond реализует ровно одну команду и записывает pc той команды, которая должна следовать далее.

Команда 0 проверяет b и либо входит в цикл вычисления остатка, либо переходит к останову на pc 5. Остальные команды перемещают значения через temp перед возвратом управления к проверке.

Код SICP587 из 1,048,576 байт UTF-8
Примеры
Результат
Вывод
Значение
Диагностика
Трасса выполнения0 / 0 событий
    Запуски происходят внутри браузера с отображением результата программы и трассы выполнения.
    Ожидаемый результат

    Первая программа останавливается со значением (5 2 0 0 2). Значение pc 5 обозначает останов, регистр a содержит 2, и завершились два цикла вычисления остатка.

    На что обратить внимание в трассе

    Проследите за повторяющейся последовательностью pc 0, 1, 2, 3, 4. Финальная проверка меняет pc напрямую с 0 на значение останова 5.

    Попробуйте сами

    Измените программу и сравните результат.

    Добавьте регистр, который подсчитывает каждую команду, а не только завершенные циклы вычисления остатка.

    Показать подсказку

    Каждая ветка cond должна увеличивать счетчик команд ровно один раз.

    Завершить этот урок

    В этой главе пройдено 0 из 23 урока0%