Контракты инструкций по данным, стеку и управлению
Регистры, считываемые и записываемые каждой инструкцией, классифицируются, а микроконтроллер использует все поддерживаемые инструкции и формы.
Что необходимо знать об отдельной инструкции перед анализом полного контроллера?
- Сведение чтений и записей регистров для каждого тега инструкции
- Различение эффектов на стек и эффектов на регистры
- Различение следующего, условного, прямого, косвенного управления и завершения halt
- Распознавание источников констант, регистров, меток и операций
- Выполнение контроллера, содержащего все инструкции из поддерживаемого подмножества
Процедура instruction-summary обрабатывает текст контроллера как данные. Она рекурсивно извлекает регистровые источники из выражений операций, определяет приемник для assign и restore, фиксирует эффекты push и pop, а также классифицирует способ изменения pc. Инструкция branch считывает flag вместо обычного регистра, переход goto по метке является прямым, а переход goto по регистру считывает свою цель из регистра.
Затем микроконтроллер сопоставляет эту же сводку с реальным выполнением. Он присваивает константы и результат операции, сохраняет и восстанавливает val, помещает позицию метки в continue, совершает косвенный переход через этот регистр, выполняет проверку, совершает ветвление, выполняет наблюдаемую операцию и завершает работу по halt. Эта сводка служит точным справочником для данного конечного подмножества симулятора.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Программа сводки возвращает контракты для assign, test, branch, goto, save, restore, perform и halt в указанном порядке. Микроконтроллер возвращает (complete 10 #t 12 (10)).
Сравните каждый статический контракт с выполненным переходом. В частности, проследите за save и restore без видимого итогового значения в стеке, источником метки в continue, косвенным переходом goto, проверкой с установкой flag и ветвлением по истине, пропускающим присваивание -1.
Измените программу и сравните результат.
Добавьте второй переход goto с источником метки и инструкцию perform с двумя операндами в регистрах. Обновите статические сводки перед запуском контроллера.
Показать подсказку
Прямой переход goto по метке не считывает обычные регистры. Инструкция perform считывает каждый регистр, рекурсивно найденный внутри ее источника операции.