Текущее справочное руководство с набором инструкций доступно бесплатно в Интернете: Архитектура MIPS® для программистов, том II-A: Руководство по набору инструкций MIPS32®. Эта ссылка относится к редакции 6.06 от 15 декабря 2016 г. (т. е. документирует выпуск 6 MIPS32).
Он документирует все инструкции пользователя и режима супервизора/ядра, а также все инструкции с плавающей запятой, во всех подробностях, включая их кодировку в машинном коде, и с разделом «Операции», который показывает, что они делают. Он по-прежнему документирует все инструкции, которые были удалены в версии 6 MIPS32. (В версии 6 MIPS32 также было перемещено множество кодов операций, и это хорошо задокументировано).
См. https://www.mips.com/products/architectures/mips32/. для последней версии. На mips.com есть раздел для классических ядер, но он по-прежнему относится только к MIPS32, а не к историческим вещам.
Пример раздела доступности и совместимости для balc
(Branch and Link Compact: нет слота задержки перехода, а GRP31 является неявным пунктом назначения, освобождая 26 бит для offset<<2
):
Эта инструкция введена и требуется в Выпуске 6. Инструкция BALC
Выпуска 6 использует ту же кодировку, что и инструкция SWC2
до Выпуска 6. Инструкция SWC2
была перемещена в основной код операции COP2
в версии 6 MIPS.
Или для LDXC1 fd, index(base)
(загрузить двойное слово, индексированное с плавающей запятой)
Эта инструкция была удалена в версии 6. Требуется во всех версиях MIPS64, начиная с версии 1 MIPS64. Недоступна в версии 1 MIPS32. Требуется в версии 2 MIPS32 и всех последующих версиях MIPS32. При необходимости требуется всякий раз, когда присутствует FPU, будь то 32-битный или 64-битный FPU, будь то в 32-битном или 64-битном режиме регистрации FP (FIRF64 = 0 или 1, StatusFR = 0 или 1).
Что касается исторических материалов, я нашел Набор инструкций MIPS IV, редакция 3.2, сентябрь 1995 г. на веб-странице cmu.edu. В нем указано, когда были введены инструкции, например. MIPS I для div
, MIPS III для dmult
и других 64-битных инструкций, MIPS II для ll
/sc
.
Хорошим кратким справочником по псевдокоду о действии каждой инструкции является https://inst.eecs.berkeley.edu/%7Ecs61c/resources/MIPS_help.html. Он не включает подробности кодирования, но точно описывает влияние инструкций ветвления и перехода на программный счетчик. (Что несколько сложно: они являются относительными или абсолютными по секциям для слота задержки перехода.)
Однако он не является полным даже для целочисленных инструкций MIPS I: в нем отсутствуют вспомогательные инструкции невыровненной загрузки LWL и LWR и соответствующие хранилища SWL/R, которые присутствовали в MIPS I. Он также не включает никаких материалов FP или более поздних инструкций MIPS. как mul
(только mult
). Я не знаю, чего еще может не хватать; Я не сравнивал его с полным списком.
Руководство MIPS-IV, указанное выше, подтверждает, что lwl
/lwr
были доступны в MIPS I (и документирует, что к ним применяется ограничение слота задержки загрузки).
person
Peter Cordes
schedule
22.11.2017
syscall
передает управление супервизору, но сам не требует привилегий для выполнения, что, конечно, важно. Я не уверен, что в MIPS IV (руководстве, которое я искал) есть какие-либо инструкции, которые всегда требуют привилегий, или, может быть, это потому, что в руководстве MIPS IV, которое я просмотрел, говорится, что оно определяет только инструкции пользовательского режима. (Но все они могут быть реализованы как операции процессора управления системой (такие же, как сопроцессор 0?), а не настоящие инструкции ЦП. Доступ к CoProc 0 из пользовательского режима зависит от другой настройки бита, по-видимому, от быстрого поиска по привилегиям.) - person Peter Cordes   schedule 07.01.2021