О потенциале расширения системы команд
Мы неоднократно утверждали что наш микропроцессор имеет уникальные возможности расширения и что по этому показателю мы лидируем среди всех существующих архитектур. Давайте попробуем вместе разобраться — насколько великии возможности расширения и далеки ли от истины наши утверждения. Для начала определимся с возможными путями расширения системы команд — это префиксы, свободные биты в «аргументах» некоторых инструкций и свободные коды операций. В этой статье мы не будем рассматривать возможности расширения системы команд через префиксы и зарезервированные биты, а рассмотрим самый простой способ расширения — использование незанятых кодов операций. Итак, список «дырок», которые доступны для расширения системы команд версии 1.1
Первый свободный регион расположен в диапазоне с 0x10 по по 0x1f. Этот регион находится на стыке однобайтовых и двухбайтовых операций и при необходимости мы можем отдать его под однобайтовые или двухбайтовые инструкции без усложнения логики декодера. Мы имеем 16 свободных позиций для одно или двухбайтовых инструкций. Начало положено.
Следующий свободный блок находится в диапазоне двухбайтовых инструкций. Здесь меньшее поле для маневра и мы имеем 8 зарезервированных двухбайтовых кодов операций.
Несмотря на то, что зарезервированный блок 0x78 находится на границе двух и трехбайтовых инструкций, он является частью блока 0x70 и скорее всего будет использован для двухбайтовых инструкций.
Следующий свободный блок кодов операций попадает на границу трех и четырехбайтовых инструкций и содержит 32 зарезервированных кода операции. Мы рассчитываем использовать этот блок для расширения режимов адресации стандартных инструкций и добавления новых логических операций и команд.
Последние 16 кодов операций зарезервированы для дальнейшего расширения. Инструкции из этого блока могут занимать от 5 байт и больше. Пока мы не определились с максимальной длиной инструкции — в случае простейших микроконтроллеров можно остановиться на 5 байтах, что позволяет за один такт выбирать инструкции из двухпортового кэша. Но мы можем представить и более длинные инструкции, длина которых может быть ограничена лишь физическими возможностями устройства и здравым смыслом.
Как видно из рисунков, даже на уровне незанятых кодов операций, наша система команд имеет беспрецендентые возможности для расширения. Добавьте к этому возможность использования префиксов (свободные опкоды в диапазоне от 0x00 до 0x0f мы пока не раскрываем, но они есть). Наконец, множество определённых операций имеют свободные биты во втором и третьем битах, что позволяет не только расширить режими адресации, но и частично поменять логику операций.
В заключение хотелось бы отметить, что некоторые расширения, которыми оперируют современные высокопроизводительные микропроцессоры, мы планируем поместить в отдельные устройства (по типу сопроцессоров, обменивающихся с центральным процессором с помощью сообщений), но это тема для отдельной и даже не одной статьи.
Если вы нашли неточности в наших рассуждениях или готовы аргументированно возразить или вам известна архитектура, имеющая больший потенциал для расширения, то приглашаем вас к дискуссии в комментариях к этой статье.
Оставить комментарий