Upload
internet
View
105
Download
1
Embed Size (px)
Citation preview
Organização e Arquitetura de Computadores
Capítulos 9 e 10Conjunto 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• Decimais (BCD: binary coded decimal)
4 bits para cada dígito decimal
Caracteres• ASCII • EBCDIC
Lógicos• Bits or flags
Cap. 8
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
Endereço ACod.Op
Instrução
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
Endereço ACod.Op
Instrução
Memória
Operando
Ponteiro para 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
Endereço do Registrador RCod.Op
InstruçãoBanco deRegistradores
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
Registrador de Endereços RCod.Op
Instrução
Memória
OperandoPonteiro para operando
Banco de Registradores
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
Registrador RCod.Op
Instrução
Memória
OperandoPonteiro para Operando
Banco de Registradores
Endereço A
+
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 1010será armazenada da seguinte forma:
- Little endian:1600: 0010 01101599: 1001 1010- Big endian1600: 1001 10101599: 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 LDA end carrega acumulador - (load) 0011 ADD end soma 0100 OR end “ou” lógico 0101 AND end “e” lógico 0110 NOT inverte (complementa) acumulador 1000 JMP end desvio incondicional - (jump) 1001 JN end desvio condicional - (jump on negative) 1010 JZ end desvio condicional - (jump on zero) 1111 HLT 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 Instr. Significado0 LDA AC recebe 1.o valor1 1282 ADD Soma 2.o valor ao acumulador3 1294 STA Armazena o valor na posição
1305 1306 HLT Finaliza o programa
128 12 A129 4 B130 R
Exercícios
1. Desenvolva um programa que some dois números e teste se o resultado é negativo
2. 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
3. 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)