Исполнение ассемблированных команд по pc
Исполнитель команд может извлекать команду, указанную в pc, обновлять явный регистровый файл и следовать разрешенным числовым целям ветвления до halt.
Как один числовой счетчик команд координирует присваивание, проверку и передачу управления?
- Сохранение разрешенных команд в векторе контроллера с прямой индексацией
- Хранение n, product, flag и pc в явном регистровом файле
- Интерпретация команд assign, test, branch, goto и halt
- Ограничение выполнения и сохранение видимой истории состояний
Контроллер использует числовые цели, полученные в предыдущем уроке по ассемблеру. Вектор состояния представляет собой регистровый файл в порядке n, product, flag и pc. На каждом цикле извлекается controller[pc]. Команда assign или test продвигает pc вперед, branch либо выбирает 7, либо продвигается вперед, goto записывает 2, а halt возвращает регистры.
Первая программа выполняет полный контроллер при значении n, равном 2, и оставляет значение product, равным 2. Вторая программа записывает pc, n, product и flag после каждой команды, отличной от halt, начиная с n, равного 1. Оба запуска имеют ограничение в 40 шагов. Исполнитель команд обрабатывает assign, test, branch, goto и halt над вектором разрешенного контроллера.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Первая программа возвращает (0 2 #t 7). Вторая возвращает ((1 1 0 #f) (2 1 1 #f) (3 1 1 #f) (4 1 1 #f) (5 1 1 #f) (6 0 1 #f) (2 0 1 #f) (3 0 1 #t) (7 0 1 #t)).
Следите за vector-ref по текущему значению pc перед каждой командой. Найдите присваивания в product и n, переход flag в значение true при значении pc 2, продвижение ложной ветви к значению pc 4, возврат pc к значению 2 по goto и выбор halt на значении pc 7 истинной ветвью. Трассы выполнения фиксируют этот контроллер с ограничением в 40 шагов.
Измените программу и сравните результат.
Измените начальную константу n первого контроллера на 0. Предскажите конечные значения регистров и укажите, какие присваивания пропускает истинная ветвь.
Показать подсказку
После того как product становится равен 1, test устанавливает flag в значение true, а branch записывает 7 непосредственно в pc.