Your SlideShare is downloading. ×
0
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Ac16   conjunto de instruções v2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ac16 conjunto de instruções v2

5,355

Published on

Disciplina Arquitetura de Computadores. Curso Engenharia de Computação.

Disciplina Arquitetura de Computadores. Curso Engenharia de Computação.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,355
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
191
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Arquitetura deComputadores –Conjunto deInstruçõesProf.ª Ms. Elaine Cecília GattoDisciplina: Arquitetura de ComputadoresCurso: Engenharia de ComputaçãoSemestre/Ano: 1/2012 1
  • 2. Introdução• O hardware funciona através de ordens simples e básicas;• O hardware não é capaz de manipular diretamente ordens mais complexas;• Instrução de máquina: ordens que são transmitidas ao hardware para serem interpretadas e executadas por um conjunto de bits. Especifica para o hardware que determinada operação deve ser realizada.• Set Instruction ou Conjunto de Instruções: grupo de instruções de máquina. Define o que um processador é capaz de realizar, permitindo ao programador do compilador escrever o código de acordo. • Quais operações o processador poderá realizar? 2 • Como cada operação será realizada?
  • 3. Introdução• ISA: instruction set architecture ou arquitetura do conjunto de instruções. É a interface entre o hardware e o software (e os compiladores),• Computadores de uso geral: possui um conjunto básico de instruções primitivas. Um programador pode combinar essas instruções de diferentes modos, obtendo diferentes resultados;• O computador, como conhecemos hoje, é capaz de executar diversos tipos diferentes de programas. Exemplo: Notepad e AutoCAD;• A “inteligência” e a versatilidade do sistema computacional estão na combinação das instruções primitivas visto que o hardware é imutável.• Computadores devem ser capazes de executar programas em 3 diversas linguagens.
  • 4. Introdução• Quando uma máquina nova é desenvolvida, surgem as seguintes perguntas: • A nova máquina é compatível com a antecessora? • A nova máquina pode executar meu sistema operacional? • A nova máquina executará todos os meus programas de aplicação existentes sem modificação?• Ninguém quer jogar fora seus programas antigos e começar do zero novamente!• Isto faz parte do projeto do ISA.• DESAFIO: construir máquinas melhores sujeitas às limitações da compatibilidade. 4
  • 5. Operações Primitivas MaisComuns• Transferencia de uma palavra de dados de uma célula para outra;• Somar dois operandos, guardando o resultado em um deles ou em um terceiro operando;• Desviar para outro endereço fora da sequencia;• Testar uma condição. Se o teste resultar em verdadeiro, desvia para outro endereço;• Realizar operação lógica AND entre dois valores;• Parar a execução de um programa;• Adicionar 1 a um valor de operando;• Transferencia de byte da porta de E/S para a MP e vice-versa; 5• Substituição do operando por seu valor absoluto.
  • 6. Projeto do conjunto deinstruções• Quais são os elemetos requeridos para a execução de uma operação?• Qual o formato binário da instrução de máquina?• Quais tipos de dados serão manipulados?• No projeto então é definido: • Quais operações o processador realizará; • Como as operações são identificadas; • Como as operações são executadas: necessário especificar a sequencia de microoperações que de fato realizarão a tarefa;• Formato básico de uma instrução: 6 Código de operção Campo do Operando ou Operandos
  • 7. Projeto do conjunto deinstruções• Código de Operação – C. Op.: indica ao processador o que fazer e como fazer – Operation Code ou OpCode. Este código é único para cada operação.• Operando – Op.: indica ao processador qual dado ou dados a operação se realizará, ou seja, o endereço do dado. Pode haver instruções com mais de um campo operando e este campo também pode indicar o próprio valor do dado.• Ambos os campos são formados por uma quantidade de bits;• Formato de instruções, largura dos campos e conteúdo variam de acordo com a arquitetura; 7
  • 8. Projeto do conjunto deinstruções• Exemplos: Instrução de 3 operandos com memória C.Op. Op.1 Op.2 Op.3 ADD Op.1 Op.2 Op.3 Instrução de 2 operandos com memória C.Op. Op.1 Op.2 MOV Op.1 Op.2 Instrução de 2 operandos com registrador 8 C.Op. Op.1 Op.2 ADD R Op.2
  • 9. OpCode• Indica qual é a operação a ser executada;• É o nome da instrução propriamente dita;• Sinaliza para a unidade de controle o procedimento a ser seguido para execuação da operação;• É a instrução em si;• Linguagem simbólica de máquina = linguagem assembly = representação dos bits da instrução;• Exemplo:• ADD SALARIO, TAXA = 11010011110010000011110011001101• A operação ADD (soma/adição) acima tem dois operandos (salario e taxa); 9
  • 10. OpCode• Essa poderia ser uma instrução de 32 bits, dividida como abaixo: C.OP. Operando 1 Operando 2 ADD SALARIO TAXA 11010011 110010000011 110011001101 8 BITS 12 BITS 12 BITS 8 + 12 + 12 = 32 BITS• A quantidade de bits por campo é definida pelo projetista.• A quantidade no C.OP. define o limite máximo de instruções que o processador poderá executar: • Se OpCode com 7 bits, então, 27 = 128 instruções; • Se OpCode com 8 bits, então, 28 = 256 instruções;• A quantidade de bits no OpCode pode ser definido de duas formas pelo 10 projetista: • Tamanho fixo: • Tamanho variável:
  • 11. OpCode• Tamanho fixo: • Quantidade definida de bits; • Típico de arquiteturas RISC; • Se sabe, exatamente, quantas instruções o processador pode executar; • Mais simples de implementar e manipular durante a execução; • Conforme a tecnologia avança, são necessárias mais instruções e o tamanho de OpCode cresce com isso, pois precisa acomodar todos os códigos necessários, o que afeta diretamente a memória principal (mais endereçamento é necessário); • A memória principal é um dos componentesmais caros de um computador, o ideal é que seu espaço não seja desperdiçado mas sim usado com eficiência. 11 • Exemplos: Intel 8080 e 8085 – 8 bits de OpCode;
  • 12. OpCode• Tamanho variável: • Quantidade indefinida de bits, podendo variar conforme a operação a ser realizada; • Típico de arquiteturas CISC; • Codifica uma quantidade maior de instruções com menor quantidade de bits; • Permite campos de operandos com tamanhos diferentes; • Mais instruções com quantidades diferentes de operandos; • Permite aumentar o tamanho total da instrução, o que também acarreta problemas com a memória principal; • Exemplos: Intel 8086, 8088 e 80286 – 1 byte de OpCode; Intel 386, 486 e Pentium – varia entre 1 e 2 bytes de OpCode; 12
  • 13. OpCode• Como isso afeta o Decodificador de instruções na Unidade de Controle? • Se OpCode igual a 7 bits, então 27 = 128 instruções.• No Decodificador isto implica em: • 7 entradas; • 128 saídas possíveis saídas para a Unidade de Controle;• Isto é: • Em Unidades de controle implementadas por software: • 128 possíveis locais na memória de controle; • Em Unidades de controle implementadas em hardware: • 128 sequencias de execução;• Resumindo: a quantidade de bits no OpCode também afeta a quantidade de saídas possíveis no Decodificador de Instruções da 13 Unidade de Controle;
  • 14. OpCode• A decisão sobre a quantidade de bits a ser adotada no OpCode afeta o projeto como um todo.• Se o projeto tem muitas instruções: • Maior flexibilidade; • Compilação mais rápida; • Instruções de máquina mais complexas são mais completas, o que acarreta um código de programa compilado mais simples de ser traduzido de uma linguagem de alto nível para baixo nível; • Hardware do processador é mais complexo, portanto, aumenta o custo de fabricação, visto que mais circuitos integrados serão necessários; • O decodificador de instruções também sérá mais complexo e levará mais tempo para decodificar as instruções, o que afeta o 14 desempenho do sistema como um todo;
  • 15. Operando• É o dado que se deseja manipular;• Pode estar armazenado em uma posição da memória ou registrador ou ainda explicito no campo;• O endereço do local onde está armazenado o dado se encontra neste campo;• Modo de endereçamento: é a diversidade de apresentação do dado na instrução – formas diferentes do dado aparecer na instrução;• Dois aspectos importantes sobre os operandos: • Quantidade de operandos; • Modo de endereçamento; 15
  • 16. Instruções com 4 operandos• FORMATO: OpCode Op1 Op2 Op3 Endereço próxima instrução• Tamanho do OpCode: 6 bits;• Tamanho dos Operandos: 11 bits cada;• Tamanho total da instrução: 50 bits (6 + (11*4));• Exemplo de instrução: ADD X, Y, Z, P que é: • Z = X + Y; • Soma-se X com Y e o resultado é armazenado em Z; • P contém o endereço da próxima instrução;• Vantagem: Esse formato de instrução é completa pois possui todos os operandos necessários de uma operação aritmética;• Desvantagem: precisa de mais espaço na memória principal e 16 desperdiça espaço em outros tipos de operações; (nem todas as operações precisam de quatro operandos!)
  • 17. Instruções com 4 operandos• Instruções de desvio: apenas um campo operando. Em uma instrução com 4 operandos, apenas 11 dos 44 bits seriam usados. Isso significa desperdiçar espaço de memória.• Instruções de carga: apenas dois campos operando. Em uma instrução com 4 operandos, apenas 22 dos 44 bits seriam usados. Isso significa desperdiçar espaço de memória.• Dois fatores delicados no projeto de hardware computacional: • Economia do espaço da memória principal e, consequentemente, seu custo; • Conjunto completo e poderoso de instruções;• Atualmente nenhuma máquina utiliza instruções com 4 operandos. A próxima instrução a ser executada sempre estará 17 armazenada no PC – Contador de Programa/Programm Counter ou IP – Instruction Pointer/Ponteiro de Instrução.
  • 18. Instruções com 3 operandos• FORMATO: OpCode Op1 Op2 Op3• Operando 1 e 2: contém o endereço de onde está armazenado o dado;• Operando 3: contém o endereço de onde será armazenado o resultado da operação entre os operandos 1 e 2;• Exemplos de instruções em Assembly: • ADD A, B, X ;X = A + B • SUB A, B, X ;X = A – B • MPY A, B, X ;x = A * B • DIV A, B, X ;X = A / B• Obs.: Instrução Assembly é uma instrução de máquina representada de forma símbólica em vez de sua representação 18 binária;
  • 19. Instruções com 3 operandos• Como você resolveria a expressão algébrica abaixo? X=A*(B+C*D–E/F)• Qual das operações aritméticas você resolveria primeiro?• Existem leis e prioridades, na matemática, que você deve considerar no momento de resolver a expressão?• Você consegue imaginar um algoritmo que possa resolvê-la?• Como seria, então, a resolução, passo a passo? X=A*(B+C*D–E/F) X = A * ( T3 – T2 ) X = A * ( B + T1 – E / F ) X = A * ( T3 – T2 ) X = A * ( B + T1 – E / F ) X = A * ( T4 ) X = A * ( B + T1 – T2 ) X = A * ( T4 ) 19 X = A * ( B + T1 – T2 ) X=X
  • 20. Instruções com 3 operandos• Algoritmo Passo a Passo: • Resolver os parenteses; • Resolver a multiplicação, C*D, e armazenar o resultado temporariamente em outra variável; • Resolver a divisão, E/F, e armazenar o resultado temporariamente em outra variável; • Resolver a soma, B + resultado de C* D, e armazenar o resultado temporariamente em outra variável; • Resolver a subtração; • Resolver a multiplicação; • Armazenar o resultado de tudo isso em X; 20
  • 21. Instruções com 3 operandos• Suponha que esta expressão algébrica faça parte de um programa C que é traduzido para linguagem de máquina para que possa ser executado. Dessa forma, como fica a referida expressão em linguagem de máquina?MPY C, D, T1 ;T1 = C * DDIV E, F, T2 ;T2 = E / F Variáveis: endereços simbólicosADD B, T1, X ;X = B + T1 de memória. A, B, C, D, E, F, T1,SUB X, T2, X ;X = X – T2 T2, X são variáveis.MPY A, X, X ;X = A * X• Observe que ficou diferente da forma que foi resolvida manualmente, entretanto, as prioridades de execução 21 aritméticas, foram consideradas. Apenas a forma de armazenameto temporário é empregada diferente.
  • 22. Instruções com 2 operandos OpCode Op1 Op2• FORMATO: OpCode Destino Origem• ADD A, B ;A = A + B;• As instruções ficariam como a seguir: • ADD Op1, Op2 ;Op1 = Op1 + Op2 • SUB Op1, Op2 ;Op1 = Op1 - Op2 • DIV Op1, Op2 ;Op1 = Op1 / Op2 • MPY Op1, Op2 ;Op1 = Op1 * Op2• Op1 tem um conteúdo que está armazenado em um endereço de memória. Para que esse conteúdo não seja perdido, ao se salvar o novo valor resultante da operação, pode-se movê-lo para outro endereço usando a instrução MOVE. Exemplo: MOVE C, A ;C = A 22 ADD A, B ;A = A + B
  • 23. Instruções com 2 operandos• X = A * ( B + C * D – E / F ): MPY C, D ;C = C * D DIV E, F ;E = E / F ADD B, C ;B = B + C SUB B, E ;B = B - E MPY A, B ;A = A * B MOVE X, A ;X = A• Nesta versão as variáveis perdem o seu conteúdo, o que 23 não é aconselhável.
  • 24. Instruções com 2 operandos• Uma versão melhor, para o mesmo programa, evitando as perdas, é mostrado abaixo: MOVE X, C ;X = C MPY X, D ;X = X * D MOVE T1, E ;T1 = E DIV T1, E ;T1 = T1 / E ADD X, B ;X = X + B SUB X, T1 ;X= X – T1 MPY X, A ;X = X * A 24
  • 25. Instruções com 1 operando• FORMATO: OpCode Op1• Um registrador específico é utilizado com esse tipo de instrução: ACC – acumulador;• Ele é um operando implícito;• Armazena o valor de um dos dados;• Armazena o resultado da operação;• Instruções: ADD Op ; ACC = ACC + Op SUB Op ; ACC = ACC - Op MPY Op ; ACC = ACC * Op DIV Op ; ACC = ACC / Op 25
  • 26. Instruções com 1 operando• Duas instruções fazem a transferencia de dados entre a memória principal e o registrador ACC:• LDA Op ;ACC = Op• STA Op ;Op = ACC• Como ficaria então a expressão algébrica X = A * ( B + C * D – E / F ) com instruções de 1 operando? 26
  • 27. Instruções com 1 operandoLDA C ;ACC = CMPY D ;ACC = ACC * DSTA X ;X = ACCLDA E ;ACC = EDIV F ;ACC = ACC / FSTA T1 ;T1 = ACCLDA B ;ACC = BADD X ;ACC = ACC + XSUB T1 ;ACC = ACC – T1MPY A ;ACC = ACC * ASTA A ;A = ACC 27
  • 28. Comparativo TamanhoOpCode Operando1 Operando2 Operando3 8 bits 20 bits 20 bits 20 bits 68 bits 4 acessos a memoria = 1 para buscar a instrução mais 3 para cada operandoOpCode Operando1 Operando2 8 bits 20 bits 20 bits 48 bits 4 acessos a memoria = 1 para buscar a instrução mais 3 para cada operandoOpCode Operando1 8 bits 20 bits 28 bits 2 acessos a memoria = 1 para buscar a instrução mais 1 para cada operando 28
  • 29. Comparativo 2 operandos sem 2 operandos com3 operandos 1 operando salvamento salvamento5 linhas de 6 linhas de 7 linhas de 11 linhas deprograma programa programa programa2 instruções de 2 instruções de 2 instruções de 2 instruções demultiplicação multiplicação multiplicação multiplicação1 instrução de 1 instrução de 1 instrução de 1 instrução dedivisão divisão divisão divisão1 instrução de 1 instrução de 1 instrução de 1 instrução deadição adição adição adição1 instrução de 1 instrução de 1 instrução de 1 instrução desubtração subtração subtração subtração340 bits 288 bits 336 bits 308 bits(5*68 bits) (6*48 bits) (7*48 bits) (11*28 bits) 2920 acessos 24 acessos 28 acessos 22 acessos(4*5) (4*6) (4*7) (2*11)
  • 30. Instruções com zerooperandos• Não possui operandos;• Utiliza PILHA, um tipo de estrutura de dados para armazenamento;• PILHA: “último a entrar, primeiro a sair”, neste caso, “último a chegar, primeiro a ser manipulado”;• Pode ser organizada com registradores ou em uma parte da memória;• Requer um registrador específico: PS – STACK POINTER ou PONTEIRO DE PILHA: contém o endereço de acesso ao topo da pilha; 30
  • 31. Instruções com zerooperandos• Tipos de instruções que manipulam pilhas:• Instruções de acesso: • PUSH: armazena o dado no topo da pilha – empilha – decrementando o ponteiro de pilha (SP = SP – 1); • POP: remove o dado do topo da pilha – desempilha – incrementa o ponteiro da pilha (SP = SP + 1);• Instruções aritméticas: ADD, SUB, MPY, DIV, etc.;• Exemplo de instrução com zero operando:• ADD ;soma os dois valores no topo da pilha ;Remove os dois valores ;Desempilha 31 ;Armazena o resultado em um novo topo
  • 32. Instruções com zerooperandos POP PILHA POSIÇÃO Se o dado está na 0 posição 6, então ele é o 1 topo da pilha. Assim, se ele for removido, o 2 dado abaixo dele se 3 torna o topo da pilha. 4 SP = SP + 1 5 6 SP = 6 + 1 = 7 7 8 32
  • 33. Modos de Endereçamento• Resumo sobre o formato básico das instruções de máquina:• O contador de programa sempre tem o endereço da próxima instrução que será executada;• Todo ciclo de instrução começa com a transferência da instrução para o registrador de instrução;• Toda instrução tem um código de operação;• Os local dos dados podem estar implicitamente ou explicitamente indicados na instrução, podendo ter zero ou mais campos operandos;• Há mais de um modo de localizar um dado da instrução na memória principal; 33
  • 34. Modo Imediato• Método simples e rápido;• Indica o valor do dado no próprio campo operando;• Não busca o dado do campo operando na memória;• Curto tempo de execução da instrução;• O dado é transferido da memória junto com a instrução;• Utilizado em:• Inicialização de contadores (valor fixo);• Operação com constantes (valor fixo) matemáticas;• Armazenamento de ponteiros;• Deslocamento de bits; 34
  • 35. Modo Imediato• Intel Pentium e AMD Athlon usam algumas instruções de modo imediato: desvio, movimentação, operações aritméticas com constantes, entre outras;• Exemplos: MOV R, OpMOV AL, 22H ;Copia o valor hexadecimal 22 para o registradorAL – 1 byte de tamanho;MOV EBX, 33445566H ;Copia o valor hexadecimal 33445566para o registrador EBX – 32 bits; 35
  • 36. Modo ImediatoOpCode Operando1010H 00110101HA 354 bits 8 bits• JMP OP ;contador de instrução recebe o operando• JMP = JUMP = SALTO• A instrução tem tamanho de 12 bits• A instrução em binário é 101000110101• A instrução em hexadecimal é A35• Portanto, a instrução JMP OP armazena o valor 35 no contador de instrução; 36
  • 37. Modo Imediato OpCode R Operando 0101H 0011H 00000111H 5 3 07 4 bits 4 bits 8 bits• MOV R, Op ;o registrador R recebe o valor do Operando• A instrução tem tamanho de 16 bits• A instrução em binário é 0101001100000111• A instrução em hexadecimal é 5307• Portanto, a instrução MOV R, OP armazena o valor 07 no registrador 3; 37
  • 38. Modo Direto• O campo operando indica o endereço de memória onde está o dado;• Requer apenas uma referência à memória principal para buscar o dado;• O dado deve ser transferido do dispositivo de entrada para a memória principal;• Variável de programa: quando um dado varia de valor a cada execução do programa. Representa simbolicamente o endereço do dado;• EXEMPLO 38
  • 39. MEMÓRIAModo Direto C1 8BOpCode Operando11110111 000000000000000011000001F7 0000C18 bits 24 bits• LDD OP ;o registrador R0 recebe o operando• A instrução diz: Armazene no registrador R0 o valor cujo endereço de memória é o C1;• A instrução tem 32 bits;• A instrução em binário é:• 11110111000000000000000011000001• A instrução em hexadecimal é: F 7 0 0 0 0 C 1• C 1 é o endereço da memória onde o dado está armazenado; 39• O valor armazenado em C1 é 8B;
  • 40. Modo Direto MEMÓRIA OpCode Operando 0111 00 111010 3B 05A 7 3B 4 bits 8 bits• LDA OP ;O registrador R recebe o operando• Após a execução da instrução, uma cópia do valor armazenado na memória, no endereço indicado no campo operando, será armazenado no registrador R;• A instrução tem 12 bits;• A instrução em binário é: 0 1 1 1 0 0 1 1 1 0 1 0;• A instrução em hexadecimal é: 73B;• 3B contém o valor 05A; 40• Então, R = 05A;
  • 41. Modo Direto OpCode Operando1 Operando2 B 5C 3B 0111 01011100 00111011 4 bits 8 bits 8 bits• ADD OP1, OP2 ;Somar Op1 com Op2 armazenando o resultado em OP1• A instrução em binário é: 0 1 1 1 0 1 0 1 1 1 0 0 0 0 1 1 1 0 1 1;• A instrução em hexadecimal é: B5C3B; Antes Depois• A instrução tem 20 bits; MEMÓRIA MEMÓRIA• 5A: 000001011010• 103: 000100000011 3B 05A 05A 41 5C 103 15D
  • 42. Modo Indireto• O campo operando representa o endereço de uma célula de memória;• O conteúdo da célula de memória NÃO É um dado, mas sim OUTRO endereço de memória;• Usa mais ciclos de memória para buscar o dado;• PONTEIRO: é o endereço intermediário, indica ou aponta para a localização do dado; 42
  • 43. Modo IndiretoOpCode Operando01010011 00000000000000001100000153 0000C18 bits 24 bits • LDI OP ;O registrador R0 recebe o operando; • C1: contém o endereço da memória principal onde está armazenado, de fato, o valor a ser manipulado; MEMÓRIA C1 8B 43 8B 42
  • 44. Modo IndiretoOpCode Operando0100 011101004 744 bits 8 bits • LDA OP ;O registrador R recebe o operando MEMÓRIA 74 05D 44 5D 14A
  • 45. Identificação do Modo deEnderaçamento1. Cada código de operação estabelece: • Tipo da instrução; • Modo de endereçamento;2. A instrução tem um campo específico para indicar o modo de enderaçamento: OpCode + Modo + Operando; 45
  • 46. Comparação entre os Modos deEnderaçamento Direto,Indireto e Imediato • Modo indireto: não requer acesso à MP, velocidade de execução rápida; • Modo direto: requer apenas um acesso à MP, velocidade de execução média; • Modo indireto: requer dois acessos à MP, velocidade de execução lenta; 46
  • 47. Comparação entre os Modos de Enderaçamento Direto, Indireto e ImediatoMODO OPERANDO VANTAGENS DESVAN TAGENS Indadequado paraImediato Contém o dado Execução rápida uso com variáveis Desperdício de Contém o Flexibilidade no acesso a Direto tempo se o dado é endereço variáveis um valor fixo Contém o Manuseio de vetores e Muitos acessos à 47Indireto endereço do usado como ponteiro memória principal endereço
  • 48. Por Registrador• Usa-se registradores no lugar da memória principal;• Execução rápida pois o dado encontra-se no registrador;• Exemplo:• Escrever, em linguagem assembly, no modo de endereçamento direto, as instruções do seguinte trecho de programa em linguagem de médio nível: DO i=1 TO 100 O código lê dois valores e soma-os cem vezes. READ a,b Do = faça x=a+b To = para End; Read = ler 48 End = fim i, x, a e b = variáveis
  • 49. 14 linhas de códigoPor Registrador 200 ciclos de memória: 100 para leitura GET L ;L = 100 (L de Loop) 100 para escrita LDA L ;R0 = L SUBM 0 ;R0 = R0 – 0 (100 – 0)In STA i ;i = R0 (i=100) JZ Fim ;se R0 = 0 então vá para Fim GET a ;lê o valor do dado que está no endereço a GET b ;lê o valor do dado que está no endereço b LDA a ;R0 = a ADD b ;R0 = R0 + b STR x ;x = R0 LDA i ;R0 = i DCR ;R0 = R0 – 1 (i+1) LD = load (carregamento) 49 DCR = decremento JMP In ;vá para In SUB = subtraçãoFim HLT ;pare
  • 50. Por RegistradorEscrever o mesmo programa no modo de endereçamento porregistrador: MOV R6, 64 ;R6 = 100In DCR R6 ;R6 = R6 – 1 (decrementa cem vezes) JZ R6, Fim ;se R6 = 0 vá para o Fim GET a ;obtém o valor do dado que está no endereço a GET b ;obtém o valor do dado que está no endereço b MOV R8, a ;R8 = a ADD R8, b ;R8 = R8 + b MOV b, R8 ;x = R8 JMP In ;vá para In 10 linhas de código 50Fim HLT ;pare
  • 51. Por Registrador• Dois modos de endereçamento por registrador: • DIRETO: contém o dado a ser manipulado; • INDIRETO: contém o endereço de uma célula de memória onde o dado se encontra;• VANTAGENS: • Execução rápida • Economia de espaço • Só é vantajoso se o modo proporcionar redução de ciclos de memória; • As vantagens nem sempre são aplicáveis e por isso podem 51 se tornar desvantagens;
  • 52. Por Registrador• DESVANTAGEM: • Em arquiteturas CISC: • Dificuldade em definir quais dados serão armazenados no registrador e quais na memória principal: quem faz isso é o compilador e ocorre devido aos poucos registradores existentes e aos muitos dados que devem ser manipulados;• Exemplos: • ADD registrador, registrador • ADD registrador, memória 52 • ADD registrador, registrador, registrador
  • 53. Modo Indexado• Manipulação de endereços de acesso a elementos de tipos especiais de dados;• Os endereços são ponteiros para os elementos;• Exemplo: vetores e outras estruturas de dados;• Indexado: obtém-se o endereço do dado de um elemento por meio de seu índice;• Endereço = campo operando + valor contido no registrador de índice; 53
  • 54. Modo Indexado• Exemplos de instruções usadas no modo indexado:• MVI RX, OP ;RX = OP (mover)• LDA RX, OP ;ACC = OP + RX (carregar)• STA RX, OP ;OP + RX = ACC (armazenar)• ADD RX, OP ;ACC = ACC + (OP + RX) (somar)• JMP OP ;CI = OP• JZR RX, OP ;CI = OP SE RX = 0• DCR RX ;RX = RX – 1 (decrementar)• INC RX ;RX = RX + 1 (incrementar)• END ;pare 54
  • 55. Assembly• Linguagem de máquina:• programa executável direto pelo hardware;• Conjunto contínuo de sinais elétricos (0s e 1s);• Complexa e difícil;• Tela azul do windows: é uma imagem (dump) da memória do sistema em um dado instante. A imagem é uma sequencia de algarismos hexadecimais com seu respectivo endereço e o conteúdo de alguns registradores;• Uma linha de código em hexadecimal produz várias linhas código em linguagem de máquina; 55
  • 56. Assembly• Assembly é uma linguagem de montagem ou linguagem de símbolos alfabéticos, em que os códigos hexadecimais são programados como símbolos, exemplo: ADD = 011;• PASCAL: X := A + B + C;• Programa em HEXADECIMAL: • 1234 • 324 • 425 • 226• Programa em linguagem de máquina: • 000100100011 • 001100100100 • 010000100101 • 001000100110 56
  • 57. Assembly• Programa em lingaugem de montagem: • PROG SOMA • LDA A • ADD B • SUB C • STR X • FORMATO DE UMA INSTRUÇÃO EM ASSEMBLY rótulo sigla operandos ;Comentários label mneumonic operands ;comment 57
  • 58. Assembly• Rótulo: campo opcional, indica um endereço significativo no programa, como, por exemplo, o início do programa;• Sigla: campo obrigatório, código da operação da instrução;• Operandos: símbolos representativos dos endereços de memória ou registradores;• Comentários: campo opcional, comentário sobre a instrução;• A linguagem Assembly não é diretamente executável em hardware;• Por este motivo, precisa de um programa tradutor, o MONTADOR, que traduz os símbolos para linguagem de 58 máquina;
  • 59. Assembly• O Montador é um programa desenvolvido para atender às particularidades de um processador específico, exatamente àquele em que será executado (dependente do hardware);• Um montador para o Pentium não funcionará para o PowerPC: o formato e o conjunto das instruções são diferentes, assim como o código gerado;• Utiliza de modo mais eficiente os recursos do hardware;• Na maioria das vezes, apenas o criador do montador sabe realmente como ela funciona e como os programas devem ser escritos em assembly;• Manutenção desses programas são caras por não haver 59 especialistas na área;
  • 60. Assembly CÓDIGO Programa original em linguagem de montagem FONTE MONTAGEM MONTADOR 60 CÓDIGO Programa resultante, em linguagem binária OBJETO
  • 61. Assembly• O que faz o montador? • Substitui códigos de operações simbólicos pelos valores binários das operações. Ex.: LOAD = 00101101 • Substitui endereços simbólicos pelos valores binários dos endereços. • Reseva espaço de memória para armazenar as instruções e dados; • Converte os valores constantes por valores binários; • Confere as palavras chaves reservadas; • Verifica erros no programa; 61
  • 62. Assembly• O montador sempre examina, instrução por instrução, verificando se elas estão escritas corretamente e se os campos estão definidos de acordo com a estrutura da linguagem de montagem;• Depois o montador cria uma tabela de símbolos de códigos de operação e uma tabela de símbolos de endereços;• Cada operação e cada endereço é uma entrada da tabela;• Métodos de busca em tabelas são implementados de forma que estas sejam feitas eficientemente, tornando extremamente rápido o processo de montagem; 62

×