MMIX

MMIX
Designer Donald Knuth
Bits 64 bits
Lançar 1999
Arquitetura RISC
Codificação Fixo
Endianness Big endian
Livre sim
Registros
Uso geral 256
32 registros especiais

MMIX pronunciado /ɛm.mɪks/ e geralmente composto em uma fonte para largura fixa ( MMIX) é um conjunto de instruções RISC de 64 bits e arquitetura de TI projetada por Donald Knuth , com assistência significativa de John LeRoy Hennessy , um dos designers do Arquitetura MIPS , e Richard L. Sites , um dos designers da arquitetura Alpha . O próprio Knuth apresenta este projeto nestas palavras:

“  MMIXÉ um computador destinado a ilustrar aspectos da programação em nível de máquina. Em meus livros The Art of Computer Programming , ele substitui o MIX , uma máquina do estilo dos anos 1960 que desempenhava esse papel ... Tentei projetar MMIXsua linguagem de máquina para ser simples, elegante e fácil de aprender. Ao mesmo tempo, tive o cuidado de incluir todas as complexidades necessárias para alcançar o alto desempenho na prática, de modo que MMIXpudesse, em princípio, ser construído e possivelmente competir com algumas das linguagens gerais mais rápidas disponíveis comercialmente ”

Arquitetura

Em termos de arquitetura de TI MMIXé um computador RISC de 64 bits com 256 registros gerais de 64 bits e registros de 32 bits 64 de uso específico. MMIXé uma máquina big-endian com instruções de 32 bits e um espaço de endereço virtual de 64 bits. Seu conjunto de instruções inclui 256 opcodes, um dos quais está reservado para uso futuro em potencial. Os números de ponto flutuante são implementados de acordo com o padrão IEEE 754 .

Instruções

As instruções MMIXsão todas definidas e utilizáveis ​​a partir de seu opcode , que é um número de um byte , geralmente escrito na forma hexadecimal . No entanto, para melhorar a legibilidade do código de montagem, uma etiqueta mnemônica exclusiva é associada a cada um dos códigos. Assim, o rótulo ADDé equivalente ao número de instrução 20 16 , que é o código do operador da adição. A maioria das instruções são da forma operador XYZ , onde o operador especifica a instrução, X é um registro usado como um acumulador , ou seja, usado para armazenar o resultado da instrução, e Y e Z denotam os registros usados ​​como operandos para a instrução. Por exemplo meios atribuir para o Soma (aritmética) do número armazenado no registo e o número . ADD $0,$1,3$0$13

A maioria das instruções pode assumir valores imediatos ou usar o conteúdo de um registro; assim, um único mnemônico pode corresponder a um ou dois códigos de operação.

Normalmente, os programas MMIX são construídos usando a linguagem Assembly MMIXAL . O exemplo abaixo é um programa escrito em MMIXALque imprime Hello world  :

Main GETA $255,string ; Get the address of the string ; in register 255. TRAP 0,Fputs,StdOut ; Put the string pointed to ; by register 255 to file StdOut. TRAP 0,Halt,0 ; End process. string BYTE "Hello, world!",#a,0 ; String to be printed. ; #a is newline, ; 0 terminates the string.

Registros

Em um chip de arquitetura MMIXexistem 256 registros gerais, que são acessados ​​por suas referências anotadas de $0a $255e 32 registros especiais. Dois dos registros especiais, rLe rG, determinam quais são locais e quais são globais. Todos os registros, de $0a são registros locais. Os registros de [rL] a [rG] -1 são registros marginais que sempre retornam 0 se forem usados ​​como fonte em uma operação. Usar um registro marginal como destino de uma operação irá disparar um incremento automático de para incluir aquele registro. Todos os registros de [rG] a são chamados de registros globais e não são salvos na pilha de registros. $(rL-1)rL$255

Pilha de registro local

A pilha de registro local fornece a cada procedimento seus próprios registros locais rL, anotados de $0a . Se um procedimento é chamado, os registros locais são adicionados à pilha. Os argumentos do procedimento são colocados nos registros locais restantes. Quando um procedimento termina, ele remove os registros adicionados anteriormente. Como existem apenas 256 registros físicos, pode ser necessário armazenar parte da pilha na memória. Esta ação é implementada com os registros especiais e que registram que parte da pilha de registros locais está armazenada e quanto ainda está nos registros físicos locais. O registro da pilha também fornece procedimentos de link rápido (in) . $(rL - 1)rOrS 

Registros especiais

Os 32 registros especiais da arquitetura física são definidos da seguinte forma:

  1. rB, o registro de inicialização (gatilho), com um b como em inglêsb ootstrap  :
    quando ocorre um disparo, rBé atribuído o valor armazenado no registro $255e o registro $255é atribuído ao valor armazenado no registro rJ, salvando assim rJem um registro geral.
  2. rDO registro de ividendo:
    A divisão inteira sem sinal usa este registro como a metade esquerda do numerador (dividendo) codificado em 128 bits que é dividido pelo denominador (divisor).
  3. rE, Register the e Psilon ou register to margin e rreur:
    Usado na comparação de números de ponto flutuante que toleram uma margem de erro
  4. rH, denominado himult register  :
    O termo himult , pronunciado /haɪ.mʌlt/ , é a contração da multiplicação alta em inglês , literalmente multiplicação alta , onde haute sugere a parte que contém os bits mais significativos de um número armazenado cuja representação é distribuída por vários registra. Este registro é usado para armazenar a metade direita do produto da multiplicação inteira sem sinal .
  5. rJ, o registro de retorno de salto, com um j como em inglêsj ump  :
    Este registro é usado por PUSHe POPpara salvar o endereço da próxima instrução ao retornar de a PUSH.
  6. rMé a máscara de registro de multiplexação.
    Este registro é usado pelas instruções de multiplexação MUXe MUXI.
  7. rRé o registro r este:
    Foi atribuído o valor do restante quando as divisões realizada por DIV, DIVI, DIVU, DIVUIou FDIV.
  8. rBB, o registro de inicialização do kernel , com BB como ob ootstrap b é  :
    Durante uma captura pela instrução TRAP, trap que designa um dispositivo de captura em inglês, rBBé atribuído o registro $255e o registro $255é atribuído ao valor armazenado em rJ, salvando assim rJem um registro geral.
  9. rCO ciclo c ompteur:
    É incrementado a cada ciclo .
  10. rN, o registro do número de série:
    Uma constante que identifica o processador MMIXatual.
  11. rOO registro de deslocamento da pilha
    Este registro é usado para implementar a pilha de registros.
  12. rS, com um s comos tack , stack em inglês:
    Este é o registrador usado para armazenar um ponteiro para o endereço atual da pilha.
  13. rI, O contador de i nterval:
    Ele é decrementado cada ciclo e desencadeia uma interrupção quando chega a zero.
  14. rT, com um t gostot rap , dispositivo de captura em inglês:
    É usado para armazenar o endereço do vetor de gatilho.
  15. rTT, com um t também em referência ao inglêst rap , mas é neste momento que o registro de trigger dinâmico ( registrador de endereço de trap dinâmico )
    é usado para armazenar o endereço do trigger de vetor .
  16. rK, O registo de interrupção máscara, interrupção mas k registar :
    Este registo é usado para interrupções de gatilho e específicos gatilho.
  17. rQO registro re q uête interrupt:
    É usado para registrar as interrupções conforme e quando ocorrem.
  18. rUO contador de u sing:
    A contagem do número de instruções executadas é armazenada no registrador.
  19. rVA tradução de registro v irtuelle:
    É usada para a tradução entre endereços virtuais e físicos. Ele armazena o número de segmentos , o tamanho alocado para cada segmento, a posição da raiz da tabela de páginas
    e o número de espaços de endereço  (in) .
  20. rGO registro de limite g lobal:
    Todas as referências de registros gerais codificados com um maior ou igual ao limite definido rGreferem-se a registros globais.
  21. rL, O limite de registro l ocal:
    Todas as referências Cadastro Geral codificados com um número estritamente inferior ao limiar definido por rLse referir aos registos locais.
  22. rAo registrador de status tem rithmétique:
    este registrador é usado para o gerenciamento de registro de exceções aritméticas, ligando e desligando. Essas exceções incluem estouro aritmético  (in) e divisão por zero .
  23. rFo registro de posicionamento de erro:
    Quando o sistema detecta que uma instrução não foi executada corretamente, o endereço da instrução é armazenado neste registro. O mnemônico f está relacionado ao inglêsf ailure registo local , onde registo de localização de falha pode ser traduzido como fracasso. Em francês, podemos nos referir às palavras f redaine ou f aux-pas.
  24. rP, A previsão de registro  :
    É usado pela instrução CSWAPde permutação condicional .
  25. rW, o
    registro de localização de interrupção: Este registro é usado durante um disparo para armazenar o endereço da instrução após aquela que foi interrompida. O W refere-se ao nome em inglêsw registro interrompido , literalmente o registro onde foi interrompido .
  26. rX, O registro e x ecution (trigger):
    Este registro é usado quando o trigger para armazenar a instrução que foi interrompida.
  27. rYoperando Y (trigger):
    Este registro é utilizado, durante um trigger, para armazenar o primeiro operando da instrução. Y refere-se ao nome genérico comum em matemática.
  28. rZoperando Z (trigger):
    Este registro é utilizado, durante um trigger, para armazenar o primeiro operando da instrução. Z refere-se ao nome genérico comum em matemática.
  29. rWW, o registrador de localização de interrupção (captura):
    É utilizado, durante uma captura, para armazenar o endereço da instrução após aquela que foi interrompida. O W se refere à palavra onde , como antes.
  30. rXX, o registro de execução (captura):
    serve, durante uma captura, para armazenar a instrução que foi interrompida.
  31. rYY, o operando Y (captura):
    É utilizado, durante uma captura, para armazenar o operando Y da instrução interrompida.
  32. rZZ, o operando Z (captura):
    É utilizado, durante uma captura, para armazenar o operando Z da instrução interrompida.

Implementação de hardware

Atualmente não há implementação de hardware da arquitetura do conjunto de instruções MMIX. No entanto, o projeto fpgammix fornecido implementa uma implementação Verilog , o que abre a possibilidade de usá-lo em um circuito lógico programável .

Ferramentas de software

A arquitetura do conjunto de instruções MMIXpode ser usada em uma variedade de ferramentas de software para desenvolvimento de software e pesquisa de arquitetura de computador.

Simuladores e montadores

Knuth desenvolveu um pacote de software nomeado que MMIXwarecompreende um simulador de máquina comportamental simples e MMIXAL, software de montagem, um conjunto de testes, programas de amostra, documentação abrangente e um simulador de pipeline de arquitetura MMIX.

Andrew Pochinsky , membro da equipe do Centro de Pesquisa Teórica em Física do Instituto de Tecnologia de Massachusetts , desenvolveu MMIXXum pacote que implementa um servidor gráfico baseado em X11 . Ele pode ser combinado com a máquina virtual MMIXwarepara fornecer uma tela de 640 × 480 pixels em cores reais para Linux e Unix .

Compilador

O projeto GNU Compiler Collection (GCC) inclui algumas vantagens MMIXpara seus compiladores C / C ++ , originalmente desenvolvidos por Hans-Peter Nilsson , e faz parte da distribuição padrão do projeto desde o final de 2001 . Ele continua a ser desenvolvido e mantido ativamente por voluntários.

O conjunto de ferramentas existentes deveria, teoricamente, possibilitar a compilação, construção e inicialização de um kernel de sistema operacional como o Linux em um processador, MMIXcaso existisse uma implementação de hardware.

Veja também

links externos

Notas e referências

Tradução

  1. (in) "  MMIXé um computador destinado a ilustrar aspectos da programação no nível da máquina. Em meus livros The Art of Computer Programming , ele substitui o MIX , a máquina do estilo dos anos 1960 que antes desempenhava esse papel ... Eu me esforcei para projetar de MMIXforma que sua linguagem de máquina fosse simples, elegante e fácil de aprender. Ao mesmo tempo, tive o cuidado de incluir todas as complexidades necessárias para obter alto desempenho na prática, de modo que MMIXpudesse, em princípio, ser construído e até mesmo competitivo com alguns dos computadores de uso geral mais rápidos do mercado.  "
  2. Aqui, o reverso é usado como uma tradução de back end , que expressa uma ideia de fundo, em oposição a um front end que será traduzido anverso , expressando a ideia de primeiro plano.

Referências

  1. (em) Donald E. Knuth , mmixware: A RISC Computer for the Third Millennium , vol.  1750, Heidelberg, Springer-Verlag , col.  "  Notas de aula no tutorial de ciência da computação  ",Outubro de 1999( ISBN  3-540-66938-8 ).
  2. Códigos Op MMIX
  3. Site oficial do fpgammix
  4. Site oficial do MMIXware

links externos