Ac16 conjunto de instruções v2

7,061 views

Published on

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

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

No Downloads
Views
Total views
7,061
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
264
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Ac16 conjunto de instruções v2

  1. 1. Arquitetura deComputadores –Conjunto deInstruçõesProf.ª Ms. Elaine Cecília GattoDisciplina: Arquitetura de ComputadoresCurso: Engenharia de ComputaçãoSemestre/Ano: 1/2012 1
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 60. Assembly CÓDIGO Programa original em linguagem de montagem FONTE MONTAGEM MONTADOR 60 CÓDIGO Programa resultante, em linguagem binária OBJETO
  61. 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. 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

×