Микропрограммирование в MIPS

Я изучаю микропрограммирование и не понимаю, что такое микро-инструкция. Я использую архитектуру MIPS. Мои вопросы следующие

Скажем, например, у меня есть инструкция ДОБАВИТЬ, как бы выглядели микро-инструкции для этого? Сколько есть микро-инструкций для инструкции добавления. Где-нибудь в сети я могу увидеть список микро-инструкций для основных инструкций MIPS?

Как определить битовую строку для микропрограммированной инструкции ADD?

2 ответа

Микропрограммирование - это метод реализации архитектуры сложного набора команд (например, x86) в терминах более простых "микрокоманд". MIPS - это архитектура набора команд RISC, которая обычно не реализуется с помощью микропрограммирования, поэтому для инструкции ADD существуют нулевые микроинструкции.

Чтобы ответить на ваш конкретный вопрос, нужно знать, каково определение вашей конкретной микроархитектуры.

Это пример того, как загрузить EPC в один из регистров и добавьте в него 4 байта:

lw      t0, 20(sp)      // Load EPC
addi    t0, 4           // Add 4 to the return adress
sw      t0, 20(sp)      // Save EPC

Существует множество инструкций, которые вы можете использовать, вы можете ознакомиться с инструкцией MIPS здесь. По моему скромному мнению, MIPS действительно опрятен и прост в освоении! Интересным фактом является то, что первая Playstation использовала процессор MIPS.

Пример инструкции

  • lw = загрузить слово
  • la = адрес загрузки
  • sw = сохранить слово
  • addi добавить добавить

Тогда у вас есть много условных инструкций, таких как:

  • bne = ветвь не равна
  • bnez = ветвь не равна нулю

И с этим вы используете j прыгать по адресу.

Вот пример из обработчика исключений, который я однажды написал для MIPS, это обработчик внешнего источника:

External: 
        mfc0    t0, C0_CAUSE        // We could aswell use 24(sp) to load CAUSE
        and     t0, t0, 0x02000     // Mask the CAUSE
        bnez    t0, Puls            // If the only character left is 
                                    // "not equal zero" jump to Puls

        j   DisMiss                 // Else jump to DisMiss

В приведенном выше примере я определяю точку входа под названием External что я могу прыгнуть, как я делаю с DisMiss Зацикливаясь, вы обычно прыгаете к себе.

Здесь также есть несколько других инструкций:

  • mfc0 = перейти от сопроцессора 0

Чтобы работать с ярлыками, я бы посоветовал вам проверить этот вопрос / ответ.

Вот пара ресурсов по микропрограммированию с MIPS:

Другие вопросы по тегам