Большинство эмуляторов хранят количество циклов, которое выполняет конкретная инструкция, в таблице поиска, а затем при необходимости добавляют любые условные циклы (например, при пересечении границ страницы).
Мне интересно, есть ли способ процедурно определить количество циклов, которые будет выполнять инструкция, основываясь исключительно на режиме адресации и чтении/записи памяти.
Чтобы привести пример, я заметил, что все инструкции, использующие немедленную или относительную адресацию, занимают 2 цикла.
Все инструкции с нулевой страницей занимают 3 такта, плюс еще 2 такта при изменении памяти на месте.
Все индексированные инструкции с нулевой страницей занимают 4 такта плюс еще 2 такта при изменении памяти на месте.
...И так далее.
Итак, есть ли какой-нибудь полностью задокументированный процедурный способ определения количества циклов для инструкции, подобной приведенной выше? Существуют ли исключения, которые нарушили бы детерминизм в такой формуле?