ÍNDICE DE CONTEÚDO
- Arquitetura de Conjunto de Instruções MIPS
- Primeira Instrução MIPS
- Compilação de Expressões no MIPS
- Convertendo uma instrução com Array no MIPS
- Armazenando um valor em Array no MIPS
- Instruções LW e SW com Array no MIPS
- Instrução IF Simples no MIPS
- Instrução IF Composto no MIPS
- Instrução SLT no MIPS
- Operações Lógicas no MIPS
- Operação Lógica AND no MIPS
- Operação Lógica OR no MIPS
- Operação Lógica NOT no MIPS
- Endereços de Memória no MIPS
- Operandos Imediatos e Constantes no MIPS
- Compilando Arrays com índice variável no MIPS
- Testando as instruções MIPS no MARS
- Executando um Array no MARS para MIPS
- Sinal e Overflow no MIPS
- Compilando instruções com ou sem Sinal, Overflow e Imediato no MIPS
- Compilando While no MIPS
- Compilando Switch/Case no MIPS
- Compilando Funções e Procedimentos no MIPS
- Compilando Procedimentos Recursivos e Aninhados no MIPS
- Detalhamento da Compilação de Procedimentos no MIPS
- MIPS: Instruções de Multiplicação
- MIPS: Instruções de Divisão
- MIPS: Subtração e outras instruções
- Compilando o comando FOR no MIPS
- Ponto Flutuante no MIPS
- Convertendo Código de Máquina em Assembly MIPS – Parte 1
- MIPS: Resolução dos exercícios – Parte 1
- MIPS: Resolução de Exercícios Parte 2
- Compilando Potência no MIPS
- Criando e Manipulando Matrizes no MIPS
Oi pessoal! Hoje dou início a uma nova série de artigos. Falarei especificamente sobre a Arquitetura do Conjunto de Instruções MIPS.
Introdução – O MIPS
Não podemos confundir Arquitetura do Conjunto de Instruções MIPS com MIPS, Milhões de Instruções por Segundo. O MIPS que tratamos aqui é uma Arquitetura de Conjunto de Instruções (Instruction Set Architecture – ISA), desenvolvida pela empresa MIPS Computer Systems, que hoje é chamada de MIPS Technologies (link). MIPS significa Microprocessor Without Interlocked Pipeline Stages (Microprocessador Sem Estágios Intertravados de Pipeline).
A empresa foi fundada em 1984 por um grupo de pesquisadores da Universidade de Stanford e o foco era os microprocessadores com Arquitetura RISC (falarei sobre esse assunto na série de Artigos sobre Microprocessadores). John Leroy Hennessy fez parte da fundação da empresa, assim como da História da evolução dos Microprocessadores, o que pode ser comprovado com a leitura de seus livros e artigos científicos. Vários equipamentos utilizaram microprocessadores MIPS como, por exemplo, o Nintendo 64, Sony PlayStation, Roteadores Cisco, etc.
Conjunto de Instruções
Antes de falarmos especificamente sobre o MIPS, vamos discutir um pouco sobre Conjunto de Instruções. Como bem sabemos, todo Sistema Computacional é composto, muito basicamente, por Entrada, Saída, Processamento e Armazenamento. Cada um desses subsistemas pode ser organizado de formas diferentes (organização) no sistema, e cada elemento que faz parte desses subsistemas pode ser projetado também de formas diferentes (arquitetura).
O Conjunto de Instruções é um dos elementos desse grande sistema, e é de extrema importância para a construção de um sistema computacional. Um Processador não é exatamente um dispositivo único, ele é um conjunto de sistemas, cada um responsável por executar determinadas ações. O que temos, na verdade, é uma CPU – Unidade Central de Processamento – composta pela Unidade de Controle, Unidade Lógica Aritmética, entre muitas outras UNIDADES FUNCIONAIS necessárias para realizar o processamento de qualquer tipo de dados que precisamos.
Aí é que está o “X” da questão! Por exemplo, se um microprocessador não é capaz de executar uma soma em ponto flutuante, então este computador não poderá processar determinados tipos de dados, programas, etc. O computador ficará limitado, o que nos dias atuais não é nada interessante. Portanto, quando se PROJETA um novo microprocessador, primeiro é necessário definir que tipo de instruções, dados e programas ele será capaz de executar.
Além disso, precisa-se manter a compatibilidade com microprocessadores anteriores. O novo microprocessador deve ser capaz de continuar executando os seus softwares. Não é uma ideia interessante lançar um microprocessador com muitas inovações se os usuários não puderem mais usar os softwares que estão acostumados. É claro que, um dia, logo mais à frente, a tecnologia vai mudar e, de certa forma, nos veremos na obrigação de evoluir. Os transistores, a tecnologia atual de fabricação de computadores, está em seu limite, e muitos pesquisadores estão buscando novas matérias primas para construção de processadores cada vez mais rápidos. Quando uma nova tecnologia surgir, nos encontraremos exatamente nesse ponto de evolução.
Os nossos computadores, notebooks e celulares atuais são dispositivos de uso geral. Isso significa que eles precisam ter capacidade de processamento para diversos tipos de dados diferentes, que variam desde um texto simples até um vídeo em três dimensões. É diferente de um controle remoto de TV ou um Microondas, que são projetados para um fim específico. Dessa forma, as instruções que o microprocessador é capaz de executar formam o conjunto de instruções. Algumas instruções que o microprocessador de uso geral pode executar são:
- operações aritméticas;
- operações lógicas;
- operações relacionais;
- operações de ponto flutuante;
- transferência de dados;
- desvios condicionais;
- desvios incondicionais;
- controle;
- entre outras.
Arquitetura do Conjunto de Instruções
A Arquitetura do Conjunto de Instruções define os tipos de instruções que serão executadas por um processador, assim como o formato de cada instrução, quantidade de bits, a forma como essas instruções acessarão registradores e memórias (modos de endereçamento), a forma como conversarão com outras unidades funcionais, etc.
Tamanho da Instrução
É o tamanho, em bits, de uma instrução. Conjuntos de instruções dos processadores X86 costumam não ter um tamanho fixo de Bits. Nessas arquiteturas, uma operação aritmética pode ter um tamanho diferente de uma operação de transferência, o que não é muito interessante. Hennessey e Patterson demonstraram com a Arquitetura MIPS que instruções de tamanho fixo de bits são melhores de se manipular, particularmente no processamento paralelo das instruções (Pipeline). Assim, em um projeto de arquitetura de conjunto de instruções, o tamanho da instrução, em bits, pode ser FIXO ou VARIÁVEL. A arquitetura MIPS atual tem tamanho fixo de 64 bits e é chamada de MIPS 64 Bits.
Formato da Instrução
Normalmente uma instrução tem um campo reservado para o código de operação, chamado de OPCODE, campos reservados para os operandos da operação, entre outros campos, como, por exemplo, o endereço de um ponteiro. Novamente reforço que isso é definido pelos projetistas da arquitetura. O OPCODE indica qual é a operação que deverá ser executada, exemplo:
ADD $s1, $s2, $3.
ADD é o mnemônico que identifica o código da operação, neste exemplo, uma adição com dois operandos, que são os registradores de uso geral $s2, $s3. O resultado da soma será armazenado no registrador $s1.
Compilação
Da mesma forma que a Linguagem Java precisa da máquina virtual Java para interpretar e compilar os programas desenvolvidos, uma ISA também precisa de um compilador. Todas as instruções Assembly são traduzidas para a linguagem binária (0 e 1), por isso é necessário um Compilador Assembly nos processadores. De fato, tudo o que é executado em nosso computador é traduzido para Assembly e depois para linguagem binária, de forma que possa ser processado pelo grande sistema digital que é o processador. Todo esse processo de compilação de instruções, em MIPS, será estudado nos artigos desta série. Conforme formos avançando nas instruções, todo o processo de tradução será demonstrado.
Conclusão
Agora que já fizemos uma pequena introdução sobre os conceitos básicos de instruções, podemos avançar nos próximos artigos, detalhando a arquitetura MIPS 32 bits. Espero vocês pessoal. Dúvidas, deixem nos comentários que eu as verei e responderei com muito carinho. Até a próxima.
Continue lendo sobre a série no link.
Boa tarde, gostaria de saber quais seriam as principais diferenças entre uma arquitetura ARMv8 e arquitetura MIPS?
Oi Luís! Primeiro gostaria de me desculpar pela demora em te responder. Não sei se responder isso com precisão! Mas dê uma lida nesses artigos aqui: https://pt.sawakinome.com/articles/technology/difference-between-mips-and-arm-2.html; https://pt.differbetween.com/article/difference_between_mips_and_arm . Espero ter ajudado
Parabéns pelo conteúdo e pela didática na abordagem !! Seria possível indicar onde posso conseguir informações de como as instruções aritméticas com inteiros são tratadas a nível de hardware ? principalmente nas famílias de microprocessadores da intel. Em especial o comando idiv.
Obrigado.
Fábio
Oi Fábio. Primeiro, mil desculpas pela demora longa para te responder. Segundo, quanto a seu pedido, precisarei dar uma pesquisada. Mas você pode postar sua dúvida no fórum aqui do Embarcados. Sei que tem muita gente entendida no assunto que pode te ajudar ta bom. Sucesso!
Adorei o conteúdo da série MIPS 32, apesar de ter minerado muitos outros matérias na web Sobre o assunto de instruções executadas por processadores, estes atigos foram os detalhados.
que bom!!! Bob, fico muito feliz com seu comentário viu =)
Fico muito feliz de ter achado essa série, estou estudando organização e arquitetura de computadores e será de grande utilidade pra mim!!!
que bom! fico feliz por estar sendo útil =)
Começando a digerir essa coisa linda toda em março de 2019 🙂 Animado para ver onde isso vai dar…
Oi Thiago!!! Que bom!!!! Fico feliz em saber que tenho mais um admirador do Assembly MIPS. Eu sou simplesmente apaixonada, não me pergunte o pq AHAHAHAHAH
show show . vou continuar nesse mini curso .. vou ler tudo .. tem algum grupo de discursão na internet sobre essa arquitetura elaine ?
obrigado .
Oi Lauriano!! Td bem? Espero que sim. Primeiro, mil perdões por ter demorado pra te responder, minhas sinceras desculpas. Segundo, não conheço nenhum grupo de discussão sobre MIPS, mas posso dar uma garimpada pra te ajudar. Mas se precisar de algo pode entrar em contato comigo pelos meus contatos no meu perfil ok. Estou muito feliz que você tenha gostado!
[ ]s
Oi Lauriano!! Td bem? Espero que sim. Primeiro, mil perdões por ter demorado pra te responder, minhas sinceras desculpas. Segundo, não conheço nenhum grupo de discussão sobre MIPS, mas posso dar uma garimpada pra te ajudar. Mas se precisar de algo pode entrar em contato comigo pelos meus contatos no meu perfil ok. Estou muito feliz que você tenha gostado!
[ ]s
Se não me engano há um simulador de MIPS, desenvolvido pelo próprio Patterson.
Lembro que o usei na cadeira de arquitetura de computadores que tive no mestrado.
Sim!!! No livro do Patterson tem um pequeno manual de como usar o simulador. Pretendo falar sobre ele com detalhes aqui, pq pouca gente sabe como programar nele.
O PIC32 utiliza essa arquitetura MIPS32 não é? Pretende fazer alguma série detalhando outras arquiteturas como ARM e X86?
Oi Jonathan!!! Acho que tem alguém escrevendo sobre ARM, não me recordo
agora quem, mas vi alguns artigos circulando aqui no site sobre o
assunto. Para a arquitetura X86 pretendo sim escrever uma série mais pra
frente. Sobre o PIC32 preciso confirmar, mas pode ser que o conjunto de
instruções do PIC32 tenha sido projetado com base no MIPS. Muito
Obrigada =)
o PIC32 é baseado no MIPS32 M4K (https://imgtec.com/downloads/mips32-m4k-processor-core-data-sheet/)
Rafael!!! Muitíssimo Obrigada =)
Valeu amigo. Perguntei pq me lembro de ter ouvido vagamente o Fabio Pereira falando isso numa palestra.