sicp.io
5.1.1 · Язык описания регистровых машин

Язык регистровой машины и его команды

Метки ассемблируются, а assign, test, branch, goto, save, restore, perform и halt работают над регистровым файлом, стеком, флагом и счетчиком команд.

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

Какой общий протокол позволяет одному симулятору выполнять контроллеры для совершенно разных машин?

  • Представление меток контроллера отдельно от исполняемых инструкций
  • Вычисление источников констант, регистров, меток и операций
  • Выполнение инструкций assign, test, branch, goto, save, restore, perform и halt
  • Явное сохранение регистров, стека, flag, pc, таблицы операций и счетчика инструкций
  • Ограничение числа шагов выполнения машины без изменения контроллера

Проход ассемблера подсчитывает только списки инструкций и связывает каждую метку с позицией следующей инструкции. Затем машина сохраняет очищенную последовательность инструкций, таблицу меток, изменяемые ячейки регистров, стек, таблицу операций, pc, flag, состояние halt и число выбранных инструкций в виде явных данных.

Процедура evaluate-source задает единый смысл для форм const, reg, label и op. Процедура execute-one! выбирает уже ассемблированную инструкцию и применяет правило для ее тега. Контроллер алгоритма Евклида использует присваивание, проверку, ветвление, переход goto по метке и инструкцию perform. Контроллер подпрограммы дополнительно сохраняет и восстанавливает continuation, а затем возвращает управление по адресу в регистре. Симулятор регистровой машины в этом уроке выполняет указанный набор инструкций над явным состоянием машины.

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

    Машина алгоритма Евклида возвращает (complete 2 0 33 ((40 6) (6 4) (4 2) (2 0))). Машина с continuation возвращает (complete 10 #t 10).

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

    Проследите, как метки преобразуются в числовые позиции перед выполнением. В машине алгоритма Евклида отделите пару test и branch от цикла редукции из семи инструкций. В запуске подпрограммы найдите сохраненный внешний continuation, временный адрес возврата, restore и два перехода goto по целевому регистру.

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

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

    Добавьте инструкцию, которая записывает pc перед каждой выборкой, и запустите контроллер алгоритма Евклида со значениями 1071 и 462. Предскажите повторяющийся участок loop и итоговые значения регистров.

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

    Средства измерений размещаются в цикле симулятора, а не в каждой инструкции контроллера. Сам контроллер можно оставить без изменений.

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

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