где я могу найти описание * всех * инструкций MIPS, - PullRequest
12 голосов
/ 26 сентября 2008

Кто-нибудь знает веб-сайт, где я могу найти список 32-битных инструкций / кодов операций MIPS со следующими функциями:

  • Четко различает реальные коды операций и макросы на ассемблере
  • Описывает поведение инструкции, включая различия в зависимости от уровня привилегий.
  • Указывает, в какой редакции набора команд была введена / изменена инструкция (например, MIPS I, MIPS II, MIPS32 и т. Д.)
  • Включает привилегированные инструкции, такие как syscall.

Мне известны многочисленные веб-сайты, которые документируют «часть» набора инструкций, в основном для целей обучения. Они имеют тенденцию опускать или только частично описывать инструкции с плавающей запятой и привилегированные.

Если вам интересно, я смотрю код Verilog для подмножества процессора MIPS и пытаюсь выяснить, в какой степени он соответствует наборам команд любых реальных процессоров MIPS! Спасибо за любые указатели.

Ответы [ 5 ]

6 голосов
/ 26 сентября 2008

Хорошо, я что-то нашел!

MIPS предлагает набор «Справочных руководств MIPS 32», которые ссылаются на последний стандартизированный набор инструкций (MIPS32v2): здесь

К ним относится практически все, кроме информации о том, в какой версии были созданы инструкции: - (

ПОДОЖДИТЕ СЕКУНДУ ...

Этот веб-сайт класса в Корнелле содержит ссылки на то, что выглядит как то же руководство, но на самом деле является более старой версией этого и Том 2 этой более старой версии фактически содержит информацию о том, когда инструкции были впервые введены. Woohoo!

Почему MIPS удаляет эту информацию из пересмотренной документации? Кажется, в истории редакций нет никаких объяснений.

3 голосов
/ 26 сентября 2008

Не включает описания инструкций, но источник ассемблера GNU, вероятно, настолько подробен, насколько вы можете узнать о том, какие инструкции доступны для каких конкретных процессоров.

Получите binutils и посмотрите коды операций / mips - *. C

3 голосов
/ 26 сентября 2008

Я могу лишь частично ответить на вопрос: я бы порекомендовал См. MIPS Run от Доминика Свитмана, если вы еще не ссылались на него. У меня есть первое издание книги, второе издание является действующим.

  • Таблица 8.2 перечисляет каждый код операции и ожидаемое поведение, выделяя макросы ассемблера и перечисляя инструкции, на которые они разлагаются. К сожалению, он не различает режим пользователя и режима ядра.
  • В таблице 8.6 приведен уровень ISA, на котором была введена каждая инструкция, включая такие непонятные варианты, как LSI MiniRISC
  • syscall присутствует в таблице, хотя в нем мало описания

В первом издании упоминается ядро. Супервизор и уровни привилегий пользователя, но не обсуждает, какие операции разрешены в каждом. Я не знаю, какие изменения были внесены во втором издании.

1 голос
/ 22 ноября 2017

Текущее справочное руководство по набору инструкций бесплатно: Архитектура MIPS® для программистов Том II-A: Инструкция MIPS32® Установить ручной . Эта ссылка - Редакция 6.06 15 декабря 2016 г. (т.е. это документы MIPS32, выпуск 6 ).

Он документирует все инструкции пользователя и режима супервизора / режима ядра, а также все с плавающей точкой, во всех подробностях, включая кодирование их машинного кода, а также раздел «Операция», в котором показано, что они делают. Он по-прежнему документирует все инструкции, которые были удалены в выпуске 6 MIPS32 (выпуск 6 MIPS32 также перемещал множество кодов операций, и это хорошо задокументировано).


См. https://www.mips.com/products/architectures/mips32/ для последней версии. На mips.com есть раздел, посвященный «классическим ядрам», но, похоже, он все еще возвращает нас к MIPS32, а не к историческим вещам.


Пример раздела «доступность и совместимость» для balc (Branch and Link Compact: нет интервала задержки ветвления, а GRP31 - неявное назначение, освобождающее 26 бит для offset<<2):

Эта инструкция введена и требуется начиная с версии 6. Инструкция по выпуску 6 BALC занимает ту же кодировку, что и предварительная версия 6 инструкция SWC2. Инструкция SWC2 была перемещена в COP2 основной код операции в MIPS Release 6

или для LDXC1 fd, index(base) (загрузить двойное слово, индексируемое в число с плавающей запятой)

Эта инструкция была удалена в Выпуске 6. Требуется во всех версиях MIPS64 начиная с MIPS64 Release 1. Недоступно в MIPS32 Release 1. Требуется в MIPS32 Release 2 и все последующие версии 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.

0 голосов
/ 26 сентября 2008

Этот веб-сайт описывает набор команд MIPS и их кодирование. Я не думаю, что это завершено, хотя.

На веб-сайте MIPS также имеются технические документы о различных ядрах.
Например, я скачал руководство для ядра MIPS 4KE (документ № MD00103) «Руководство пользователя программного обеспечения семейства процессоров MIPS32® 4KE ™», а глава 10 содержит подробное описание набора инструкций. Обратите внимание, что для доступа к документам вам необходимо зарегистрироваться.

...