Ac16 conjunto de instruções v2

62
Arquitetura de Computadores – Conjunto de Instruções Prof.ª Ms. Elaine Cecília Gatto Disciplina: Arquitetura de Computadores Curso: Engenharia de Computação Semestre/Ano: 1/2012 1

description

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

Transcript of Ac16 conjunto de instruções v2

Page 1: Ac16   conjunto de instruções v2

Arquitetura de Computadores – Conjunto de Instruções Prof.ª Ms. Elaine Cecília Gatto

Disciplina: Arquitetura de Computadores

Curso: Engenharia de Computação

Semestre/Ano: 1/2012 1

Page 2: Ac16   conjunto de instruções v2

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?

• Como cada operação será realizada?

2

Page 3: Ac16   conjunto de instruções v2

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 diversas linguagens.

3

Page 4: Ac16   conjunto de instruções v2

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

Page 5: Ac16   conjunto de instruções v2

Operações Primitivas Mais Comuns • 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;

• Substituição do operando por seu valor absoluto.

5

Page 6: Ac16   conjunto de instruções v2

Projeto do conjunto de instruçõ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

Page 7: Ac16   conjunto de instruções v2

Projeto do conjunto de instruçõ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

Page 8: Ac16   conjunto de instruções v2

Projeto do conjunto de instruções • Exemplos:

8

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

C.Op. Op.1 Op.2

ADD R Op.2

Page 9: Ac16   conjunto de instruções v2

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

Page 10: Ac16   conjunto de instruções v2

OpCode • Essa poderia ser uma instrução de 32 bits, dividida como abaixo:

• 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 projetista:

• Tamanho fixo:

• Tamanho variável:

10

C.OP. Operando 1 Operando 2

ADD SALARIO TAXA

11010011 110010000011 110011001101

8 BITS 12 BITS 12 BITS

8 + 12 + 12 = 32 BITS

Page 11: Ac16   conjunto de instruções v2

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.

• Exemplos: Intel 8080 e 8085 – 8 bits de OpCode;

11

Page 12: Ac16   conjunto de instruções v2

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

Page 13: Ac16   conjunto de instruções v2

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 Unidade de Controle;

13

Page 14: Ac16   conjunto de instruções v2

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 desempenho do sistema como um todo;

14

Page 15: Ac16   conjunto de instruções v2

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

Page 16: Ac16   conjunto de instruções v2

Instruções com 4 operandos

• FORMATO:

• 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 desperdiça espaço em outros tipos de operações; (nem todas as operações precisam de quatro operandos!)

16

OpCode Op1 Op2 Op3 Endereço próxima instrução

Page 17: Ac16   conjunto de instruções v2

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á armazenada no PC – Contador de Programa/Programm Counter ou IP – Instruction Pointer/Ponteiro de Instrução.

17

Page 18: Ac16   conjunto de instruções v2

Instruções com 3 operandos

• FORMATO:

• 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 binária;

18

OpCode Op1 Op2 Op3

Page 19: Ac16   conjunto de instruções v2

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?

19

X = A * ( B + C * D – E / F ) X = A * ( B + T1 – E / F ) X = A * ( B + T1 – E / F ) X = A * ( B + T1 – T2 ) X = A * ( B + T1 – T2 )

X = A * ( T3 – T2 ) X = A * ( T3 – T2 ) X = A * ( T4 ) X = A * ( T4 ) X = X

Page 20: Ac16   conjunto de instruções v2

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

Page 21: Ac16   conjunto de instruções v2

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 * D

DIV E, F, T2 ;T2 = E / F

ADD B, T1, X ;X = B + T1

SUB X, T2, X ;X = X – T2

MPY A, X, X ;X = A * X

• Observe que ficou diferente da forma que foi resolvida manualmente, entretanto, as prioridades de execução aritméticas, foram consideradas. Apenas a forma de armazenameto temporário é empregada diferente.

21

Variáveis: endereços simbólicos de memória. A, B, C, D, E, F, T1, T2, X são variáveis.

Page 22: Ac16   conjunto de instruções v2

Instruções com 2 operandos

• FORMATO:

• 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

ADD A, B ;A = A + B 22

OpCode Op1 Op2

OpCode Destino Origem

Page 23: Ac16   conjunto de instruções v2

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 não é aconselhável. 23

Page 24: Ac16   conjunto de instruções v2

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

Page 25: Ac16   conjunto de instruções v2

Instruções com 1 operando

• FORMATO:

• 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

OpCode Op1

Page 26: Ac16   conjunto de instruções v2

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

Page 27: Ac16   conjunto de instruções v2

Instruções com 1 operando

LDA C ;ACC = C

MPY D ;ACC = ACC * D

STA X ;X = ACC

LDA E ;ACC = E

DIV F ;ACC = ACC / F

STA T1 ;T1 = ACC

LDA B ;ACC = B

ADD X ;ACC = ACC + X

SUB T1 ;ACC = ACC – T1

MPY A ;ACC = ACC * A

STA A ;A = ACC 27

Page 28: Ac16   conjunto de instruções v2

Comparativo

Tamanho

OpCode 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 operando

OpCode Operando1 Operando2

8 bits 20 bits 20 bits 48 bits

4 acessos a memoria = 1 para buscar a instrução mais 3 para cada operando

OpCode Operando1

8 bits 20 bits 28 bits

2 acessos a memoria = 1 para buscar a instrução mais 1 para cada operando 28

Page 29: Ac16   conjunto de instruções v2

Comparativo

29

3 operandos 2 operandos sem salvamento

2 operandos com salvamento

1 operando

5 linhas de programa

6 linhas de programa

7 linhas de programa

11 linhas de programa

2 instruções de multiplicação

2 instruções de multiplicação

2 instruções de multiplicação

2 instruções de multiplicação

1 instrução de divisão

1 instrução de divisão

1 instrução de divisão

1 instrução de divisão

1 instrução de adição

1 instrução de adição

1 instrução de adição

1 instrução de adição

1 instrução de subtração

1 instrução de subtração

1 instrução de subtração

1 instrução de subtração

340 bits (5*68 bits)

288 bits (6*48 bits)

336 bits (7*48 bits)

308 bits (11*28 bits)

20 acessos (4*5)

24 acessos (4*6)

28 acessos (4*7)

22 acessos (2*11)

Page 30: Ac16   conjunto de instruções v2

Instruções com zero operandos • 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

Page 31: Ac16   conjunto de instruções v2

Instruções com zero operandos • 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

;Armazena o resultado em um novo topo

31

Page 32: Ac16   conjunto de instruções v2

Instruções com zero operandos

PILHA

32

POSIÇÃO

0

1

2

3

4

5

6

7

8

POP Se o dado está na posição 6, então ele é o topo da pilha. Assim, se ele for removido, o dado abaixo dele se torna o topo da pilha. SP = SP + 1 SP = 6 + 1 = 7

Page 33: Ac16   conjunto de instruções v2

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

Page 34: Ac16   conjunto de instruções v2

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

Page 35: Ac16   conjunto de instruções v2

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, Op

MOV AL, 22H ;Copia o valor hexadecimal 22 para o registrador AL – 1 byte de tamanho;

MOV EBX, 33445566H ;Copia o valor hexadecimal 33445566 para o registrador EBX – 32 bits;

35

Page 36: Ac16   conjunto de instruções v2

Modo Imediato

• 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

OpCode Operando

1 0 1 0 H 0 0 1 1 0 1 0 1 H

A 35

4 bits 8 bits

Page 37: Ac16   conjunto de instruções v2

Modo Imediato

• 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

OpCode R Operando

0 1 0 1 H 0 0 1 1 H 0 0 0 0 0 1 1 1 H

5 3 07

4 bits 4 bits 8 bits

Page 38: Ac16   conjunto de instruções v2

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

Page 39: Ac16   conjunto de instruções v2

Modo Direto

• 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 é:

• 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1

• 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;

• O valor armazenado em C1 é 8B;

39

OpCode Operando

1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1

F7 0 0 0 0 C 1

8 bits 24 bits

MEMÓRIA

8B C1

Page 40: Ac16   conjunto de instruções v2

Modo Direto

• 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;

• Então, R = 05A;

40

OpCode Operando

0 1 1 1 0 0 1 1 1 0 1 0

7 3B

4 bits 8 bits

MEMÓRIA

05A 3B

Page 41: Ac16   conjunto de instruções v2

Modo Direto

• 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;

• A instrução tem 20 bits;

• 5A: 000001011010

• 103: 000100000011

41

OpCode Operando1 Operando2

B 5C 3B

0 1 1 1 0 1 0 1 1 1 0 0 0 0 1 1 1 0 1 1

4 bits 8 bits 8 bits

MEMÓRIA

05A

103

3B

5C

MEMÓRIA

05A

15D

Antes Depois

Page 42: Ac16   conjunto de instruções v2

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

Page 43: Ac16   conjunto de instruções v2

Modo Indireto

• 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;

43

OpCode Operando

0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1

53 0000C1

8 bits 24 bits

MEMÓRIA

8B

42

C1

8B

Page 44: Ac16   conjunto de instruções v2

Modo Indireto

• LDA OP ;O registrador R recebe o operando

44

OpCode Operando

0 1 0 0 0 1 1 1 0 1 0 0

4 74

4 bits 8 bits

MEMÓRIA

05D

14A

74

5D

Page 45: Ac16   conjunto de instruções v2

Identificação do Modo de Enderaçamento

45

1. 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;

Page 46: Ac16   conjunto de instruções v2

46

• 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;

Comparação entre os Modos de Enderaçamento Direto, Indireto e Imediato

Page 47: Ac16   conjunto de instruções v2

Comparação entre os Modos de Enderaçamento Direto, Indireto e Imediato

47

MODO OPERANDO VANTAGENS DESVAN TAGENS

Imediato Contém o dado Execução rápida Indadequado para uso com variáveis

Direto Contém o endereço

Flexibilidade no acesso a variáveis

Desperdício de tempo se o dado é

um valor fixo

Indireto Contém o

endereço do endereço

Manuseio de vetores e usado como ponteiro

Muitos acessos à memória principal

Page 48: Ac16   conjunto de instruções v2

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

READ a,b

x = a + b

End;

48

O código lê dois valores e soma-os cem vezes.

Do = faça To = para Read = ler End = fim

i, x, a e b = variáveis

Page 49: Ac16   conjunto de instruções v2

Por Registrador

GET L ;L = 100 (L de Loop)

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)

JMP In ;vá para In

Fim HLT ;pare

49

14 linhas de código 200 ciclos de memória: 100 para leitura 100 para escrita

LD = load (carregamento) DCR = decremento SUB = subtração

Page 50: Ac16   conjunto de instruções v2

Por Registrador

Escrever o mesmo programa no modo de endereçamento por registrador:

MOV R6, 64 ;R6 = 100

In 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

Fim HLT ;pare 50 10 linhas de código

Page 51: Ac16   conjunto de instruções v2

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 se tornar desvantagens;

51

Page 52: Ac16   conjunto de instruções v2

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

• ADD registrador, registrador, registrador

52

Page 53: Ac16   conjunto de instruções v2

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

Page 54: Ac16   conjunto de instruções v2

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

Page 55: Ac16   conjunto de instruções v2

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

Page 56: Ac16   conjunto de instruções v2

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

Page 57: Ac16   conjunto de instruções v2

Assembly

• Programa em lingaugem de montagem:

• PROG SOMA

• LDA A

• ADD B

• SUB C

• STR X

• FORMATO DE UMA INSTRUÇÃO EM ASSEMBLY

57

rótulo sigla operandos ;Comentários

label mneumonic operands ;comment

Page 58: Ac16   conjunto de instruções v2

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 máquina;

58

Page 59: Ac16   conjunto de instruções v2

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 especialistas na área;

59

Page 60: Ac16   conjunto de instruções v2

Assembly

60

CÓDIGO FONTE

MONTAGEM

CÓDIGO OBJETO

MONTADOR

Programa resultante, em linguagem binária

Programa original em linguagem de montagem

Page 61: Ac16   conjunto de instruções v2

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

Page 62: Ac16   conjunto de instruções v2

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