sicp.io
5.1.6 · Сводка инструкций

Контракты инструкций по данным, стеку и управлению

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

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

Что необходимо знать об отдельной инструкции перед анализом полного контроллера?

  • Сведение чтений и записей регистров для каждого тега инструкции
  • Различение эффектов на стек и эффектов на регистры
  • Различение следующего, условного, прямого, косвенного управления и завершения halt
  • Распознавание источников констант, регистров, меток и операций
  • Выполнение контроллера, содержащего все инструкции из поддерживаемого подмножества

Процедура instruction-summary обрабатывает текст контроллера как данные. Она рекурсивно извлекает регистровые источники из выражений операций, определяет приемник для assign и restore, фиксирует эффекты push и pop, а также классифицирует способ изменения pc. Инструкция branch считывает flag вместо обычного регистра, переход goto по метке является прямым, а переход goto по регистру считывает свою цель из регистра.

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

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

    Программа сводки возвращает контракты для assign, test, branch, goto, save, restore, perform и halt в указанном порядке. Микроконтроллер возвращает (complete 10 #t 12 (10)).

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

    Сравните каждый статический контракт с выполненным переходом. В частности, проследите за save и restore без видимого итогового значения в стеке, источником метки в continue, косвенным переходом goto, проверкой с установкой flag и ветвлением по истине, пропускающим присваивание -1.

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

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

    Добавьте второй переход goto с источником метки и инструкцию perform с двумя операндами в регистрах. Обновите статические сводки перед запуском контроллера.

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

    Прямой переход goto по метке не считывает обычные регистры. Инструкция perform считывает каждый регистр, рекурсивно найденный внутри ее источника операции.

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

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