O documento discute aspectos fundamentais do conjunto de instruções de uma arquitetura de computador, incluindo: 1) O hardware executa instruções simples enquanto instruções complexas são decompostas em instruções simples; 2) O conjunto de instruções define as operações de um processador e permite ao programador escrever código de acordo; 3) A arquitetura do conjunto de instruções é a interface entre hardware e software.
Como descobrir e classificar coisas usando machine learning sem compilcação
Conjunto de Instruções e Operações Primitivas
1. 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
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 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;
5
• Substituição do operando por seu valor absoluto.
6. 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
7. 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
8. Projeto do conjunto de
instruçõ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 * D
DIV E, F, T2 ;T2 = E / F Variáveis: endereços simbólicos
ADD 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 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
28. 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
29. Comparativo
2 operandos sem 2 operandos com
3 operandos 1 operando
salvamento salvamento
5 linhas de 6 linhas de 7 linhas de 11 linhas de
programa programa programa programa
2 instruções de 2 instruções de 2 instruções de 2 instruções de
multiplicação multiplicação multiplicação multiplicação
1 instrução de 1 instrução de 1 instrução de 1 instrução de
divisão divisão divisão divisão
1 instrução de 1 instrução de 1 instrução de 1 instrução de
adição adição adição adição
1 instrução de 1 instrução de 1 instrução de 1 instrução de
subtração subtração subtração subtração
340 bits 288 bits 336 bits 308 bits
(5*68 bits) (6*48 bits) (7*48 bits) (11*28 bits)
29
20 acessos 24 acessos 28 acessos 22 acessos
(4*5) (4*6) (4*7) (2*11)
30. 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
31. 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 31
;Armazena o resultado em um novo topo
32. Instruções com zero
operandos
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, 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
36. Modo Imediato
OpCode Operando
1010H 00110101H
A 35
4 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ÓRIA
Modo Direto C1 8B
OpCode Operando
11110111 000000000000000011000001
F7 0000C1
8 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 Indireto
OpCode Operando
01010011 000000000000000011000001
53 0000C1
8 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 Indireto
OpCode Operando
0100 01110100
4 74
4 bits 8 bits
• LDA OP ;O registrador R recebe o operando
MEMÓRIA
74 05D
44
5D 14A
45. Identificação do Modo de
Enderaçamento
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;
45
46. Comparação entre os Modos de
Enderaç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 Imediato
MODO OPERANDO VANTAGENS DESVAN TAGENS
Indadequado para
Imediato 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 à 47
Indireto 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ódigo
Por 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ção
Fim HLT ;pare
50. 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
10 linhas de código 50
Fim 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