O documento discute a arquitetura MIPS. Ele define MIPS como uma arquitetura de conjunto de instruções desenvolvida pela MIPS Technologies em 1984. As instruções MIPS têm tamanho fixo, o que as torna mais fáceis de manipular por uma pipeline. O documento também descreve os registradores da arquitetura MIPS e as principais instruções aritméticas.
O documento descreve as diferenças entre as arquiteturas CISC e RISC. A arquitetura CISC (Complex Instruction Set Computer) tem instruções complexas implementadas em microcódigo para melhor apoiar linguagens de alto nível. No entanto, estudos mostraram que as instruções mais comuns são simples como atribuições e condicionais. Isso levou ao surgimento da arquitetura RISC (Reduced Instruction Set Computer) com um conjunto reduzido de instruções simples de registro-registro para melhor apoiar linguagens mais simples.
O documento discute processadores superescalares, que podem executar múltiplas instruções por ciclo de clock. Existem duas abordagens para expedição múltipla: estática, onde as decisões são tomadas em tempo de compilação; e dinâmica, onde as decisões são tomadas em tempo de execução (superescalar). Processadores superescalares possuem cópias do hardware para executar instruções simultaneamente, de forma semelhante à abordagem estática.
Este documento apresenta a construção de um datapath para implementar instruções do tipo MIPS em um único ciclo de clock. Ele discute a metodologia de temporização para garantir que os sinais sejam válidos quando necessário e permite que cada instrução seja executada em um ciclo. O documento descreve como buscar instruções na memória, incrementar o PC, ler registradores e usar a ALU para executar operações aritméticas e lógicas.
O documento discute pipeline e seus conflitos. Explica como dividir o datapath de um único ciclo em estágios de pipeline, necessitando registradores para reter valores parciais entre estágios. Apresenta exemplos de instruções passando pelos estágios, ilustrando como os valores e registradores precisam ser recuperados do estágio anterior.
O documento discute medidas de desempenho de CPUs. Apresenta a equação clássica de desempenho da CPU onde o tempo de execução de um programa (tP) é igual ao número de instruções do programa (nP) multiplicado pelo número médio de ciclos por instrução (CPIP) multiplicado pelo tempo de um ciclo de clock (tc). Discute como os três fatores - nP, CPIP e tc - afetam o desempenho e como a equação pode ser usada para comparar diferentes arquiteturas.
O documento discute conflitos de dados em pipelines e como o forwarding pode resolver esse problema. O documento também apresenta situações onde o forwarding não é suficiente e pipeline stalls ainda são necessários.
O documento discute a arquitetura de datapath de ciclo único e pipeline. Ele explica como construir um datapath para executar cada instrução em um único ciclo de clock, necessitando de memórias separadas para instruções e dados e de um multiplexador para compartilhar recursos entre diferentes tipos de instruções. Também aborda o controle da ALU e como cada tipo de instrução é conectado ao datapath.
O documento descreve as diferenças entre as arquiteturas CISC e RISC. A arquitetura CISC (Complex Instruction Set Computer) tem instruções complexas implementadas em microcódigo para melhor apoiar linguagens de alto nível. No entanto, estudos mostraram que as instruções mais comuns são simples como atribuições e condicionais. Isso levou ao surgimento da arquitetura RISC (Reduced Instruction Set Computer) com um conjunto reduzido de instruções simples de registro-registro para melhor apoiar linguagens mais simples.
O documento discute processadores superescalares, que podem executar múltiplas instruções por ciclo de clock. Existem duas abordagens para expedição múltipla: estática, onde as decisões são tomadas em tempo de compilação; e dinâmica, onde as decisões são tomadas em tempo de execução (superescalar). Processadores superescalares possuem cópias do hardware para executar instruções simultaneamente, de forma semelhante à abordagem estática.
Este documento apresenta a construção de um datapath para implementar instruções do tipo MIPS em um único ciclo de clock. Ele discute a metodologia de temporização para garantir que os sinais sejam válidos quando necessário e permite que cada instrução seja executada em um ciclo. O documento descreve como buscar instruções na memória, incrementar o PC, ler registradores e usar a ALU para executar operações aritméticas e lógicas.
O documento discute pipeline e seus conflitos. Explica como dividir o datapath de um único ciclo em estágios de pipeline, necessitando registradores para reter valores parciais entre estágios. Apresenta exemplos de instruções passando pelos estágios, ilustrando como os valores e registradores precisam ser recuperados do estágio anterior.
O documento discute medidas de desempenho de CPUs. Apresenta a equação clássica de desempenho da CPU onde o tempo de execução de um programa (tP) é igual ao número de instruções do programa (nP) multiplicado pelo número médio de ciclos por instrução (CPIP) multiplicado pelo tempo de um ciclo de clock (tc). Discute como os três fatores - nP, CPIP e tc - afetam o desempenho e como a equação pode ser usada para comparar diferentes arquiteturas.
O documento discute conflitos de dados em pipelines e como o forwarding pode resolver esse problema. O documento também apresenta situações onde o forwarding não é suficiente e pipeline stalls ainda são necessários.
O documento discute a arquitetura de datapath de ciclo único e pipeline. Ele explica como construir um datapath para executar cada instrução em um único ciclo de clock, necessitando de memórias separadas para instruções e dados e de um multiplexador para compartilhar recursos entre diferentes tipos de instruções. Também aborda o controle da ALU e como cada tipo de instrução é conectado ao datapath.
1) O documento discute pontos sobre arquitetura de microcontroladores e operações com bits na linguagem C. 2) Inclui explicações sobre ponteiros, operadores & e *, acesso à memória, clock e tempo de instrução, esquema elétrico e circuitos importantes. 3) Também apresenta detalhes sobre registros de configuração para definir o funcionamento básico e periféricos do microcontrolador.
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaEmbarcados
Confira neste webinar uma introdução ao RISC-V como a alternativa open-source às ISAs proprietárias como ARM e x86. E muitas outras informações!
Para mais detalhes acesse: https://www.embarcados.com.br/webinars/isa-risc-v-e-seu-ecossistema/
1. O documento descreve o conjunto de instruções MIPS e suas características. 2. As instruções MIPS possuem três operandos fixos e operam apenas em registradores. 3. É necessário transferir dados entre registradores e memória usando instruções de load e store.
Virtualização de Infraestrutura de Redes por Thiago LeiteThiagoLeite94
O documento apresenta um tutorial sobre virtualização de redes e Software-Defined Networking (SDN) utilizando o emulador de rede Mininet. É apresentado o que é virtualização, SDN e seu modelo de separação entre plano de controle e plano de dados. Também é explicado o protocolo OpenFlow e como o Mininet pode ser usado para emular redes e testar aplicações SDN. São mostrados exemplos de topologias e comandos básicos no Mininet.
O documento discute o uso de registros no Arduino para configurar e controlar pinos digitais de forma mais eficiente do que usar comandos como pinMode() e digitalWrite(). Explica que cada pino digital tem uma correspondência a registros internos do microcontrolador ATmega328p e fornece exemplos de código usando registros PORTx, DDRx e PINx para definir direções de pino e escrever níveis lógicos.
O documento discute conjuntos de instruções e como programas são traduzidos para a linguagem de máquina. Explica que instruções são palavras na linguagem da máquina e que conjuntos de instruções diferem entre arquiteturas. Também descreve os níveis de abstração entre linguagens de programação, montagem e máquina.
TV Digital - Entendendo a transmissão de aplicações - TDC2011Hugo Lavalle
O documento discute a transmissão digital de televisão, incluindo codificação MPEG-2, carrossel de dados, multiplexação de sinais, ferramentas de laboratório como OpenCaster e ffmpeg, e demonstra a geração e multiplexação de streams de vídeo, áudio e aplicações em um único transport stream.
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
Mais conteúdo relacionado
Semelhante a (ACH2055) Arquitetura de Computadores - Aula 03
1) O documento discute pontos sobre arquitetura de microcontroladores e operações com bits na linguagem C. 2) Inclui explicações sobre ponteiros, operadores & e *, acesso à memória, clock e tempo de instrução, esquema elétrico e circuitos importantes. 3) Também apresenta detalhes sobre registros de configuração para definir o funcionamento básico e periféricos do microcontrolador.
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
1) O documento discute endereçamento indireto e instruções que usam registradores de endereços em S7-300/400. Ele explica como usar ponteiros de 16 e 32 bits para endereçar variáveis em memória indiretamente.
2) É mostrado como carregar e transferir dados usando registradores de endereço e ponteiros. Exemplos demonstram endereçamento indireto de áreas internas e cruzadas.
3) O documento também explica como abrir e usar bancos de dados com endereçamento indireto e
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaEmbarcados
Confira neste webinar uma introdução ao RISC-V como a alternativa open-source às ISAs proprietárias como ARM e x86. E muitas outras informações!
Para mais detalhes acesse: https://www.embarcados.com.br/webinars/isa-risc-v-e-seu-ecossistema/
1. O documento descreve o conjunto de instruções MIPS e suas características. 2. As instruções MIPS possuem três operandos fixos e operam apenas em registradores. 3. É necessário transferir dados entre registradores e memória usando instruções de load e store.
Virtualização de Infraestrutura de Redes por Thiago LeiteThiagoLeite94
O documento apresenta um tutorial sobre virtualização de redes e Software-Defined Networking (SDN) utilizando o emulador de rede Mininet. É apresentado o que é virtualização, SDN e seu modelo de separação entre plano de controle e plano de dados. Também é explicado o protocolo OpenFlow e como o Mininet pode ser usado para emular redes e testar aplicações SDN. São mostrados exemplos de topologias e comandos básicos no Mininet.
O documento discute o uso de registros no Arduino para configurar e controlar pinos digitais de forma mais eficiente do que usar comandos como pinMode() e digitalWrite(). Explica que cada pino digital tem uma correspondência a registros internos do microcontrolador ATmega328p e fornece exemplos de código usando registros PORTx, DDRx e PINx para definir direções de pino e escrever níveis lógicos.
O documento discute conjuntos de instruções e como programas são traduzidos para a linguagem de máquina. Explica que instruções são palavras na linguagem da máquina e que conjuntos de instruções diferem entre arquiteturas. Também descreve os níveis de abstração entre linguagens de programação, montagem e máquina.
TV Digital - Entendendo a transmissão de aplicações - TDC2011Hugo Lavalle
O documento discute a transmissão digital de televisão, incluindo codificação MPEG-2, carrossel de dados, multiplexação de sinais, ferramentas de laboratório como OpenCaster e ffmpeg, e demonstra a geração e multiplexação de streams de vídeo, áudio e aplicações em um único transport stream.
Semelhante a (ACH2055) Arquitetura de Computadores - Aula 03 (10)
O documento discute estimativas de erro em modelos de aprendizagem de máquina. Explica que o erro esperado no conjunto de teste tende a ser maior que no conjunto de treino, devido ao ajuste do modelo aos dados de treino. Também aborda medidas como viés e variância para avaliar estimadores, e como o erro quadrático médio equilibra ambos para medir o desvio total esperado entre a estimativa e o valor real.
O documento discute a avaliação de desempenho de classificadores treinados. Explica que é necessário testar o modelo em um conjunto de dados independente para medir seu desempenho em dados novos. Também apresenta métricas como taxa de erro e curva de aprendizagem para avaliar quantitativamente o modelo.
O documento descreve o algoritmo de máquina de vetor de suporte (SVM), explicando como ele busca encontrar o hiperplano separador de margem máxima entre os dados de treinamento de duas classes. O SVM define fronteiras lineares ótimas para dados linearmente separáveis, maximizando a distância entre o hiperplano separador e os exemplos de treinamento mais próximos, chamados de vetores de suporte. O problema é formulado como um problema de otimização para encontrar os parâmetros ω e b que maximizam essa distância de separação.
O documento descreve as redes neurais e o perceptron. Ele explica que as redes neurais se inspiram nos neurônios biológicos e como o perceptron funciona como a unidade básica de uma rede neural, recebendo sinais de entrada e aplicando uma função de ativação. Também discute possíveis funções de ativação como a função degrau e sigmóide e como os pesos das conexões, incluindo o viés, determinam se um perceptron é ativado ou não.
O documento discute árvores de decisão e florestas aleatórias. Ele explica que árvores de decisão são uma das formas mais simples de aprendizado de máquina, representando uma sequência de regras "se...então" para classificar ou prever saídas com base em atributos de entrada. O documento também descreve características como nós internos representando testes de atributos e folhas especificando saídas, e discute expressividade e variações de árvores de decisão.
O documento discute aprendizado supervisionado bayesiano. Ele introduz o aprendizado bayesiano como um método probabilístico e descreve que o aprendizado supervisionado tem como objetivo classificação ou regressão para mapear entradas em saídas com base em exemplos.
O documento descreve a regra de Bayes e redes Bayesianas. Ele fornece um exemplo detalhado sobre como calcular a probabilidade de uma mulher ter câncer de mama dado um resultado positivo em um mamograma usando a regra de Bayes. Ele também define brevemente o que são redes Bayesianas, que representam dependências probabilísticas entre variáveis aleatórias através de um grafo direcionado acíclico.
O documento discute o tratamento de incerteza em inteligência artificial. Aborda como a probabilidade e a teoria da decisão podem ser usadas para tomar decisões racionais quando os resultados são incertos, levando em conta a probabilidade de cada resultado e sua utilidade segundo as preferências de quem decide.
O documento discute representação do conhecimento através de ontologias, incluindo taxonomias e herança. Ontologias organizam o conhecimento em categorias hierárquicas e permitem raciocinar sobre objetos classificados. Categorias podem ser representadas como predicados ou objetos. A herança permite que propriedades sejam herdadas por subcategorias.
O documento descreve o funcionamento do algoritmo de backward chaining em programação lógica, começando com uma explicação geral do processo de raciocínio de trás para frente a partir de um objetivo. Em seguida, apresenta formalmente o algoritmo de backward chaining, explicando cada parte do processo de forma recursiva para encontrar substituições que satisfaçam a query dada uma base de conhecimento. Por fim, exemplifica o algoritmo em uma base de conhecimento sobre venda de armas.
O documento descreve os passos para executar resolução e encadeamento para frente em lógica de primeira ordem. Primeiro, as expressões lógicas devem ser convertidas para forma clausal sem quantificadores. Em seguida, as variáveis devem ser substituídas durante a resolução usando o processo de unificação. Por fim, a resolução é executada para derivar novas conclusões.
O documento descreve as bases de dados em lógica de primeira ordem, como interagir com elas fazendo buscas (queries) por meio de sentenças lógicas em LPO, e como qualquer query que possa ser inferida logicamente pela base de dados será respondida afirmativamente. As bases de dados contêm axiomas com informações básicas e teoremas derivados dos axiomas, e o documento discute técnicas como forward chaining, backward chaining e resolução para realizar inferência nas bases de dados.
O documento descreve uma aula sobre lógica de primeira ordem. Apresenta os elementos básicos da lógica de primeira ordem, incluindo termos, predicados e a gramática formal para construir sentenças. Também explica como modelos e interpretações funcionam na lógica de primeira ordem, diferentemente da lógica proposicional.
O documento discute inferência em lógica proposicional, incluindo tipos de provas como verificação de modelos e aplicação de regras de inferência. Ele explica como aplicar regras de inferência como modus ponens e modus tollens para derivar novas sentenças a partir de premissas, formando uma prova.
O documento descreve um algoritmo de busca retroativa para resolver problemas de satisfação de restrições, utilizando forward checking e heurísticas como valores restantes mínimos, grau e valor menos restritivo. O algoritmo é demonstrado passo a passo em um exemplo de coloração de grafos, definindo variáveis, valores e propagando escolhas.
O documento descreve problemas de satisfação de restrições (CSPs), definidos por um conjunto de variáveis, domínios de valores para cada variável, e restrições sobre combinações de valores de variáveis. Apresenta exemplos de agendamento de aulas e coloração de mapas como CSPs, definindo suas variáveis, domínios e restrições.
O documento discute algoritmos genéticos e representação de cromossomos. Ele explica que os cromossomos podem ser representados de várias formas, incluindo binária, valores inteiros e reais. A representação binária é a mais simples, onde o cromossomo consiste de uma sequência de bits. A mutação e o cruzamento ocorrem durante o algoritmo genético para gerar novas soluções.
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, Central Gospel, Os Mortos Em Cristo, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
1. Arquitetura de Computadores
ACH2055
Aula 03 – Assembly MIPS (Parte I)
Norton Trevisan Roman
(norton@usp.br)
1 de novembro de 2019
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 1 / 37
2. A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
3. A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Trata-se de uma arquitetura de conjunto de
instru¸c˜oes
Instruction Set Architecture – ISA
No caso do MIPS, RISC (veremos mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
4. A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Trata-se de uma arquitetura de conjunto de
instru¸c˜oes
Instruction Set Architecture – ISA
No caso do MIPS, RISC (veremos mais adiante)
Presentes em diversos sistemas
Videogames, roteadores etc
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
5. A Arquitetura MIPS
Vantagens
Instru¸c˜oes tˆem tamanho fixo
32 e 64 bits
X86 n˜ao tem tamanho fixo
S˜ao mais f´aceis de se manipular, especialmente por uma
pipeline (veremos mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
6. A Arquitetura MIPS
Vantagens
Instru¸c˜oes tˆem tamanho fixo
32 e 64 bits
X86 n˜ao tem tamanho fixo
S˜ao mais f´aceis de se manipular, especialmente por uma
pipeline (veremos mais adiante)
As instru¸c˜oes seguem um formato geral fixo
OPERAC¸ ˜AO <lista de operandos>
Ex: ADD $s1, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
7. Programando em MIPS
Simuladores
Wemips (online)
https:
//rivoire.cs.sonoma.
edu/cs351/wemips/
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
8. Programando em MIPS
Simuladores
Wemips (online)
https:
//rivoire.cs.sonoma.
edu/cs351/wemips/
Mars (.jar)
http://courses.
missouristate.edu/
kenvollmar/mars/
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
9. Programando em MIPS
Registradores
MIPS possui 32 registradores de uso geral
Numerados de 0 a 31
Em geral referenciados pelo seu n´umero ($0 a $31) ou nome
(ex: $t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
10. Programando em MIPS
Registradores
MIPS possui 32 registradores de uso geral
Numerados de 0 a 31
Em geral referenciados pelo seu n´umero ($0 a $31) ou nome
(ex: $t1)
Embora possam ser usados livremente, h´a uma
conven¸c˜ao em seu uso
Seguida por programadores e compiladores
Seguir essa conven¸c˜ao permite que um c´odigo possa
funcionar com outros em MIPS
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
11. Programando em MIPS
Registradores – Conven¸c˜ao
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
12. Programando em MIPS
Registradores – Conven¸c˜ao
zero sempre
cont´em o valor
0 (hard-wired)
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
13. Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em
v guardam a
avalia¸c˜ao de
uma express˜ao
ou os resultados
de uma fun¸c˜ao
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
14. Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em a guar-
dam argumentos
para as rotinas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
15. Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em t
guardam valores
que n˜ao precisam
ser preservados
entre chamadas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
16. Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em s
guardam valores
que precisam
ser preservados
entre chamadas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
17. Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em k s˜ao
reservados para
o kernel do S.O.
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
18. Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
gp aponta para o
endere¸co do fim
dos primeiros 32K
no segmento de
dados est´aticos
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
19. Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
Permitindo assim
acesso r´apido aos
primeiros 64K
desse segmento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
20. Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
sp guarda o
endere¸co do ´ultimo
local da pilha
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
21. Programando em MIPS
Registradores – Conven¸c˜ao
fp guarda o
endere¸co da
primeira palavra da
moldura de pilha
do procedimento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
22. Programando em MIPS
Registradores – Conven¸c˜ao
ra guarda o
endere¸co de retorno
de uma chamada
de procedimento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
23. Programando em MIPS
Instru¸c˜oes Aritm´eticas
Cada instru¸c˜ao executa uma ´unica opera¸c˜ao,
possuindo 3 campos
2 operandos e um local para armazenamento do resultado
Cada um correspondendo a um dos 32 registradores
dispon´ıveis
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
24. Programando em MIPS
Instru¸c˜oes Aritm´eticas
Cada instru¸c˜ao executa uma ´unica opera¸c˜ao,
possuindo 3 campos
2 operandos e um local para armazenamento do resultado
Cada um correspondendo a um dos 32 registradores
dispon´ıveis
Formato:
opera¸c˜ao $resultado, $operando1, $operando2
Ex: add $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
25. Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
26. Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Todas com vers˜oes para inteiros sem sinal
addu, subu, divu
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
27. Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Todas com vers˜oes para inteiros sem sinal
addu, subu, divu
Para ponto flutuante etc
add.d, sub.d, mul.d, div.d
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
28. Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
29. Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Com operadores imediatos
li $s2, 10 (load immediate – a constante 10 ´e
armazenada no registrador $s2)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
30. Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Com operadores imediatos
li $s2, 10 (load immediate – a constante 10 ´e
armazenada no registrador $s2)
Instru¸c˜oes aritm´eticas tamb´em tˆem vers˜oes assim:
Ex: addi $t0, $s2, 4
Presentes apenas para soma e subtra¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
31. Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
32. Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Traduzida pelo montador como “addiu destino,
0, valor”
addiu – add immediate unsigned
Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
33. Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Traduzida pelo montador como “addiu destino,
0, valor”
addiu – add immediate unsigned
Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10
Ou “ori destino, 0, valor”
ori – or immediate
Ex: li $s4, 10 ⇒ ori $s4, $zero, 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
34. Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
35. Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
36. Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Formato dos itens:
nome: .tipo de armazenagem valor
Ex: var1: .word 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
37. Programando em MIPS
Estrutura de um Programa MARS
Palavras seguidas por ‘:’ (ex:
var1) s˜ao r´otulos, marcando
o endere¸co de mem´oria a
seguir (onde 10 est´a na RAM)
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Formato dos itens:
nome: .tipo de armazenagem valor
Ex: var1: .word 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
38. Programando em MIPS
Estrutura de um Programa
C´odigo
Usa a diretiva .text
Itens subsequentes ser˜ao armazenados no segmento de texto
Se for fornecido um endere¸co (.text end → opcional), ser˜ao
armazenados a partir desse endere¸co
Parte do programa em que as instru¸c˜oes a serem executadas
s˜ao escritas
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
39. Programando em MIPS
Estrutura de um Programa
C´odigo
Usa a diretiva .text
Itens subsequentes ser˜ao armazenados no segmento de texto
Se for fornecido um endere¸co (.text end → opcional), ser˜ao
armazenados a partir desse endere¸co
Parte do programa em que as instru¸c˜oes a serem executadas
s˜ao escritas
De in´ıcio, focaremos apenas nessa parte
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
40. Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
41. Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
42. Programando em MIPS
Um Primeiro Programa
Coment´arios iniciam com
# e v˜ao at´e o final da linha
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
43. Programando em MIPS
Um Primeiro Programa
Montamos o programa...
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
44. Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
45. Programando em MIPS
Um Primeiro Programa
E ent˜ao rodamos
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
46. Programando em MIPS
Um Primeiro Programa
Podemos visualizar o
conte´udo dos registradores
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
47. Programando em MIPS
Instru¸c˜oes Relacionais
Possuem o mesmo formato das aritm´eticas
opera¸c˜ao $resultado, $operando1, $operando2
Ex: slt $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
48. Programando em MIPS
Instru¸c˜oes Relacionais
Possuem o mesmo formato das aritm´eticas
opera¸c˜ao $resultado, $operando1, $operando2
Ex: slt $t0, $s2, $s3
Existem, contudo, apenas 2 instru¸c˜oes
SLT e SLTI
De fato, h´a mais duas, relacionadas a desvios, que veremos
mais adiante
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
49. Programando em MIPS
Instru¸c˜oes Relacionais
SLT – Set on Less Than
slt $t0, $s1, $s2
$t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0
Equivale a $st0 ← $s1 < $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
50. Programando em MIPS
Instru¸c˜oes Relacionais
SLT – Set on Less Than
slt $t0, $s1, $s2
$t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0
Equivale a $st0 ← $s1 < $s2
SLTI – Set on Less Than Immediate (com sinal)
slti $t0, $s1, 10
Mesmo comportamento de slt
Exite tamb´em a vers˜ao para unsigned int: sltiu
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
51. Programando em MIPS
Instru¸c˜oes L´ogicas
S˜ao 7 as instru¸c˜oes l´ogicas em MIPS
Deslocamento `a esquerda (SLL)
Deslocamento `a direita (SRL)
And bit a bit (AND, ANDI)
Or bit a bit (OR, ORI)
Nor bit a bit (NOR)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 16 / 37
52. Programando em MIPS
Instru¸c˜oes L´ogicas
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
53. Programando em MIPS
Instru¸c˜oes L´ogicas
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
54. Programando em MIPS
Instru¸c˜oes L´ogicas
S˜ao chamadas l´ogicas por n˜ao
preservarem sinal nem distin-
guirem expoente de mantissa
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
55. Programando em MIPS
Instru¸c˜oes L´ogicas
Os bits s˜ao simplesmente mo-
vidos sem preocupa¸c˜ao
com seu significado
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
56. Programando em MIPS
Instru¸c˜oes L´ogicas
AND
and resultado, origem1, origem2
and $t0, $s1, $s2
$t0 recebe o resultado de um AND bit a bit entre $s1 e $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
57. Programando em MIPS
Instru¸c˜oes L´ogicas
AND
and resultado, origem1, origem2
and $t0, $s1, $s2
$t0 recebe o resultado de um AND bit a bit entre $s1 e $s2
ANDI – AND Immediate
andi resultado, origem1, valor
andi $t0, $s2, 10
$t0 recebe o resultado de um AND bit a bit entre $s2 e 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
58. Programando em MIPS
Instru¸c˜oes L´ogicas
OR
or resultado, origem1, origem2
or $t0, $s1, $s2
$t0 recebe o resultado de um OR bit a bit entre $s1 e $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
59. Programando em MIPS
Instru¸c˜oes L´ogicas
OR
or resultado, origem1, origem2
or $t0, $s1, $s2
$t0 recebe o resultado de um OR bit a bit entre $s1 e $s2
ORI – OR Immediate
ori resultado, origem1, valor
ori $t0, $s2, 10
$t0 recebe o resultado de um OR bit a bit entre $s2 e 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
60. Programando em MIPS
Instru¸c˜oes L´ogicas
NOR
Implementado assim para seguir o padr˜ao de 2 operandos
Podemos, contudo, simular o NOT usando NOR:
A NOR 0
NOT (A OR 0)
NOT A
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
61. Programando em MIPS
Instru¸c˜oes L´ogicas
NOR
Implementado assim para seguir o padr˜ao de 2 operandos
Podemos, contudo, simular o NOT usando NOR:
A NOR 0
NOT (A OR 0)
NOT A
nor resultado, origem1, origem2
nor $t0, $s1, $zero
$t0 recebe o resultado de um NOT bit a bit em $s1
Lembre-se que todos os 32 (ou 64) bits s˜ao invertidos
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
62. Programando em MIPS
Endere¸camento de Mem´oria
MIPS endere¸ca cada byte de mem´oria
Com 32 bits, endere¸cos de palavras adjacentes diferem em 4
Temos assim 232
÷ 4 = 230
palavras de mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
63. Programando em MIPS
Endere¸camento de Mem´oria
MIPS endere¸ca cada byte de mem´oria
Com 32 bits, endere¸cos de palavras adjacentes diferem em 4
Temos assim 232
÷ 4 = 230
palavras de mem´oria
A mem´oria ent˜ao ´e vista
como um arranjo
unidimensional
Com o endere¸co funcionando
como ´ındice
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
64. Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
65. Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
Big-endian
Little-endian
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
66. Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
MIPS ´e do tipo big-endian
Big-endian
Little-endian
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
67. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
MIPS possui diversas instru¸c˜oes de acesso `a
mem´oria
As principais sendo lw e sw
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
68. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
MIPS possui diversas instru¸c˜oes de acesso `a
mem´oria
As principais sendo lw e sw
LW – Load Word
Transfere uma palavra da RAM para um registrador
lw registrador, deslocamento(registrador base)
lw $t0, 30($s0)
Carregue em $t0 a palavra no endere¸co correspondente a $s0 + 30
O deslocamento (aqui 30) pode ser negativo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
69. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
SW – Store Word
Transfere uma palavra de um registrador para a RAM
sw registrador, deslocamento(registrador base)
sw $t0, 30($s0)
Armazene o conte´udo de $t0 no endere¸co correspondente a $s0 + 30
Novamente, o deslocamento pode ser negativo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 24 / 37
70. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
E como sabemos o endere¸co de mem´oria?
Ou especificamos, carregando o registrador com li
(cuidado!!!)
Ou deixamos que o montador tome conta disso
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
71. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
E como sabemos o endere¸co de mem´oria?
Ou especificamos, carregando o registrador com li
(cuidado!!!)
Ou deixamos que o montador tome conta disso
Como?
Usando as diretivas de montador MIPS
Ex:
.data
v1: .word 20
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
74. Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
“lw registrador, r´otulo”
´e uma pseudo-instru¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
76. Programando em MIPS
Arranjos
Suponha que temos um arranjo em mem´oria
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
77. Programando em MIPS
Arranjos
Suponha que temos um arranjo em mem´oria
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
Como acessar o elemento arr[3]?
Precisamos armazenar o endere¸co-base do arranjo em um
registrador, para calcular o deslocamento
la $t1, arr
Pseudo-instru¸c˜ao que carrega em $t1 o endere¸co representado por
arr
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
78. Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
79. Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Mas armazenamos palavras, n˜ao bytes
O ´ındice precisa ser multiplicado pelo tamanho da palavra
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
80. Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Mas armazenamos palavras, n˜ao bytes
O ´ındice precisa ser multiplicado pelo tamanho da palavra
Ent˜ao lw $t2, 12($t1)
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
.text
la $t1, arr
lw $t2, 12($t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
81. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
82. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Instru¸c˜oes do Tipo I (Immediate)
addi $t0, $s2, 4
lw $t2, 12($t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
83. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Instru¸c˜oes do Tipo I (Immediate)
addi $t0, $s2, 4
lw $t2, 12($t1)
Instru¸c˜oes do Tipo J (Jump)
Usadas em desvios (mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
84. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
85. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
86. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Primeiro registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
87. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Segundo registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
88. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Registrador-destino (recebe o resultado da opera¸c˜ao)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
89. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Shift amount – deslocamento (usado em instru¸c˜oes
como sll e srl)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
90. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
C´odigo de fun¸c˜ao – seleciona a variante espec´ıfica
da opera¸c˜ao no campo op
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
91. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Campos n˜ao usados s˜ao carregados com zero
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
92. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
93. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
94. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
95. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Registrador de destino da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
96. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Valor (constante ou endere¸co) usado na opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
97. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Note que isso nos d´a um limite de ±215
bytes de
deslocamento (h´a o bit de sinal) em lw $reg1, desl($reg2)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
98. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Por isso, ao apontar para o byte 32K no segmento de dados,
$gp d´a acesso aos primeiros 64K desse segmento
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
99. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
100. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
101. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
Endere¸co de mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
102. Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Fonte: Adaptada de [1]
Os formatos s˜ao diferenciados no circuito pelo valor
no campo op
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 34 / 37
103. Programando em MIPS
Pseudo-instru¸c˜oes
Instru¸c˜oes adicionadas pelo montador, para
simplificar algumas opera¸c˜oes
Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas
Traduzidas para instru¸c˜oes reais
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
104. Programando em MIPS
Pseudo-instru¸c˜oes
Instru¸c˜oes adicionadas pelo montador, para
simplificar algumas opera¸c˜oes
Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas
Traduzidas para instru¸c˜oes reais
Exemplos:
Pseudo-instru¸c˜ao Expans˜ao
li $s4, 10 addiu $s4, $zero, 10
move $t0, $t1 add $t0, $zero, $t1
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
105. Referˆencias
1 Patterson, D.A.; Hennessy, J.L. (2013): Computer Organization and
Design: The Hardware/Software Interface. Morgan Kaufmann. 5a
ed.
Para detalhes sobre MIPS consulte tamb´em o Apˆendice A
2 https://www.embarcados.com.br/arquitetura-de-conjunto-
de-instrucoes-mips/
Curso bastante completo, em portuguˆes
3 https://sweetcode.io/building-first-simple-program-
mips-assembly-language/
Tutorial b´asico passo a passo
4 https://sites.cs.ucsb.edu/~franklin/64/lectures/
mipsassemblytutorial.pdf
Tutorial mais profundo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 36 / 37
106. Referˆencias
5 WEMIPS
https://rivoire.cs.sonoma.edu/cs351/wemips/
Simulador MIPS online
6 MARS (MIPS Assembler and Runtime Simulator)
http://courses.missouristate.edu/kenvollmar/mars/
Simulador MIPS (.jar, multiplataforma)
7 https://en.wikipedia.org/wiki/Logical_shift
Diferen¸ca entre deslocamento l´ogico e aritm´etico
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 37 / 37