Pergunta

Alguém sabe de um site onde eu posso encontrar uma lista de MIPS instruções / opcodes de 32 bits, com as seguintes características:

  • Claramente distingue entre opcodes real e macros em linguagem assembly
  • Descreve o comportamento de instrução incluindo diferenças dependendo do nível de privilégio.
  • Indica em que o conjunto de instruções revisão de instruções foi introduzido / revisto (por exemplo MIPS I, II MIPS, MIPS32, etc.)
  • Inclui instruções privilegiadas, como syscall.

Estou ciente de inúmeros sites que documentam "parte de" o conjunto de instruções, principalmente para fins de ensino. Eles tendem a deixar de fora ou descrever apenas parcialmente de ponto flutuante e instruções privilegiadas.

Caso você esteja se perguntando, eu estou olhando para o código Verilog para um subconjunto processador MIPS, e tentando descobrir exatamente em que medida está em conformidade com os conjuntos de instruções de quaisquer processadores MIPS reais! Obrigado por qualquer ponteiros.

Foi útil?

Solução

Eu só parcialmente podem responder à pergunta: eu recomendo Ver MIPS Run por Dominic Sweetman, se você ainda não estiver se referindo a ele. Eu tenho a primeira edição do livro, a segunda edição está agora em curso.

  • Tabela 8.2 lista cada código de operação e comportamento esperado, diferenciando macros assembler e listando as instruções que decompõem a. Infelizmente ele faz usuário não diferencia vs modo kernel.
  • Tabela 8.6 lista o nível ISA onde cada instrução foi introduzida, incluindo variantes obscuros como o LSI MiniRISC
  • syscall está presente na tabela, embora sem muita descrição

A primeira edição menciona o kernel. supervisor, e níveis de privilégio de usuário, mas não discute quais operações são permitidas em cada um. Eu não sei o que as mudanças foram feitas na segunda edição.

Outras dicas

Ok, eu encontrei algo!

MIPS oferece um conjunto de "MIPS 32 manuais de referência", que se referem ao mais recente, conjunto de instruções padronizado (MIPS32v2): aqui

Estes incluem quase tudo, exceto as informações sobre qual versão as instruções originou em: - (

Espere um pouco ...

Este site classe em Cornell inclui links para o que aparece para ser o mesmo manual, mas é na verdade um versão mais antiga do it , e Volume 2 dessa versão mais antiga de fato incluir informações sobre quando as instruções de onde introduzido pela primeira vez. Woohoo!

Por que MIPS remover estas informações a partir da documentação revisto? Não parece haver qualquer explicação no histórico de revisão.

não incluem descrições de instrução, mas a fonte do assembler GNU é provavelmente o mais detalhado você pode obter sobre o que estão disponíveis instruções sobre CPUs que específicas.

binutils olhada opcodes / MIPS - *. C

O manual de referência atual instrução de conjunto é livre on-line: MIPS® Architecture para programadores Volume II-A: A Instrução MIPS32® Definir Manual. Essa ligação é revisão 6.06 15 de dezembro de 2016. (ou seja, ele documenta MIPS32 Release 6 ).

Ele documenta todas as instruções de utilização e supervisor / kernel mode, e tudo de ponto flutuante, em detalhe completo, incluindo a sua codificação máquina-código, e com uma seção de Operação que mostra o que eles fazem. Ainda documentos Todas as instruções que foram removidos na MIPS32 versão 6. (MIPS32 Release 6 também se mudou em torno de um monte de opcodes, e isso está bem documentado).


Consulte https://www.mips.com/products/architectures/mips32/ para a versão mais recente. mips.com tem uma seção para "núcleos clássicos", mas que ainda parece ir única volta para MIPS32, não material histórico.


Amostra da seção "disponibilidade e compatibilidade" para balc (Filial e Link Compact: nenhum slot-delay ramo, e GRP31 é o destino implícita, liberando 26 bits para um offset<<2):

Esta instrução é introduzido por e exigidos a partir de Release 6. Release 6 de instruções BALC ocupa a mesma codificação pré-Release 6 SWC2 instrução. A instrução SWC2 foi movido para o COP2 grande código de operação em MIPS Release 6

Ou para LDXC1 fd, index(base) (Load doubleword indexado para Floating Point)

Esta instrução foi removido na versão 6. Exigido em todas as versões do MIPS64 desde MIPS64 Release 1. Não disponível em MIPS32 Release 1. Necessário em MIPS32 Release 2 e todas as versões posteriores do MIPS32. Quando necessário, sempre que necessário FPU está presente, se um de 32 bits ou de 64 bits FPU, se em 32 bits ou 64 bits FP Modo de Registo (FIRF64 = 0 ou 1, StatusFR = 0 ou 1).


Para o material histórico, eu encontrei o MIPS IV Conjunto de instruções revisão 3.2 De setembro de 1995 em uma página cmu.edu web. Ele lista quando foram introduzidas as instruções, por exemplo, MIPS I para div, MIPS III para dmult e outras instruções de 64 bits, MIPS II para ll / sc.

Este site descreve a instrução MIPS conjunto e a sua codificação. Eu não acho que ele é, porém completa.

MIPS web site também tem documentos técnicos sobre os vários núcleos.
Por exemplo, eu baixei o manual para o núcleo MIPS 4KE (documento # MD00103) "Processador usuário Núcleo Software Família da MIPS32® 4KE ™ Manual" eo capítulo 10 contém uma descrição detalhada do conjunto de instruções. Note que você tem que registrar para acessar os documentos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top