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 Cap. 8 • Ponto Flutuante • 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 Instrução Cod.Op 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 Instrução Cod.Op 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 Instrução Cod.Op 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 (2n) 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 Instrução Cod.Op 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 0000 0001 0010 0011 0100 0101 0110 1000 1001 1010 1111 Instrução NOP STA end LDA end ADD end OR end AND end NOT JMP end JN end JZ end HLT Comentário nenhuma operação armazena acumulador - (store) carrega acumulador - (load) soma “ou” lógico “e” lógico inverte (complementa) acumulador desvio incondicional - (jump) 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 Endereço 0 1 2 3 4 5 6 Instr. LDA 128 ADD 129 STA 130 HLT Significado AC recebe 1.o valor 128 129 130 12 4 A B R Soma 2.o valor ao acumulador Armazena o valor na posição 130 Finaliza o programa 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)