Você está na página 1de 31

Arquitetura de Computadores

Modos de Endereçamento

Prof. Ewerson Carvalho ewerson.carvalho@furg.br


Aula Passada?
RISC e CISC
Introdução
CISC e RISC ?
Dizem respeito à Arquitetura de Computadores
ABORDAGENS DISTINTAS para PROJETAR a ARQUITETURA

Onde elas diferem?


(1) Número de Registradores disponíveis
(2) Número de Instruções disponíveis
(3) Complexidade das Operações realizadas pelas instruções
Introdução
CISC
COMPLEX Instruction Set Computer
Computador com Conjunto Complexo de Instruções
Ex.: Processadores Intel e AMD
Maioria para Desktops (PCs)

RISC
REDUCED Instruction Set Computer
Computador com Conjunto Reduzido de Instruções
Ex.: Processadores PowerPC (IBM) e SPARC (SUN)
Maioria para Servidores e Computação Embarcada
CISC vs. RISC
QUANTIDADE DE INSTRUÇÕES
Facilidade Aprendizado vs. Flexibilidade Programação

CISC disponibiliza MUITAS INSTRUÇÕES


– Mais DIFÍCIL para aprender
– Mais opções para programar (mais Flexível)
Obs.: Tem instrução para fazer tudo!

RISC disponibiliza POUCAS INSTRUÇÕES


– Mais FÁCIL para aprender
– Menos opções para programar (menos Flexível)
Obs.: Códigos tendem a ser bem maiores!
CISC vs. RISC
NÚMERO DE REGISTRADORES
Acessos à Memória vs. Modos de Endereçamento

CISC possui POUCOS REGISTRADORES


– Pouco Espaço para operandos dentro da CPU
– Necessita ACESSO FREQUENTE à memória
» Precisa de Vários Modos de Endereçamento
Obs.: Implica em Formatos de Instrução Variados

RISC possui MUITOS REGISTRADORES


– Pode Armazenar muitos operandos na CPU
– Operações sobre Registradores (pouco acesso memória)
» Necessita de Poucos Formatos de Instrução
CISC vs. RISC
COMPLEXIDADE DAS INSTRUÇÕES
Complexidade Compilador vs. Complexidade Controle

CISC disponibiliza LINGUAGEM COMPLEXA


– Códigos tem complexidade semelhantes à LP
» Tradução SW quase 1 para 1 (Fácil Compilar)
» Tradução HW complicada (Difícil Decodificar)
Obs.: Decodificador precisa ser mais elaborado

RISC disponibiliza LINGUAGEM SIMPLES


– Códigos tem complexidade semelhantes ao HW
» Tradução SW é 1 para N (Difícil Compilar)
» Tradução HW Simples (Fácil Decodificar)
Obs.: Compilador precisa ser Inteligente
CISC vs. RISC
- QUANTIDADE DE INSTRUÇÕES (Facilidade Aprendizado vs. Programação)
- NÚMERO DE REGISTRADORES (Acessos à Memória vs. Modos de Endereçamento)
- COMPLEXIDADE DAS INSTRUÇÕES (Complexidade Compilador vs. Controle)

LP COMPILADOR LM DECODIFICADOR HW

CISC Simples (1à1) Microprogramado (1àN)

RISC Inteligente (1àN) Direto em HW (1à1)


CISC vs. RISC

CISC é amigão
do COMPILADOR

RISC é amigão do
CONTROLE
(Decodificador)
Agenda
Parte 2 - Arquitetura de Computadores

Arquitetura do Conjunto de Instruções (ISA) Aula 1

Arquiteturas RISC e CISC Aula 2

Lista de Exercícios Aula 3

Modos de Endereçamento Aula 4

Tipos e Formatos de Instruções Aula 5

Lista de Exercícios Aula 6

Aulas de Dúvidas + TAREFA Aulas 7, 8 e 9

Avaliação Individual Aula 10


Armazenamento
de Operandos
Tipos Comuns: Armaz. Operandos
PILHA
Pilha = Abstração de Memória (acesso no Topo da Pilha)
Operandos estão implicitamente no topo da pilha

ACUMULADOR (ACC)
ACC = 1 Registrador (memória para 1 palavra)
Um dos operandos é implicitamente o ACC

REGISTRADORES DE PROPÓSITO GERAL (GPR)


Registradores = Memórias dentro da CPU (são poucos, ex.: 10)
Todos os operandos são explicitamente mencionados
Operandos são ou registradores ou posições de memória

Vamos aos exemplos …


Armaz. Operandos
Para implementar em Assembly (linguagem de montagem)
D = A + B + C; Estados da Pilha

- A B C B+C A+B+C -

- - A B A - -

- - - A - - -

PILHA (topo da pilha implícita) -


(0)
-
(1)
-
(2)
-
(3)
-
(4)
-
(5)
-
(6)

PUSH A ; (1) Insere o valor A no topo da pilha

PUSH B ; (2) Insere o valor B no topo da pilha

PUSH C ; (3) Insere o valor C no topo da pilha

ADD ; (4) Realiza soma (operandos do topo da pilha)

ADD ; (5) Realiza soma (operandos do topo da pilha)

POP D ; (6) Remove o valor do topo da pilha e armazena em D


Armaz. Operandos
Para implementar em Assembly (linguagem de montagem)
D = A + B + C;
Estados do REG ACC
0 A A+B A+B+C -
(0) (1) (2) (3) (4)

ACUMULADOR IMPLÍCITO
LOAD A ; (1) Carrega o valor A no Acumulador

ADD B ; (2) Soma o valor B ao Acumulador

ADD C ; (3) Soma o valor C ao Acumulador

STORE D ; (4) Armazena o valor do Acumulador em D


Armaz. Operandos
Para implementar em Assembly (linguagem de montagem)
D = A + B + C;
Estados dos REGs
R1 - A A A A+B A+B+C A+B+C
(0) (1) (2) (3) (3) (3) (3)
R2 - - B B B B B
(0) (1) (2) (3) (3) (3) (3)
R3 - - - C C C C

REGs Propósito Geral (0) (1) (2) (3) (4) (5) (6)

LOAD A R1 ; (1) Carrega o valor A no registrador R1

LOAD B R2 ; (2) Carrega o valor B no registrador R2

LOAD C R3 ; (3) Carrega o valor C no registrador R3

ADD R1 R2 ; (4) Soma R2 ao registrador R1

ADD R1 R3 ; (5) Soma R3 ao registrador R1

STORE R1 D ; (6) Armazena o valor do registrador R1 em D


Vantagens Desvantagens

Modelo Simples A pilha é acessada


PILHA Instruções Pequenas constantemente
(Sem Operandos) (gargalo)

Instruções ainda O Acumulador é o único


ACC

pequenas armazenamento. Logo, muito


(Poucos Operandos) tráfego com a memória

Geração de código mais simples Todos operandos devem ser


GPR

Dado pode ser armazenado em explicitos, e assim aumenta o


registradores (temporariamente) tamanho das instruções
Armaz. Operandos
CPUs ANTIGAS
Só usam PILHA e ACC
von Neumann baseava-se no ACC

CPUs RECENTES (últimos 15 anos)


Tbm usam GPR
Por que? REGs são memórias dentro da CPU (Reduz tráfego CPU-Memória)
Além disso, Facilita operação do Compilador

Atenção: Não são todos os processadores que se encaixam nessas categorias


i8086 possui instruções com operandos implícitos, mas possui GPR.
i8051 tem 4 bancos de GPRs, mas a maioria das instruções usa o reg A.
Pentium 4 (IA-32) Armaz. Operandos
Registradores 32bits
Uso Geral com preferencias! Reg. aritmético (principal)
Reg. para ponteiro de memória
Reg. para laços/loops
Reg. para divisão/multiplicação (64 Bits)

Reg. para ponteiros de vetores (Fonte)


Reg. para ponteiros de vetores (Destino)
Reg. de ponteiro da pilha (quadro)
Reg. de ponteiro da pilha

Registradores de Segmento
Para compatibilidade com o 8088
Geralmente não são utilizados!!

Reg. Contador de Programa (PC)

Flags das Operações (overflow, carry, etc)


UltraSPARC-III Armaz. Operandos
Registradores de Uso Geral de 64 bits
32 Regitradores de Uso geral + 32 para Ponto Flutuante

Sempre em 0.
Armazenam Variáveis Globais
Armazenam Parâmetros de Procedimentos
Armazena o Ponteiro para a Pilha
Registrador de Rascunho
Armazena Variáveis Locais dos Procedimentos
Armazena Parâmetros de Entrada
Armazena o Ponteiro para a Pilha (Quadro)
Armazena o Endereço de Retorno do Procedimento
Modos de
Endereçamento
Endereçamento
Como acessar os dados?

Existem vários MODOS DE ENDEREÇAMENTO


• IMEDIATO Acesso a Constante
• DIRETO Acesso a uma Variável na Memória
• INDIRETO Acesso a um Ponteiro em Memória
• REGISTRADOR Acesso a um Registrador (REG)
• REG. INDIRETO Acesso a Ponteiro dentro de um REG
• INDEXADO Acesso a um Vetor (indexado)
• PILHA Acesso a Pilha

Vamos por partes ...


Endereçamento
IMEDIATO
Operando = PRÓPRIO VALOR a ser usado

LOAD R1 10
Ex.: Acesso a um VALOR CONSTANTE no código

Vantagem: Modo Mais Simples


Não precisa Ler a Memória!!!!!
Por que? O valor estar na própria instrução (no código)

Desvantagem: Sempre vai usar o Mesmo Valor


Para alterar o valor, só editando o código
No exemplo, sempre carrega 10 dentro de R1
Endereçamento
DIRETO
Operando = ENDEREÇO do valor a ser utilizado

LOAD R1 A

Ex.: Acesso a uma VARIÁVEL DO CÓDIGO


Uma variável é um endereço fixo de memória
Necessita de Acesso à Memória

Vantagem: Agora o valor pode ser mudado


Pode-se alterar o valor dentro de uma variável

Desvantagem: Sempre acessa a mesma posição


Não tem como alterar o endereço da variável
Para alterar o endereço, só editando do código
Endereçamento
INDIRETO
Operando = PONTEIRO armazenado na memória

LOAD R1 (A)

Ex.: Acesso a um PONTEIRO


Variável contém o endereço do dado

Vantagem: Permite Alocação Dinâmica


Pode mudar dado e endereço do dado
Endereça memória sem usar os bytes da instrução

Desvantagem: Mais Acessos à Memória


São necessários dois acessos a memória
Endereçamento
REGISTRADOR
Operando = REGISTRADOR com valor armazenado

LOAD R1 R
Ex.: Uso de REGISTRADOR
Endereçamento MAIS COMUM

Vantagem: Acesso Rápido


Não acessa Memória - Acesso direto ao Banco de REGs
Necessita menos bits para endereçamento

Desvantagem: Sempre acessa mesmo REG


REG a ser acessado é fixo na Instrução (Código)
Similar ao ENDEREÇAMENTO DIRETO
Obs.: Espaço de Endereçamento é Menor
Endereçamento
REGISTRADOR INDIRETO
Operando = PONTEIRO armazenado no Banco de Registradores

LOAD R1 (R)

Ex.: Acesso a um PONTEIRO


Similar a Endereçamento Indireto
Só que ponteiro está em REG

Vantagem: Igual a End. Indireto


Pode mudar endereço do dado
Endereça memória sem usar bytes da instrução
Obs.: Não precisa 2 leituras memória
Endereçamento
INDEXADO
Operando = ENDEREÇO BASE + INDICE
A é o deslocamento
R contém o Endereço Base

LOAD R1 (R) A

Vantagem:
Ideal para acessar dados de um vetor
Endereçamento
PILHA
NÃO TEM ENDEREÇAMENTO
Operando = Topo da pilha (SEMPRE)

ADD

Vantagem: Instrução Pequena


Instrução não precisa passar operandos

Desvantagem: Manipular Pilha


Tem que realizar PUSH e POP sobre a pilha frequentemente
Modo$ VANTAGEM$ DESVANTAGEM$
Nenhuma(referencia(( Tamanho(limitado((
IMEDIATO$
à(memoria( de(operando(
Espaco(limitado(de((
DIRETO$ Simples(
endereçamento((
Espaço(grande(de(( Multiplas(referencias((
INDIRETO$
endereçamento( de(memoria(
Nenhuma(referencia(( Espaço(limitado(de((
REGISTRADOR$
à(memoria( endereçamento((
Espaço(grande(de(( Referencia(extra(
REGISTRADOR$INDIRETO$
endereçamento(( de(memoria(

INDEXADO$ Flexibilidade( Complexidade(

Nenhuma(referencia(( Aplicabilidade((
PILHA$
à(memoria( limitada(
Endereçamento
Exemplos:

Modo de Endereçamento
ACUMULADOR
IMEDIATO
DIRETO
REGISTRADOR
REGISTRADOR INDIRETO
INDEXADO
BASE PILHA
INDEXADO
Próxima Aula

Arquitetura de Computadores

Tipos de Instruções

Você também pode gostar