Микропрограммирование в MIPS - PullRequest
3 голосов
/ 04 июля 2011

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

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

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

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

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

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

2 голосов
/ 04 июля 2011

Это пример того, как загрузить 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 действительно опрятен и прост в освоении!Интересный факт: первая игровая приставка использовала процессор 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:

...