Transcript Instruction Sets
Organização e Arquitetura de Computadores
Capítulos 9 e 10 Conjunto de Instruções
O que é um conjunto de instruções?
Coleção completa das instruções que são entendidas por uma CPU Código de máquina • Binário Representada por códigos em assembly (linguagem de montagem)
Elementos de uma instrução
Código de operação (Cod.Op ou Opcode) • Especifica a operação a ser efetuada • Ex. ADD Referência a operando fonte • • Operandos para a operação Dados de entrada Referência a operando de resultado • Resultado da operação Referência à próxima instrução • • • Indica onde a CPU deve buscar a próxima instrução Normalmente a próxima instrução Excessões: jumps
Localização dos Operandos
Memória principal (ou virtual ou cache) Registradores da CPU Dispositivos de I/O
Ciclo de instruções
Representação de Instruções
Cada instrução é representada por um único padrão de bits Para a compreensão humana, uma representação simbólica é usada: mnemônicos • e.x. ADD, SUB, LOAD Operandos também podem ser representados dessa maneira • ADD A,B
Número de endereços
Instruções podem ser analisadas de acordo com o número de endereços de operandos • Operações aritméticas podem demandar um maior número de operandos Considere a operação: Y=(A-B)/(C*D*E) Quantos endereços utilizar???
3, 2 ou 1 endereços?
Número de endereços
3 endereços • Operando 1, Operando 2, Resultado • • a = b + c; Pouco utilizadas Necessita de palavras grandes para armazenar todos os parâmetros da instrução
Número de endereços
2 endereços • Um endereço funciona duplamente como operando e resultado • a = a + b • • Reduz o comprimento da instrução Necessita de algum trabalho extra Armazenamento temporário de alguns resultados
Número de endereços
1 endereço • Segundo endereço é implícito • • Normalmente é um registrador (ex: acumulador) Comum nas máquinas mais simples
Número de endereços
0 (zero) endereços • Todos os endereços são implícitos • • • • • Usa uma pilha e.g. push a push b add pop c • c = a + b
Vantagens/Desvantagens
Mais endereços • Instruções mais complexas • • Mais registradores Operações entre registradores são mais rápidas Menos instruções por programa Menos endereços • CPU mais simples • • • Instruções menos complexas Mais instruções por programa Busca/execução mais rápidas
Decisões de projeto
Algumas decisões de projeto devem ser levadas em conta Efeito significativo sobre a implementação da CPU • Complexidade • Custos Necessidades do programador
Decisões de projeto
Repertório das operações • Quantas operações?
• • O que elas podem fazer?
Quão complexas são?
Tipos de dados Formato das instruções • Comprimento do código de operação (quantos bits) • Número de endereços
Decisões de projeto
Registradores • Número de registradores disponíveis na CPU • • Quais operações podem ser feitas em quais registradores?
Gerais ou específicos Modos de endereçamento RISC versus CISC
Trabalho 3
Pesquisa • Arquiteturas RISC x Arquiteturas CISC • • • Tópicos: Características dos dois grupos de arquiteturas Vantagens e Desvantagens Exemplos de arquiteturas (número de registradores, instruções, desempenho) Dupla Páginas: entre 4 e 6 páginas (formato artigo) • • Entrega: último dia de aula de OAC (2006) Consultar no mínimo 4 referências (citá-las no texto)
Tipos de operando
Endereços (detalhes Cap. 10) Números • Inteiros • Ponto Flutuante • Cap. 8 Decimais (BCD: binary coded decimal) 4 bits para cada dígito decimal Caracteres • ASCII • EBCDIC Lógicos • Bits or flags 8 bits por caracter
Tipos de operação
Quantidade de instruções varia de acordo com a máquina Mas a classe de instruções é basicamente a mesma: • Transferência de dados • • • • • • Aritmética Lógica Conversão E/S Controle Transferência de controle
Transferência de dados
Especificar • Fonte • • Destino Quantidade de dados Em alguns casos diferentes instruções para diferentes movimentos • e.x. IBM 370
Exemplos
Aritmética
Adição, subtração, multiplicação e divisão • Inteiros com sinais • Floating point Exemplo
Lógica
Operações aplicadas a bits AND, OR, NOT Exemplo
Conversão
E.x. Binário para decimal
Input/Output
Instruções específicas Pode ser executadas instruções de movimentação de dados Pode ser executado por uma controladora separada (DMA)
Controle
Instruções privilegiadas CPU deve estar em um estado específico Para uso do sistema operacional
Transferência de controle
3 motivos • Decisão • • Repetição Modularidade Tipos de intruções: • Desvio/Saltos (jumps) • Chamadas de procedimento
Instruções de Desvio/Salto
Comumente instruções são executadas em seqüência Pode haver a necessidade de desviar (pular) uma instrução (ou algumas) Intruções: • Desvio feito se alguma condição é satisfeita (desvio condicional) • Desvio incondicional
Chamadas de procedimento
Desenvolvimento em módulos • Procedimentos Vantagens: • Modularidade • Economia de código
Retorno de procedimentos
3 possibilidades • Registrador • • Área de memória Pilha (também usada para passagem de parâmetros) Registro de ativação
Modos de Endereçamento
Imediato Direto Indireto Registrador Indireto a Registrador Indexado (Displacement) Pilha (Stack)
Endereçamento Imediato (cap 10)
Operando é parte da instrução Operando = campo do endereço e.x. ADD 5 • Soma 5 ao conteúdo do acumulador • 5 é o operando Nenhuma referência à memória para buscar dados Rápido
Endereçamento Direto
Campo de endereços contém o endereço do operando Endereço efetivo (EA) = campo de endereço efetivo(A) e.x. ADD A • Adiciona o conteúdo de uma célula A ao acumulador • Olha na memória o no endereço A para um operando Referencia uma memória única para acessar os dados Não apresenta cálculos adicionais para trabalhar com o endereço efetivo Espaço de endereçamento limitado
Endereçamento Direto
Cod.Op
Instrução Endereço A Memória Operando
Endereço Indireto
Células de memória apontadas por um campo do endereço que contém o endereço (ponteiro) do operando EA = (A) • Olhe em A, encontre o endereço(A) e procure lá pelo operando e.x. ADD (A) • Soma o conteúdo da célula apontada ao conteúdo de A ao acumulador
Endereço Indireto
Cod.Op
Instrução Endereço A Memória Ponteiro para operando Operando
Endereçamento a registrador
Operando émantido num registrador definido no campo de endereço EA = R Número limitado de registradores Campo de endereços necessário é pequeno • Instruções menores (tamanho menor) • Busca da instrução mais rápida Nenhum acessoà memória Execução muito rápida Espaço de endereçamento limitado
Endereçamento a registrador
Cod.Op
Instrução Endereço do Registrador R Banco de Registradores Operando
Endereçamento Indireto a Registrador
Endereçamento indireto EA = (R) O operando está na memória apontado pelo conteúdo de um registrador R Maior espaço de endereçamento (2 n ) Um acesso a menos na memória do que o modo de endereçamento indireto (puro)
Endereçamento Indireto a Registrador
Instrução Cod.Op
Registrador de Endereços R Memória Banco de Registradores Ponteiro para operando Operando
Endereçamento a Deslocamento
EA = A + (R) Campo de endereços armazena dois valores • • A = valor base R = registrador que armazena o deslocamento • ou vice versa
Endereçamento a Deslocamento
Cod.Op
Instrução Registrador R Endereço A Memória Banco de Registradores Ponteiro para Operando + Operando
Endereçamento Relativo
Uma versão de endereçamento a deslocamento R = contador de instruções (PC) EA = A + (PC) i.e. pega o operando da célula A da posição corrente apontada pelo PC Vantagens: princípio da localidade e uso do cache
Endereçamento base-registrador
A armazena o deslocamento R armazena um ponteiro para o endereço base R pode ser explícito ou implícito e.x. registradores de segmento do 80x86
Endereçamento Indexado
A = base R = deslocamento EA = A + R Bom para fazer acessos a arrays • • EA = A + R R++
Endereçamento à pilha
Operando está implicitamente no topo de uma pilha
Comparativo
Tamanho da instrução (cap. 10)
Afetado por e afeta: • Tamanho da memória • • • • Organização da memória Estrutura do barramento Complexidade da CPU Velocidade da CPU Compromisso entre um repertório variado de instruções e a economia de espaço • Memórias são baratas
Alocação de bits
Número de modos de endereçamento Número de operandos Registradores versus memória Número de conjuntos de registradores Faixa de endereçamento Granularidade do endereçamento
Novos conjuntos de intruções
MMX SSE e SSE2 3DNOW!
Características • Multimídia • • Operações sobre múltiplos dados (vetorial) Registradores maiores (SSE)
Linguagem de Montagem
CPU: linguagem de máquina Simplificar a escrita de programas
Ordenação de Bytes
Little endian: • escreve dados com a seguinte ordenação: [lo-bytes] [hi-bytes] Big endian: • escreve dados com a seguinte ordenação: [hi-bytes] [lo-bytes]
Exemplo
Endereço de memória: byte Palavra: 16 bits (2 bytes) Uma palavra: 0010 0110 1001 1010 será armazenada da seguinte forma: - Little endian: 1600: 0010 0110 1599: 1001 1010 - Big endian 1600: 1001 1010 1599: 0010 0110
Exemplos
Pentium (80x86), VAX: little-endian IBM 370, Motorola 680x0 (Mac), e a maioria dos RISC: big-endian
Atividade Prática: Neander
Arquitetura
Largura de dados e endereços de 8 bits Dados representados em complemento de dois 1 acumulador de 8 bits (AC) 1 apontador de programa de 8 bits (PC) 1 registrador de estado com 2 códigos de condição: negativo (N) e zero (Z)
Instruções
Código Instrução Comentário 0000 NOP nenhuma operação 0001 STA end armazena acumulador - (store) 0010 0011 0100 0101 0110 1000 LDA end ADD end OR end AND end NOT JMP end carrega acumulador - (load) soma “ou” lógico “e” lógico inverte (complementa) acumulador desvio incondicional - (jump) 1001 1010 1111 JN end JZ end HLT desvio condicional - (jump on negative) desvio condicional - (jump on zero) término de execução - (halt)
Programando...
Soma de dois valores As variáveis e o resultado estão dispostos segundo o mapa de memória abaixo: • posição: 128: variável A • • posição: 129: variável B posição: 130: resultado R
Resolução – R=A+B
2 3 4 5 6 Endereço 0 1 Instr.
LDA 128 ADD 129 STA 130 HLT Significado AC recebe 1.o valor Soma 2.o valor ao acumulador Armazena o valor na posição 130 Finaliza o programa 128 129 130 12 4 A B R
Exercícios
1.
2.
3.
Desenvolva um programa que some dois números e teste se o resultado é negativo Desenvolva um programa que some dois números (nas posições 128 e 129), armazene o resultado em (130) e armazene o valor 1 em (131) se não houver overflow, 255 caso contrário Desenvolva um programa para ordenar 3 números armazenados inicialmente nas posições 128, 129 e 130 Entregar: • Fluxograma de execução • Código (.mem)