Guia rápido sobre tipos de dados, registradores, instruções e estrutura de programas MIPS. Aborda formatação de números e caracteres, operações aritméticas e lógicas, desvios condicionais e incondicionais, subrotinas e entrada/saída.
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.
O documento descreve o desdobramento e escalonamento de um loop MIPS de 4 instruções para melhorar o seu desempenho no pipeline. Inicialmente, o loop é desdobrado em 4 cópias, renomeando os registradores em cada cópia. Em seguida, as instruções são reordenadas para remover dependências e evitar bolhas no pipeline. O código desdobrado e escalonado consegue executar em menos ciclos de clock do que o código original não otimizado.
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
O documento apresenta uma introdução ao Python, abordando tópicos como:
- Blocos de código por indentação
- Tipos de dados básicos como números, strings, listas e dicionários
- Operadores e funções com esses tipos de dados
- Listas comprehensions para gerar listas de forma concisa
O documento descreve os principais componentes de um computador e conceitos relacionados à linguagem assembly, incluindo registradores, segmentos de memória, instruções e operações aritméticas básicas.
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
Este documento resume parte 2 de 3 sobre o algoritmo de ordenação heapsort. Explica como refazer o heap, construir o heap inicialmente e o algoritmo heapsort propriamente dito, além de analisar sua complexidade de tempo no pior, melhor e caso médio.
O documento discute instruções de desvio e loops no MIPS. Resume:
1) Instruções de desvio como BEQ e BNE permitem saltos condicionais baseados no conteúdo de registradores; 2) Loops são implementados usando desvios de volta ao início; 3) Um compilador traduz estruturas de controle de fluxo como if/else e while para instruções de desvio do MIPS.
1. O documento apresenta definições e propriedades de logaritmos, incluindo a definição formal de logaritmo, propriedades como a mudança de base e a propriedade da soma e diferença.
2. É explicado que logaritmos simplificam cálculos matemáticos e são fundamentais para entender exponenciais.
3. Demonstrações formais são fornecidas para várias propriedades, como a propriedade da soma que afirma que o logaritmo de um produto é igual à soma dos logaritmos.
O documento descreve a arquitetura de Von Neumann utilizada nos computadores pessoais, onde a mesma memória é usada para armazenar tanto dados quanto código executável. Também explica o conceito de ponteiros em C, que são variáveis que armazenam endereços de memória e permitem a manipulação direta desses endereços no código.
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.
O documento descreve o desdobramento e escalonamento de um loop MIPS de 4 instruções para melhorar o seu desempenho no pipeline. Inicialmente, o loop é desdobrado em 4 cópias, renomeando os registradores em cada cópia. Em seguida, as instruções são reordenadas para remover dependências e evitar bolhas no pipeline. O código desdobrado e escalonado consegue executar em menos ciclos de clock do que o código original não otimizado.
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
O documento apresenta uma introdução ao Python, abordando tópicos como:
- Blocos de código por indentação
- Tipos de dados básicos como números, strings, listas e dicionários
- Operadores e funções com esses tipos de dados
- Listas comprehensions para gerar listas de forma concisa
O documento descreve os principais componentes de um computador e conceitos relacionados à linguagem assembly, incluindo registradores, segmentos de memória, instruções e operações aritméticas básicas.
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
Este documento resume parte 2 de 3 sobre o algoritmo de ordenação heapsort. Explica como refazer o heap, construir o heap inicialmente e o algoritmo heapsort propriamente dito, além de analisar sua complexidade de tempo no pior, melhor e caso médio.
O documento discute instruções de desvio e loops no MIPS. Resume:
1) Instruções de desvio como BEQ e BNE permitem saltos condicionais baseados no conteúdo de registradores; 2) Loops são implementados usando desvios de volta ao início; 3) Um compilador traduz estruturas de controle de fluxo como if/else e while para instruções de desvio do MIPS.
1. O documento apresenta definições e propriedades de logaritmos, incluindo a definição formal de logaritmo, propriedades como a mudança de base e a propriedade da soma e diferença.
2. É explicado que logaritmos simplificam cálculos matemáticos e são fundamentais para entender exponenciais.
3. Demonstrações formais são fornecidas para várias propriedades, como a propriedade da soma que afirma que o logaritmo de um produto é igual à soma dos logaritmos.
O documento descreve a arquitetura de Von Neumann utilizada nos computadores pessoais, onde a mesma memória é usada para armazenar tanto dados quanto código executável. Também explica o conceito de ponteiros em C, que são variáveis que armazenam endereços de memória e permitem a manipulação direta desses endereços no código.
O documento explica o conceito de pilhas, estruturas de dados que armazenam valores de forma empilhada. Pilhas possuem duas operações básicas: PUSH para adicionar valores e POP para remover valores. Pilhas são usadas na execução de programas para armazenar dados temporários e variáveis locais de funções. A pilha cresce para baixo na memória e é acompanhada por um ponteiro SP que indica o topo.
O documento descreve um programa PLC para controlar semáforos e detectar falhas em um processo industrial. Ele inclui instruções para desenvolver um programa em Ladder que opere semáforos e detecte condições de processo estáveis, instáveis ou não controláveis com base em um modelo matemático.
O documento discute ponteiros em linguagem C, incluindo: 1) O que são ponteiros e porque são usados; 2) Como declarar variáveis ponteiros; 3) Operadores de ponteiros como & e *; 4) Expressões com ponteiros como atribuição e aritmética de ponteiros; 5) Como ponteiros se relacionam com matrizes para acessar elementos e varredura de matrizes.
[1] O documento discute representação e aritmética de números inteiros no hardware de um computador, incluindo representação em complemento de dois, operações aritméticas como adição, subtração, multiplicação e divisão. [2] É explicado como esses cálculos são implementados no hardware da unidade lógica e aritmética de um processador. [3] Algoritmos específicos como o algoritmo de Booth para multiplicação com sinal também são apresentados.
O documento discute simuladores do processador 8086 como TASM, MASM, Debug e EMU8086. Apresenta as vantagens do EMU8086 como visualização gráfica da memória, registradores e outras partes do processador. Também lista algumas desvantagens como limitações em comandos e interrupções. Exemplos de código assembly são fornecidos para ilustrar uso do EMU8086.
Este documento resume a aula 04 de um curso de Automação sobre Arduino. Ele discute os tipos de laços de repetição como for(), while() e do{}while() e fornece exemplos de como usar o laço for() para contar de 1 a 15 e acender 8 leds. Os alunos são então instruídos a fazer esses exercícios práticos.
Este documento contém 20 exercícios sobre arquitetura de sistemas digitais e linguagem assembly do MIPS, incluindo conversões entre bases numéricas, operações lógicas e aritméticas, e escrita e análise de código em assembly.
Este documento apresenta uma lista de 53 questões sobre organização de computadores divididas em duas seções. A primeira seção contém questões sobre arquitetura de computadores, hierarquia de memória, barramentos, processadores e memórias. A segunda seção lista exercícios complementares de livros texto sobre o tema.
Internet das Coisas, ou em inglês internet of things é um desafio do ponto de vista de inovação mas também do ponto de vista de Segurança e Privacidade.
Na apresentação da internet das coisas exemplos de atenção no que a Cisco chama de internet of everything.
IoT – Internet of Things. Do Básico ao Hello World!Rodolfo Cruz
Apresentação básica sobre Internet das Coisas(IoT - Internet Of Things) e as principais tecnologias envolvidas.
Um pouquinho sobre Arduino e Raspberry PI, finalizando com um projeto no Arduino que faz leitura da temperatura ambiente e imprime em um Display LCD 16x2.
Exercícios Resolvidos - Arquitetura e Organização de ComputadoresRonildo Oliveira
A empresa de tecnologia anunciou um novo smartphone com câmera aprimorada, maior tela e melhor desempenho. O dispositivo também possui recursos adicionais de inteligência artificial e segurança de dados aprimorados. O lançamento do novo smartphone está programado para o final deste ano.
O documento descreve a arquitetura MIPS de 32 bits, incluindo exemplos de compilação de instruções em linguagem de montagem e máquina MIPS. Ele contém 10 exemplos de compilação de diferentes estruturas de programação como atribuições, acesso a memória, laços e condicionais compilados em instruções MIPS. Além disso, fornece tabelas com os códigos binários dos registradores, instruções e outros detalhes da arquitetura MIPS.
Este documento fornece um resumo de instruções e arquitetura MIPS de 32 bits. Ele inclui:
1) Os tipos de instruções MIPS e seus campos;
2) Os registradores e seus usos;
3) Os principais modos de endereçamento e instruções;
4) Exemplos passo-a-passo de conversão entre linguagem de alto nível e assembly.
O documento apresenta uma introdução à sintaxe da linguagem Python, incluindo blocos por indentação, comentários, tipos de dados básicos como números, strings e listas, e operadores. Também discute execução de scripts Python, variáveis e atribuição.
O documento descreve as principais etapas de um compilador, incluindo a geração de código intermediário, geração de código objeto, otimização de código e gerenciamento de tabelas de símbolos. O código intermediário representa o programa em uma forma independente da máquina e pode ser otimizado antes de ser traduzido para código de máquina. A geração de código objeto mapeia o código intermediário para instruções da máquina-alvo.
O documento descreve as características e elementos de um conjunto de instruções de computadores. Apresenta os componentes básicos de uma instrução de máquina, como código de operação, endereços dos operandos e da próxima instrução. Discute também tipos de instruções, formatos, número de endereços, projeto do conjunto de instruções e tipos de operações suportadas.
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
Apresentação utilizada no treinamento com duração de 10 horas para um grupo de colaboradores da Teltec Solutions - http://teltecsolutions.com.br.
O material de apoio contém exemplos, exercícios e soluções, e pode ser encontrado em https://github.com/jweyrich/aprendendo-a-programar-com-python
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída e formatadores para comandos como date e printf.
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída, controle de fluxo e códigos de retorno de comandos.
1) O documento apresenta uma agenda sobre funções para strings em C, operações com matrizes multidimensionais e exercícios.
2) São descritas funções como strcpy, strcat e strlen para manipular strings e matrizes multidimensionais como int codigos[3][3][3].
3) Exemplos mostram como ler nomes, notas e matrículas de alunos usando múltiplas matrizes e calcular a média final em ordem decrescente.
O documento descreve um problema de otimização envolvendo linhas retas que conectam nove pontos. Inicialmente, uma solução com cinco linhas é apresentada, mas depois outra solução com apenas quatro linhas é encontrada, mostrando que o número mínimo de linhas é quatro. Em seguida, conceitos sobre processadores são introduzidos, incluindo registradores, barramentos, multiplexadores e unidades lógicas aritméticas. Uma arquitetura básica de processador é proposta para realizar somas, usando essas componentes.
O documento explica o conceito de pilhas, estruturas de dados que armazenam valores de forma empilhada. Pilhas possuem duas operações básicas: PUSH para adicionar valores e POP para remover valores. Pilhas são usadas na execução de programas para armazenar dados temporários e variáveis locais de funções. A pilha cresce para baixo na memória e é acompanhada por um ponteiro SP que indica o topo.
O documento descreve um programa PLC para controlar semáforos e detectar falhas em um processo industrial. Ele inclui instruções para desenvolver um programa em Ladder que opere semáforos e detecte condições de processo estáveis, instáveis ou não controláveis com base em um modelo matemático.
O documento discute ponteiros em linguagem C, incluindo: 1) O que são ponteiros e porque são usados; 2) Como declarar variáveis ponteiros; 3) Operadores de ponteiros como & e *; 4) Expressões com ponteiros como atribuição e aritmética de ponteiros; 5) Como ponteiros se relacionam com matrizes para acessar elementos e varredura de matrizes.
[1] O documento discute representação e aritmética de números inteiros no hardware de um computador, incluindo representação em complemento de dois, operações aritméticas como adição, subtração, multiplicação e divisão. [2] É explicado como esses cálculos são implementados no hardware da unidade lógica e aritmética de um processador. [3] Algoritmos específicos como o algoritmo de Booth para multiplicação com sinal também são apresentados.
O documento discute simuladores do processador 8086 como TASM, MASM, Debug e EMU8086. Apresenta as vantagens do EMU8086 como visualização gráfica da memória, registradores e outras partes do processador. Também lista algumas desvantagens como limitações em comandos e interrupções. Exemplos de código assembly são fornecidos para ilustrar uso do EMU8086.
Este documento resume a aula 04 de um curso de Automação sobre Arduino. Ele discute os tipos de laços de repetição como for(), while() e do{}while() e fornece exemplos de como usar o laço for() para contar de 1 a 15 e acender 8 leds. Os alunos são então instruídos a fazer esses exercícios práticos.
Este documento contém 20 exercícios sobre arquitetura de sistemas digitais e linguagem assembly do MIPS, incluindo conversões entre bases numéricas, operações lógicas e aritméticas, e escrita e análise de código em assembly.
Este documento apresenta uma lista de 53 questões sobre organização de computadores divididas em duas seções. A primeira seção contém questões sobre arquitetura de computadores, hierarquia de memória, barramentos, processadores e memórias. A segunda seção lista exercícios complementares de livros texto sobre o tema.
Internet das Coisas, ou em inglês internet of things é um desafio do ponto de vista de inovação mas também do ponto de vista de Segurança e Privacidade.
Na apresentação da internet das coisas exemplos de atenção no que a Cisco chama de internet of everything.
IoT – Internet of Things. Do Básico ao Hello World!Rodolfo Cruz
Apresentação básica sobre Internet das Coisas(IoT - Internet Of Things) e as principais tecnologias envolvidas.
Um pouquinho sobre Arduino e Raspberry PI, finalizando com um projeto no Arduino que faz leitura da temperatura ambiente e imprime em um Display LCD 16x2.
Exercícios Resolvidos - Arquitetura e Organização de ComputadoresRonildo Oliveira
A empresa de tecnologia anunciou um novo smartphone com câmera aprimorada, maior tela e melhor desempenho. O dispositivo também possui recursos adicionais de inteligência artificial e segurança de dados aprimorados. O lançamento do novo smartphone está programado para o final deste ano.
O documento descreve a arquitetura MIPS de 32 bits, incluindo exemplos de compilação de instruções em linguagem de montagem e máquina MIPS. Ele contém 10 exemplos de compilação de diferentes estruturas de programação como atribuições, acesso a memória, laços e condicionais compilados em instruções MIPS. Além disso, fornece tabelas com os códigos binários dos registradores, instruções e outros detalhes da arquitetura MIPS.
Este documento fornece um resumo de instruções e arquitetura MIPS de 32 bits. Ele inclui:
1) Os tipos de instruções MIPS e seus campos;
2) Os registradores e seus usos;
3) Os principais modos de endereçamento e instruções;
4) Exemplos passo-a-passo de conversão entre linguagem de alto nível e assembly.
O documento apresenta uma introdução à sintaxe da linguagem Python, incluindo blocos por indentação, comentários, tipos de dados básicos como números, strings e listas, e operadores. Também discute execução de scripts Python, variáveis e atribuição.
O documento descreve as principais etapas de um compilador, incluindo a geração de código intermediário, geração de código objeto, otimização de código e gerenciamento de tabelas de símbolos. O código intermediário representa o programa em uma forma independente da máquina e pode ser otimizado antes de ser traduzido para código de máquina. A geração de código objeto mapeia o código intermediário para instruções da máquina-alvo.
O documento descreve as características e elementos de um conjunto de instruções de computadores. Apresenta os componentes básicos de uma instrução de máquina, como código de operação, endereços dos operandos e da próxima instrução. Discute também tipos de instruções, formatos, número de endereços, projeto do conjunto de instruções e tipos de operações suportadas.
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
Apresentação utilizada no treinamento com duração de 10 horas para um grupo de colaboradores da Teltec Solutions - http://teltecsolutions.com.br.
O material de apoio contém exemplos, exercícios e soluções, e pode ser encontrado em https://github.com/jweyrich/aprendendo-a-programar-com-python
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída e formatadores para comandos como date e printf.
O documento descreve diferentes tipos de operadores, variáveis e comandos utilizados em shells do Linux, incluindo operadores aritméticos, relacionais, lógicos e de atribuição, variáveis especiais, expansão de variáveis, redirecionamento de entrada e saída, controle de fluxo e códigos de retorno de comandos.
1) O documento apresenta uma agenda sobre funções para strings em C, operações com matrizes multidimensionais e exercícios.
2) São descritas funções como strcpy, strcat e strlen para manipular strings e matrizes multidimensionais como int codigos[3][3][3].
3) Exemplos mostram como ler nomes, notas e matrículas de alunos usando múltiplas matrizes e calcular a média final em ordem decrescente.
O documento descreve um problema de otimização envolvendo linhas retas que conectam nove pontos. Inicialmente, uma solução com cinco linhas é apresentada, mas depois outra solução com apenas quatro linhas é encontrada, mostrando que o número mínimo de linhas é quatro. Em seguida, conceitos sobre processadores são introduzidos, incluindo registradores, barramentos, multiplexadores e unidades lógicas aritméticas. Uma arquitetura básica de processador é proposta para realizar somas, usando essas componentes.
O documento descreve um problema de otimização envolvendo linhas retas que conectam nove pontos. Inicialmente, uma solução com cinco linhas é apresentada, mas é sugerido que pode haver uma solução com menos linhas. Uma solução com quatro linhas é então demonstrada, conectando os pontos de forma diferente da inicial. Em seguida, o texto discute a importância de pensar "fora da caixa" para encontrar soluções não óbvias.
O documento descreve as principais características do microprocessador 8085, incluindo sua arquitetura de blocos com unidades como controle de entrada/saída, temporização e controle, lógica aritmética e registradores como programa, acumulador, flags e pares de registradores.
Técnicas de Prototipação II - Physical Computing - Aula 02Tiago Barros
O documento resume conceitos sobre sensores e atuadores sonoros e eletrônicos utilizados na plataforma Arduino. Inclui instruções para conectar e controlar microfones, buzzer, motores DC e displays de 7 segmentos, além de comunicação serial para enviar dados para o PC.
Técnicas de Prototipação II - Physical Computing - Aula 03Tiago Barros
O documento apresenta conceitos sobre sensores e atuadores sonoros e sua utilização com a plataforma Arduino. Inclui instruções para detectar sons e emitir notas musicais controlando um buzzer piezoelétrico, além de exemplos de código para ler um microfone e produzir sons. Também aborda comunicação serial, displays de 7 segmentos e o controle de motores DC.
1) O documento apresenta uma introdução ao Python, abordando tópicos como tipos de dados básicos, operadores, strings, listas e como aprender a programar de forma autodidata.
2) São explicados conceitos como blocos de código, comentários, números inteiros e de ponto flutuante, booleanos, None, strings, conversão entre encodings e operações com listas.
3) Dicas como usar o interpretador interativo, help, dir e documentação são dados para quem deseja aprender Python de forma independente.
1) Logaritmo é um estudo matemático que depende de potenciação e suas propriedades, onde o valor numérico de um logaritmo é encontrado através do desenvolvimento de uma potência em logaritmo.
2) O logaritmo de um número N na base b é o expoente x ao qual devemos elevar b para obtermos N.
3) Quando a base do sistema de logaritmos é 10, usamos a expressão logaritmo decimal e escrevemos somente logN.
O documento discute alocação de memória e listas encadeadas. Ele explica que variáveis dinâmicas precisam ter memória alocada durante a execução do programa e podem ser liberadas quando não são mais necessárias. Também descreve listas encadeadas como estruturas de dados onde cada nodo contém um campo de dados e um ponteiro para o próximo nodo, permitindo que os elementos sejam acessados de forma independente de sua posição física na memória. Por fim, fornece um exemplo de como inserir um novo valor no final de uma lista encadeada.
O documento apresenta os principais conceitos básicos da linguagem Python, incluindo: 1) Como escrever o primeiro programa "Hello World"; 2) Tipos de dados como números, strings e suas operações; 3) Estruturas de dados como listas, dicionários e arquivos.
O documento apresenta uma introdução básica à linguagem Python, abordando tópicos como: 1) impressão de "Hello World"; 2) tipos e operações básicas; 3) listas, strings e tuplas. Exemplos de código são fornecidos para exemplificar os conceitos apresentados.
O documento introduz Python como uma linguagem de programação e mostra como automatizar tarefas maçantes com ela. Explica como baixar e instalar o Python, conhecer o shell interativo, usar operadores e tipos de dados básicos, armazenar valores em variáveis e escrever um programa simples de exemplo.
1. Guia Rápido MIPS
Tipos de Dados e Formatações
Tipos de Dados:
Todas as instruções são de 32 bits
Byte = 8 bits
Halfword = 2 bytes
Word = 4 bytes
Um caractere ocupa 1 byte na memória
Um inteiro ocupa 1 word(4 bytes) na memória
Formatações:
Números são representados normalmente. Ex: 4
Caracteres ficam entre aspas simples. Ex: ‘a’
Strings ficam entre aspas duplas. Ex: “palavra”
Registradores
32 registradores
Os registradores são procedidos de $ nas instruções
Duas formas de representação:
Numero do registrador. $0 até $31
Usando os nomes equivalentes (ver abaixo). Ex: $t1, $sp
Registradores especiais para guardar resultado das multiplicações e divisões, Lo e Hi
Eles não são acessados diretamente, mas através das instruções: mfhi (“move
from Hi”) e mflo (“move from Lo”)
A pilha começa da parte alta da memória e cresce em direção a parte baixa da memória.
Estrutura do Programa
Arquivo de texto com a declaração de dados e o código do programa. O arquivo
deve ter a extensão .s para ser usado com o simulador SPIM.
A declaração de dados deve vir anterior ao código do programa.
2. Declaração de Dados:
Seção do programa identificado pela diretiva .data
Os nomes declarados das variáveis são usados no programa. Dados guardados na
memória principal (RAM)
Código:
Seção do programa identificado pela diretiva .text
Contêm o código do programa (instruções).
Ponto de inicio do código marcado pelo label main:
O final da main deve usar a chamada de saída do sistema (exit system call).
Obs: Deixe uma linha vazia ao final do programa para facilitar o simulador
SPIM.
Comentários:
Tudo que vem após # em uma linha é considerado comentário.
Declaração de dados
Formato das declarações:
nome:
tipo_de_dados
valor(es)
cria uma variável na memória, com o tipo especificado, o nome e valores dados.
valor(es) usualmente dão o valor inicial; para reservar memória use o tipo
.space, dá o número de espaços a serem alocados.
Obs: Labels sempre são seguidos de dois pontos ( : )
Exemplos:
var1:
.word
3
array1:
.byte
'a','b' # cria um vetor(array) de dois elementos
já inicializados para a e b
# cria uma variável inteiro de valor 3
array2:
.space 40
# aloca 40 espaços consecutivos de bytes, não inicializados. Poderia
ser usado como um vetor de 40 caracteres ou um vetor de 10 inteiros,
por exemplo. (usar um comentário para informar que tipo de vetor vai
ser usado é uma boa prática de programação).
Instruções
Leitura/Escrita
Acesso a memória RAM apenas com instruções de leitura e escrita.
Todas outras instruções usam registradores como operando.
Leitura/Escrita de endereçamento direto
Leitura:
lw
registrador, posição_da_RAM
- copia word(4 bytes) da posição da RAM dada, para o registrador dado.
lb
registrador, posição_da_RAM
- copia byte da posição da RAM dada, para a parte baixa do registrador dado.
3. li
registrador, valor
- carrega o valor para o registrador de destino.
Escrita:
sw registrador, posição_da_RAM
- escreve a word do registrador dado na posição da RAM dada.
sb
registrador, posição_da_RAM
- escreve o byte da parte mais baixa do registrador dado para a posição da RAM
Exemplo:
.data
var1:
.word
23
.text
main:
lw
li
sw
$t0, var1
$t1, 5
$t1, var1
# carrega o conteúdo de var1 em $t0
# $t1 = 5
# carrega o conteúdo de $t1 em var1
Leitura/Escrita de endereçamento indireto e por base
Leitura
la
registrador, label
- copia o endereço do label na memória para o registrador dado
Endereçamento indireto
lw
registrador1, (registrador2)
- carrega a word que está no endereço dado pelo registrador2, para o registrador1
Endereçamento por base
lw
registrador1, offset(registrador2)
- carrega a word que está no endereço (registrador2 + offset) para o registrador1
obs: o offset pode ser negativo
Escrita
Endereçamento indireto
sw
registrador1, (registrador2)
- copia a word no registrador1 para posição de memória de endereço dado pelo
registrador2
Endereçamento por base
sw
registrador1, offset(registrador2)
- copia a word no registrador1 para posição de memória de endereço dado por
(registrador2+offset)
obs: o offset pode ser negativo
Exemplo:
array1:
.data
.space 12
# array de 3 inteiros
main:
.text
la
# carrega o endeço do array1
$t0, array1
4. li
sw
li
sw
li
sw
$t1,
$t1,
$t1,
$t1,
$t1,
$t1, 5
($t0)
13
4($t0)
-7
8($t0)
#
#
#
#
#
#
#
para t0
t1 = 5
1º elemento do array1 = 5
t1 = 13
2º elemento do array1 = 13
t1 = -7
3º elemento do array1 = -7
Movimentação
move
registrador0, registrador1
- copia o valor do registrador1 para o registrador0
Ex: move
$t2, $t4 # t2 = t4
mfhi
registrador0
- copia o valor do registrador Hi para o registrador0
Ex: mfhi
$t1
# t1 = Hi
mflo
registrador0
- copia o valor do registrador Lo para o registrador0
Ex: mflo
$t1
# t1 = Lo
Aritiméticas
Devem usar 3 operandos
Todos operandos são registradores
O tamanho do operando é word(4 bytes)
add
registrador0, registrador1, registrador2
- salva o resultado da soma do registrador1 com o registrador2 no registrador0
obs: soma com sinal
Ex: add $t0, $t1, $t2
# t0 = t1 + t2
addi
registrador0, registrador1, imediato
- salva o resultado da soma do registrador1 com o imediato no registrador0
obs: soma com sinal
Ex: addi $t0, $t1, 5
# t0 = t1 + 5
addu
registrador0, registrador1, registrador2
- salva o resultado da soma do registrador1 com o registrador2 no registrador0
obs: soma sem sinal
sub
registrador0, registrador1, registrador2
- salva o resultado da subtração do registrador1 c/ o registrador2 no registrador0
obs: subtração com sinal
Ex: sub $t0, $t1, $t2
# t0 = t1 - t2
subu
registrador0, registrador1, registrador2
- salva o resultado da subtração do registrador1 c/ o registrador2 no registrador0
obs: subtração sem sinal
mul
registrador0, registrador1, registrador2
- multiplica o registrador1 pelo registrador2 e guarda no registrador0
obs: multiplicação sem overflow
5. mulo
registrador0, registrador1, registrador2
- multiplica o registrador1 pelo registrador2 e guarda no registrador0
mulou
registrador0, registrador1, registrador2
- multiplica o registrador1 pelo registrador2 e guarda no registrador0
obs: Multiplicação sem sinal
mult
registrador1, registrador2
- multiplica o registrador1 pelo registrador2 e guarda nos registradores especiais
obs: multiplicação de 32-bits que gera um resultado de 64-bits que fica guardado
em Hi e Lo.
Ex: mult $t3, $t4
# Hi, Lo = t3 * t4
multu
registrador1, registrador2
- multiplica o registrador1 pelo registrador2 e guarda nos registradores especiais
obs: multiplicação de 32-bits que gera um resultado de 64-bits que fica guardado
em Hi e Lo.
obs2: multiplicação sem sinal
Ex: mult $t3, $t4
# Hi, Lo = t3 * t4
div
registrador0, registrador1, registrador2
- guarda o resultado da divisão inteira do reg1 pelo reg2 no registrador0
divu
registrador0, registrador1, registrador2
- guarda o resultado da divisão inteira do reg1 pelo reg2 no registrador0
obs: divisão sem sinal
div
registrador1, registrador2
- divide o registrador1 pelo registrador2 e guarda nos registradores especiais
obs: O quociente fica guardado em Lo e o resto fica guardado em Hi
divu
registrador1, registrador2
- divide o registrador1 pelo registrador2 e guarda nos registradores especiais
obs: O quociente fica guardado em Lo e o resto fica guardado em Hi
obs2: divisão sem sinal
rem
registrador0, registrador1, registrador2
- guarda o resto da divisão do registrador1 pelo registrador2 no registrador0
remu
registrador0, registrador1, registrador2
- guarda o resto da divisão do registrador1 pelo registrador2 no registrador0
obs: divisão sem sinal.
Lógicas
and
registrador0, registrador1, registrador2
- guarda o resultado da operação lógica AND entre reg1 e reg2 no registrador0
andi
registrador0, registrador1, imediato
- guarda o resultado da operação lógica AND entre reg1 e imed no registrador0
6. neg
registrador0, registrador1
- guarda o inverso do valor do registrador1 no registrador0
negu
registrador0, registrador1
- guarda o inverso do valor do registrador1 no registrador0
obs: sem overflow
nor
registrador0, registrador1, registrador2
- guarda o resultado da operação lógica NOR entre reg1 e reg2 no registrador0
not
registrador0, registrador1
- guarda o resultado da negação binária do valor do registrador1 no registrador0
or
registrador0, registrador1, registrador2
- guarda o resultado da operação lógica OR entre reg1 e reg2 no registrador0
ori
registrador0, registrador1, imediato
- guarda o resultado da operação lógica OR entre reg1 e imed no registrador0
rol
registrador0, registrador1, imediato
- guarda o resultado da rotação para esquerda, de distancia dada pelo valor do
imediato, de bits do valor do registrador1 no registrador0
ror
registrador0, registrador1, imediato
- guarda o resultado da rotação para direita, de distancia dada pelo valor do
imediato, de bits do valor do registrador1 no registrador0
sll
registrador0, registrador1, imediato
- guarda o resultado do deslocamento lógico para esquerda, de distancia dada
pelo valor do imediato, de bits do valor do registrador1 no registrador0
sla
registrador0, registrador1, imediato
- guarda o resultado do deslocamento aritmético para esquerda, de distancia dada
pelo valor do imediato, de bits do valor do registrador1 no registrador0
srl
registrador0, registrador1, imediato
- guarda o resultado do deslocamento lógico para direita, de distancia dada pelo
valor do imediato, de bits do valor do registrador1 no registrador0
sra
registrador0, registrador1, imediato
- guarda o resultado do deslocamento aritmético para direita, de distancia dada
pelo valor do imediato, de bits do valor do registrador1 no registrador0
xor
registrador0, registrador1, registrador2
- guarda o resultado da operação lógica XOR entre reg1 e reg2 no registrador0
xori
registrador0, registrador1, imediato
- guarda o resultado da operação lógica XOR entre reg1 e imed no registrador0
7. Desvio
Incondicional
b
label
- muda o registrador PC(registrador que guarda o endereço da próxima instrução
a ser executada) para o valor do label
j
label
- muda o registrador PC(registrador que guarda o endereço da próxima instrução
a ser executada) para o valor do label
jr
registrador
- muda o registrador PC(registrador que guarda o endereço da próxima instrução
a ser executada) para o endereço contido no registrador
Condicional
beq
registrador0, registrador1, label
- desvia para o label, se: registrador0 = registrador1
blt
registrador0, registrador1, label
- desvia para o label, se: registrador0 < registrador1
ble
registrador0, registrador1, label
- desvia para o label, se: registrador0 <= registrador1
bgt
registrador0, registrador1, label
- desvia para o label, se: registrador0 > registrador1
bge
registrador0, registrador1, label
- desvia para o label, se: registrador0 >= registrador1
bne
registrador0, registrador1, label
- desvia para o label, se: registrador0 != registrador1
Chamada de subrotina
jal
label
- desvia para o label da subrotina.
- copia o PC para o registrador RA
jr
ra
- desvia para o endereço contido em RA
- usado para fazer o retorno da subrotina para o programa.
Obs: se uma subrotina for chamar outra subrotina, ou é recursiva, o endereço em RA
será sobrescrito, ele deveria então ser empilhado para que ele possa ser preservado e
recuperado ao termino das chamadas para dar continuidade ao programa normalmente.
8. Entrada/Saída e chamadas de sistema
Usado para ler ou imprimir valores ou strings da Entrada/Saída, e indicar o fim
de programa
Usar a chamada de rotina syscall
Deve-se informar os valores necessários nos registradores v0, a0 e a1
Se houver um retorno, ele será no registrador v0
A função de imprimir string espera uma string terminada com caractere nulo. A
diretiva .asciiz cria uma string terminada em caracter nulo.
A leitura de inteiros, floats e doubles lêem um liha inteira, inclusive o caractere
de nova linha.
A função de ler strings tem a mesma semântica da rotina fgets da biblioteca
UNIX:
- Lê até a posição n-1 e termina com o caractere nulo.
- Se tiver menos de n-1 caracteres na linha, todos são lidos, inclusive o
caractere de nova linha, e a string é terminada com o caractere nulo.
A função exit finaliza o programa.
Exemplo: Imprime o inteiro que está em t2
li
$v0, 1
# carrega o código de imprimir int.
move
$a0, $t2
# move o inteiro para a0
syscall
# chama o SO para realizar a operação
Exemplo: Lê o inteiro, guardando na memoria, na posição de memória com
label int_value (declarada na sessão de data)
li
$v0, 5
# carrega o código de ler inteiro
syscall
# chama o SO para realizar a operação
sw
$v0, int_value # o valor foi retornado em v0
Exemplo: Imprime uma string
.data
string1
.asciiz
"frase para imprimir.n"
# .asciiz directive makes string null terminated
.text
li
la
main:
$v0, 4 # carrega o código de imprimir string
$a0, string1 # carrega o endereço da string a
ser impressa em a0
syscall
# chama o SO para realizar a operação
Exemplo: Terminando o programa
li
$v0, 10
# carrega o código da operação
9. syscall
# chama o SO para realizar a operação
Referências:
http://msdn.microsoft.com/en-us/library/ms253512%28VS.80%29.aspx
http://www.doc.ic.ac.uk/lab/secondyear/spim/node13.html
http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm
10. syscall
# chama o SO para realizar a operação
Referências:
http://msdn.microsoft.com/en-us/library/ms253512%28VS.80%29.aspx
http://www.doc.ic.ac.uk/lab/secondyear/spim/node13.html
http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm