linguagem_de_maquina
-
Upload
antonio-correia -
Category
Documents
-
view
93 -
download
2
description
Transcript of linguagem_de_maquina
![Page 1: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/1.jpg)
Linguagem de Máquina
Organização de Computadores
![Page 2: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/2.jpg)
Conteúdo
1. Introdução2. Operações executadas pelo hardware da máquina3. Operandos do hardware da máquina4. Representação de instruções5. Instruções de desvio6. Suporte a procedimentos pelo hardware da máquina7. Além dos números8. Outros estilos de endereçamento9. Execução de um programa10. Exemplo para juntas as peças11. Lendas e falhas12. Considerações finais13. Bibliografia
![Page 3: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/3.jpg)
1. Introdução Linguagem de máquina → instruções Conjunto de instruções → vocabulário Metodologia: aumento gradativo da complexidade Linguagens de máquinas: mais parecidas com dialetos do que com
línguas diferentes (princípios semelhantes) Objetivos da linguagem:
Facilitar construção do hardware e compiladores Maximizar a performance Minimizar o custo
Nesta unidade: Linguagem C, Assembly, Linguagem de Máquina Instruções: MIPS (NEC, Nintendo, Silicon Graphics, Sony) Instruções do Z80 (laboratório)
![Page 4: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/4.jpg)
Instrução - Definição
É um comando referente a uma operação elementar que o computador seja capaz de executar. Cada modelo de computador dispõe de certo conjunto de instruções, que constituem o seu repertório de instruções. O número de instruções que constituem o repertório varia desde algumas dezenas até mais de uma centena.
![Page 5: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/5.jpg)
Formato das Instruções
Código de operação ou OPCODE: identifica a operação a ser realizada pelo processador. É o campo da instrução cuja valor binário identifica (é o código binário) da operação a ser realizada.
Formato de instruções de um operando:
Código de operação Operando
![Page 6: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/6.jpg)
Formato de Instruções
• O número de bits do código de operação depende de quantas instruções tem o set de instruções da máquina.
• Ex: um processador com 256 instruções teria necessidade de 8 bits para representar o código de operação
![Page 7: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/7.jpg)
Formato de Instruções
Outros sistemas possuem código de operação de tamanho variável.
Por exemplo, o IBM/370 tem: 166 instruções com código de operação de 8
bits.11 instruções com código de operação de 16
bits.
![Page 8: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/8.jpg)
Formato de Instruções
Operando(s) - é o campo da instrução cujo valor binário sinaliza a localização do dado (ou é o próprio dado) que será manipulado (processado) pela instrução durante a operação.
![Page 9: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/9.jpg)
Tipos de Instruções
Três formatos típicos de instrução:
Código de operação
Código de operação Operando
Código de operação Operando 2Operando 1
![Page 10: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/10.jpg)
Tipos de Instruções
As instruções de um computador, podem ser classificadas de acordo com a sua funcionalidade: Transferência de dados Uso dos recursos da CPU Desvio do fluxo de execução I/O
![Page 11: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/11.jpg)
2. Operações do Hardware
Todo computador deve realizar operações aritméticas fundamentais
MIPS: add a,b,c ↔ a b + c Z80: add a,b ↔ a a + b
A princípio denotaremos a, b e c como variáveis Instruções são mais rígidas que em linguagem de alto
nível sempre 3 operandos (MIPS). Simplifica o hardware
![Page 12: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/12.jpg)
Exercícios
1. criar uma seqüência de instruções para somar a, b, c e d. Usando instruções MIPS Usando instruções do Z80
2. Traduzir para o MIPS e para o Z80 o programa em C abaixo:a=b+c;d=a-e;
3. Um programa em C um pouco mais complexo que o anterior é apresentado a seguir, e contém cinco variáveis:
);()( cbhlf
a) Qual o código MIPS produzido pelo compilador?b) Qual o código Z80 produzido pelo compilador?
![Page 13: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/13.jpg)
3. Operandos do hardware de máquina Em baixo nível não há o conceito de variável Registradores → conjunto especial de localidades de
memória No Z80 os registradores podem ser de 8 ou 16 bits:
8 bits: A, B, C, D, E, F, H, I 16 bits: IX e IY
8 bits: palavra (word) Operandos: sempre um registrador para as operações
aritméticas Registrador A: acumulador (acc) Número de registradores influencia no ciclo de clock
![Page 14: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/14.jpg)
3. Operandos do hardware de máquina
Muitas vezes: existem variáveis demais. Arrays (matrizes), estruturas etc.
Quando os registradores internos não são suficientes memória (milhões de posições).
Z80 Aritmética ocorre apenas nos registradores. Necessidade de instruções de transferência (load):
Memória Registradores Registradores Memória
![Page 15: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/15.jpg)
Memória
Posições de memória: números.
1 byte por posição. Memória Registradores
ld (carregar)
Sintaxe:ld A,(nn)Atribui ao registrador A o valor da
posição de memória indicada por nn (entre 0000H e FFFF H)
![Page 16: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/16.jpg)
Exercício
Supor que a é uma array (matriz) de 100 posições. As variáveis g e h estão armazenadas nos registradores B e C. O endereço base da array está armazenado em HL. Traduzir para assembly:
];8[ahg
Obs: a partir de agora usaremos a seguinte notação: Letras maiúsculas → registradores Letras minúsculas → variáveis
![Page 17: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/17.jpg)
Armazenamento
No Z80 tanto o armazenamento quanto o carregamento são feitos pela instrução ld ld (nn),A Atribui a posição de memória indicada por nn
uma cópia do valor existente no registrador A
![Page 18: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/18.jpg)
Exercício
Supor que variável h esteja associada ao registrador C e que o endereço-base de a esteja armazenado em HL. Qual o código de montagem do Z80 para o comando de atribuição seguinte, escrito em C:
];8[]12[ aha
![Page 19: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/19.jpg)
Interface Hardware/Software
Muitas vezes existem mais variáveis que registradores
Variáveis mais freqüentemente usadas → registradores. As restantes → memória.
Processo de colocar variáveis menos usadas na memória: vazamento de registradores (spilling registers).
Registradores são mais rápidos que memória.
![Page 20: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/20.jpg)
4. Representação das instruções
Humanos: base 10. Computadores: base 2. 12310=11110112. Instruções: números. Z80 Instruções de 8, 16, 24 ou 32 bits. Cada instrução contém: opcode, operandos. Registradores no Z80:
A (acumulador) – 8 bits B, C, D, E, H, L – 8 bits F (flags) – 8 bits IX, IY (endereçamento) – 8 bits
![Page 21: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/21.jpg)
Instruções em linguagem de máquina no Z80
Há um conflito entre o desejo de manter todas as instruções do mesmo tamanho e o desejo de ter um único formato de instrução.
Todas as instruções no Z80 possuem o mesmo formato: tamanhos diferentes
Todas as instruções no MIPS possuem o mesmo tamanho: formatos diferentes
![Page 22: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/22.jpg)
Instruções em linguagem de máquina no Z80
Veja apostila do laboratório, disponível em: ANEXO III - Tabela de OpCodes
![Page 23: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/23.jpg)
Computadores modernos
1. Instruções são representadas como números.
2. Programas podem ser armazenados na memória. Programa armazenado na memória (diversidade):
Programa de contabilidade. Editor. Compilador. Dados. Texto. Programa em C.
![Page 24: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/24.jpg)
5. Instruções de Desvio
Computadores: capacidade de tomar decisões baseadas nos dados.
Linguagens de alto nível: if e goto. Z80: jp Veja apostila do laboratório:
Saltos Condicionais e Incondicionais
![Page 25: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/25.jpg)
Exercícios
1. Transformar para linguagem de montagem do Z80:
a)if (a==10)
a=a+1;
else
a=a-1;
b)if (a==10) {
a=a+1;
b=10;
}
else {
a=a-1;
b=20;
}
c)for (i=0; i<10; i++) {
a=a+1;
c=10;
}
![Page 26: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/26.jpg)
6. Suporte a procedimentos pelo hardware da máquina
Procedimento ou sub-rotina: Estruturação de programas. Mais fácil de entender. Reutilização. Dividir em partes menores.
Analogia “Agente Secreto” Recebe o plano. Adquire os recursos. Executa. Limpa “pistas”. Devolve o resultado.
![Page 27: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/27.jpg)
O programa e o procedimentos precisam
Colocar os parâmetros em lugar acessível ao procedimento.
Transferir controle p/ o procedimento. Garantir recursos de memória necessários à
execução do procedimento. Realizar a tarefa. Colocar o resultado acessível ao programa
que chamou o procedimento Retornar o controle ao ponto de origem
![Page 28: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/28.jpg)
Passagem de parâmetros
Forma tradicional: usar a pilha. Estrutura do tipo LIFO. Usada para:
Colocar argumentos extras. Colocar retornos extras. Salvar registradores. Variáveis locais.
Colocar na pilha: push. Retirar da pilha: pop.
![Page 29: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/29.jpg)
Procedimentos no Z80
Veja apostila do laboratório: Instruções de Rotação e Funções
![Page 30: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/30.jpg)
Exercícios
Transforma num procedimento o trecho de programa abaixo:
int examplo (ing g, int h, int i, int j){
int f;f = (g + h) – (i + j);return f;
}
![Page 31: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/31.jpg)
Procedimentos Aninhados
Mais difíceis. Chamam outros procedimentos. Pior: chamam eles mesmos (recursivos). Como resolver?
![Page 32: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/32.jpg)
Alocação de espaço para novos dados
Pilha: também usada para guardar variáveis locais que não cabem nos registradores.
Por exemplo: arrays Variáveis em C:
Posição de memória. Tipo: int ou char Classe de armazenamento: automática ou estática Automáticas: locais a um procedimento. Estáticas: sobrevivem a um procedimento, declaradas fora
de procedimentos.
![Page 33: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/33.jpg)
7. Além do números
Computadores: inicialmente números. Depois: textos. Muito usado: código ASCII. O Z80 não possui strings. Para os exercícios
seguintes usar-se-á como strings os códigos em hexadecimal do teclado.
Veja detalhes de como tratar strings no livro do Patterson-Hannessy pág 78
![Page 34: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/34.jpg)
Exercícios
O procedimento strcpy copia um string y num string x, usando o byte null como convenção de término de string. Faça o procedimento na linguagem do Z80 fazendo o teste de parada com o número zero.
void strcpy(char x[ ], char y[ ]){
int i;i = 0;while (x[i] = y [i] != 0)
i = i+1;}
![Page 35: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/35.jpg)
8. Outros estilos de endereçamento no Z80
Modo de endereçamento: é a forma de sinalizar a localização de um dado. Pode ser: endereçamento direto; endereçamento indireto; endereçamento imediato; endereçamento indexado.
Veja apostila do laboratório: Instruções de Transferência de Dados
![Page 36: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/36.jpg)
9. Execução de um programa São necessários quatro passos para
transformar um programa em C linguagem de máquina
![Page 37: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/37.jpg)
Compilador
Transforma C Assembly Linguagem de alto nível: maior
produtividade. Antigamente: escrito em Assembly. Atualmente: escrito em linguagem de alto
nível.
![Page 38: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/38.jpg)
Montador Assembly Linguagem de máquina. MIPS: O assembly “incrementa” artificialmente o set de
instruções. Pseudo-instruções: não existem na máquina, o montador as cria
para melhorar os recursos do Assembly. Pseudo-instrução move: move $t0,$t1 O montador transforma em: add $t0,$zero,$t1 Montadores: aceitam números em diferentes bases: decimal,
binário, hexadecimal. Montador: transforma o programa em linguagem de máquina
num arquivo objeto combinação de: instruções em linguagem de máquina; dados; informações necessárias para carregar o programa adequadamente
na memória.
![Page 39: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/39.jpg)
Ligador (Linker)
Mudança em um programa, que é parte de um conjunto: tem que mudar todo o programa?
Não. Só uma parte é recompilada. Cada programa já pode estar compilado (em
linguagem de máquina). Um programa chamado ligador “monta” os
programas como um único programa.
![Page 40: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/40.jpg)
Ligador - 3 passos
1. Colocar os módulos de código e dados simbolicamente na memória
2. Determinar os endereços dos labels de dados e de instruções.
3. Resolver as referências externas e internas. Usa, para tal, as informações do programa objeto. O ligador “monta” o arquivo, colocando os
endereços certos. Gera um arquivo executável.
![Page 41: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/41.jpg)
Carregador (Loader)
Realiza o carregamento do programa na memória. No UNIX:
1. Leitura do cabeçalho.
2. Criação de espaço de cód. e dados.
3. Copiar instr. e dados para a memória.
4. Copiara os par. p/ a pilha (quando houver).
5. Iniciar o SP (stack pointer).
6. Desviar para a rotina de inicialização
![Page 42: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/42.jpg)
10. Exemplo Para Juntar as Peças
O procedimento swap. Trocar dois elementos consecutivos do array.
Na tradução de qualquer programa em C para a linguagem de máquina, deverão ser seguidos os seguintes passos:
1. Alocar registradores para as variáveis.
2. Produzir código para o procedimento.
3. Preservar os registradores nas chamadas.
![Page 43: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/43.jpg)
11. Lendas e falhas
Lenda → Instruções mais poderosas significam melhor performance
Falha → esquecer que endereços de palavras consecutivas com endereçamento a byte não diferem de uma unidade
Falha → usar um ponteiro para uma variável automática fora do procedimento onde ela foi definida.
![Page 44: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/44.jpg)
12. Considerações finais
Princípios básicos do hardware:
1. A simplicidade é favorecida pela regularidade
2. Quanto menor, mais rápido
3. Um bom projeto demanda compromisso
4. Torne o caso comum mais rápido
![Page 45: linguagem_de_maquina](https://reader031.fdocumentos.com/reader031/viewer/2022020218/5571f82c49795991698cce9d/html5/thumbnails/45.jpg)
13. Bibliografia
Patterson, David A. e Hennessy, John L. Organização e Projeto de Computadores: A Interface Hardware/Software. Ed. LTC, 452. Ed., 2000, Rio de Janeiro.