Немножно потрассировал микрокод. Декремент и инкремент вычисляются практически одинаково за одну микроинстукцию, отличается только фаза выдачи адреса в регистр - всегда с шины X, до модификации как входной аргумент АЛУ, или позже, после модификации как результат АЛУ, тоже выданный на шину X.
Для инструкций типа mov (R1), R0 выполняются следующие микрооперации:
- чтение кода инструкции (иногда опережающий, еще до выполнения
предыдущей инструкции), проверка прерываний
- первичное декодирование операции
- запуск чтения данных источника (*R1)
- ожидание данных и сохранение во временном регистре R11
- опережающий запуск чтения следующей инструкции
- переписывание результата из R11 в R0
Для инструкций типа mov (R1)+,(R0) следующие микрооперации:
- чтение кода инструкции (опережающий или нет, зависит от предыдущей команды), проверка прерываний
- первичное декодирование операции
- запуск чтения данных источника (*R1), одновременный инкремент R1
- ожидание данных и сохранение во временном регистре R11
- запуск записи данных из R11 по (R0)
- ожидание завершения записи
Тут нет опережающего запуска чтения следующей команды, запись в приоритете.
Полный лог в пост не влез, поместил в приложененный файл. Легенда:
- plr() - это начало исполнения микроинструкции
- clk: - номер такта частоты CLC (ниспадающий фронт)
- В начале листинг тестового кода, первая колонка - такт начала микрооперации запуска чтения кода инструкции
- вторая колонка - такт начала микороперации сохранения результата
Краткие выводы - в 1801ВМ1 есть зачатки параллельного конвеера (я там еще скрыл некоторые промежуточные подробности работы матрицы PLM, там свой конвеер, потому что матрица медленная, ей нужно два такта только для выработки кода микрооперации plr от входных параметров), скорость выполнения инструкции может зависеть от предыстории - был опережающий запуск чтения кода инструкции или нет, ну и от скорости шины тоже зависит.




Ответить с цитированием
