Почему в 32-битной архитектуре MIPS длина кода операции составляет 6 бит
Ниже приведен формат инструкции передачи данных для 32-разрядной архитектуры ARM и MIPS. 32-битная архитектура ARM имеет 4-битный код операции, потому что имеется 16 регистров (2^4=16).32-битная архитектура MIPS имеет 6-битный код операции. Разве это не должно быть 5 бит, учитывая, что в MIPS 32 регистра?
2 ответа
Количество регистров не имеет ничего общего с количеством битов кода операции, оно связано с количеством поддерживаемых инструкций (что все же не является жестким ограничивающим фактором, учитывая, что существуют такие методы, как префиксы инструкций).
С другой стороны, количество битов операнда (Rs и Rd на вашем рисунке) связано с количеством регистров (они 5-битные, потому что MIPS имеет 32 регистра, 2^5 = 32).
Таким образом, наличие 6 бит для кода операции означает только то, что вы можете кодировать до 2^6=64 различных инструкций, которые могут быть интерпретированы за один цикл декодирования.
Кодирование кода операции и кодирование поля регистра и непосредственное / константное кодирование отличаются друг от друга, с разными компромиссами между ними, поскольку увеличение одного делает другие меньше, когда они должны сосуществовать в одной инструкции.
Размер каждого поля определяет количество различных элементов, которые могут быть представлены в этом поле.
По сравнению с MIPS, например, RISC V сокращает непосредственное поле "const" в инструкциях I-типа до 12 бит, что позволяет использовать поля кода операции большего размера - 7 бит в поле кода операции базового набора команд, плюс 3 дополнительных бита в func. (поля также обычно меняются местами, справа налево):
+-------------------------------------------+
| imm:12 | rs1:5 | func:3 | rd:5 | opcode:7 | I-Type
+-------------------------------------------+
Эти дополнительные биты кода операции используются для:
- обрабатывать инструкции разной длины, RISC V допускает размеры:
- 16-битные инструкции, называемые сжатыми, которые можно смешивать
- 32-битный, используется как для 32-битных, так и для 64-битных процессоров
- 48 бит и больше (для них пока нет стандартизированных расширений)
- для долговечности и эволюции набора инструкций
- со временем инструкции добавляются, но редко удаляются, чтобы сохранить обратную совместимость
- расширить набор инструкций для конкретных нужд приложения и устройства
- что может случиться при встроенном использовании, где делаются расширения, которые никогда не предназначены для включения в официальные спецификации