Modos de Endereçamento - DCA

Propaganda
EA869
Modos de Endereçamento
Faculdade de Engenharia Elétrica e de Computação (FEEC)
Universidade Estadual de Campinas (UNICAMP)
Prof. Levy Boccato
1
Objetivos
 Reconhecer em uma instrução Assembly onde estão os dados
que devem ser manipulados.
 Conhecer os diversos modos de endereçamento.
 Conhecer
os modos
processador ARM.
de
endereçamento
existentes
no
2
Introdução
 Vimos anteriormente como é possível melhorar o desempenho de um
processador a partir de uma técnica de execução paralela de instruções: a
pipeline.
 Vimos também que processadores RISC exploram mais facilmente esta
técnica, uma vez que o mapeamento é direto e a execução das instruções
leva o mesmo tempo em ciclos de relógio.
 Tal fato deve-se, principalmente, por processadores RISC acessarem a
memória apenas com instruções especiais.
 As instruções de processamento de dados não permitem escrita e leitura da
memória; ou seja, não a endereçam.
 Já processadores CISC são capazes de acessar a memória a partir de
qualquer instrução; isto é, suas instruções podem endereçar a memória.
Ao ler ou escrever uma instrução Assembly, precisamos
conhecer os modos de endereçamento do processador
para sabermos onde está o dado que queremos acessar.
MODOS DE ENDEREÇAMENTO
3
Introdução
Onde você está?
ENDEREÇO
Todo dado tem associado a ele um endereço. Só conseguimos
acessá-lo se soubermos qual é este endereço.
Vamos supor que eu queira entrar em contato com uma pessoa e me
passam a seguinte informação:
@gmail.com
Avenida(19)
1, 9375 5657
Barão
Geraldo, Campinas-SP
HTTP://WWW.FACEBOOK.COM/
Como encontrá-la?
E-MAIL
CASA
TELEFONE
FACEBOOK
Toda informação possui um “rótulo” que indica onde o dado está ou, ao menos,
como acessá-lo.
Estas formas de acesso constituem os chamados modos de endereçamento.
4
Introdução
Onde estão os rótulos que indicam os modos de endereçamento?
Na própria instrução!
• Em Linguagem de Máquina
C.O.
OP1
MODO
Indica qual a forma de
endereçamento do
operando
OP2
...
END-b
Endereço-base do operando
Conteúdo-base para o cálculo do
endereço do dado. Pode ser:
- O próprio endereço do dado
- O próprio dado
- Deslocamento
- Registrador, etc
5
Introdução
Onde estão os rótulos que indicam os modos de endereçamento?
Na própria instrução!
• Em Linguagem Simbólica (Assembly)
C.O.
(OP1)
Rótulos indicarão o modo
# OP2 +
Nossa meta agora será conhecer
estes rótulos e identificar onde
está o dado que queremos acessar!
6
Endereço Efetivo
• Antes de identificarmos os modos de endereçamento em uma instrução,
precisamos conhecer onde está o endereço efetivo de um dado.
Endereço Efetivo (EE)
É o endereço real, ou final, de um dado a ser manipulado
Onde está este EE?
MODO DIRETO
O EE está na própria instrução
C.O.
MODO
END-b
MEMÓRIA
operando EE
MODO INDIRETO
O EE está no endereço especificado na instrução
C.O.
MODO
END-b
MEMÓRIA
EE
operando
7
Modos de endereçamento
Considere uma linguagem Assembly fictícia na qual o primeiro operando será sempre o
registrador destino. Vamos analisar o endereçamento do segundo operando.
Exemplo:
MOV R2 , # 1
R2 ← ‘1’
Onde está o
dado? (EE?)
Na própria instrução
EE = (PC)
ENDEREÇAMENTO IMEDIATO
•
Neste tipo de endereçamento, o operando, uma constante ou
literal, é especificado diretamente no campo de endereço-base da
instrução. Assim, o operando faz parte da instrução.
•
O endereço efetivo é o conteúdo do próprio registrador PC.
INSTRUÇÃO
C.O.
...
IMED.
MODO
END-b
DADO
EE = (PC)
Modos de endereçamento
Exemplo:
MOV R2 , 1
Onde está o
dado? (EE?)
R2 ← (1)
EE = posição de memória 1
ENDEREÇAMENTO ABSOLUTO DIRETO
• O endereço efetivo é o endereço referenciado no
campo de endereço do operando.
INSTRUÇÃO
C.O.
...
AD
MODO
end
END-b
EE = end
Modos de endereçamento
Exemplo:
MOV R2 , ( 1 )
Onde está o
dado? (EE?)
R2 ← ((1))
EE = (posição de memória 1)
ENDEREÇAMENTO ABSOLUTO INDIRETO
• O endereço efetivo está contido na posição de memória
cujo endereço é referenciado no campo do operando.
INSTRUÇÃO
C.O.
...
AID
MODO
end
END-b
EE = (end)
Modos de endereçamento
Exemplo:
MOV R2 , R1
Onde está o
dado? (EE?)
R2 ← (R1)
EE = Registrador R1
ENDEREÇAMENTO POR REGISTRADOR DIRETO
• O endereço efetivo é o próprio registrador referenciado
no campo de endereço da instrução; o registrador
contém o próprio operando.
INSTRUÇÃO
C.O.
...
ERD
MODO
Regis.
END-bi
EE = Registrador i
Modos de endereçamento
Exemplo:
MOV R2 ,(R1)
Onde está o
dado? (EE?)
R2 ← ((R1))
EE = (Registrador R1)
ENDEREÇAMENTO POR REGISTRADOR INDIRETO
• O endereço efetivo está contido no registrador
referenciado no campo de endereço do operando.
INSTRUÇÃO
C.O.
...
MODO
ERID
Regis. i
END-b
EE = (Registrador i)
Modos de endereçamento
Exemplo:
MOV R2 , +8(PC)
Onde está o
dado? (EE?)
R2 ← ((PC) + 8)
EE = (PC) + 8
ENDEREÇAMENTO RELATIVO
• O endereço efetivo é calculado pela adição do conteúdo
do registrador PC com um deslocamento contido no
campo de endereço da instrução.
INSTRUÇÃO
C.O.
...
ER
MODO
desloc
END-b
EE = (PC) + desloc.
Modos de endereçamento
Exemplo:
MOV (R2)+ , R3
(R2) ← (R3)
R2 ← (R2) + 1
Onde está o
dado? (EE?)
EE = (Registrador R2)
ENDEREÇAMENTO AUTO-INCREMENTO
• O endereço efetivo é incrementado durante o ciclo de
acesso. No auto-incremento, após calculado o endereço
efetivo, seu conteúdo é incrementado.
INSTRUÇÃO
C.O.
...
MODO
EAI
Regist.
END-b i
EE = (Regist. i)
Modos de endereçamento
Exemplo:
MOV -(R2) , R3
R2 ← (R2) – 1
(R2) ← (R3)
Onde está o
dado? (EE?)
EE = (Registrador R2) - 1
ENDEREÇAMENTO AUTO-DECREMENTO
• Antes de se determinar o endereço efetivo, o conteúdo do
registrador é decrementado.
INSTRUÇÃO
C.O.
...
MODO
EAD
Regist.
END-b i
EE = (Regist. i) - 1
Modos de endereçamento
Considere que nosso processador possua um Registrador Indexador (RIX) , cuja função é
definir um deslocamento para o endereço-base da instrução.
Exemplo:
Onde está o
dado? (EE?)
MOV R2 , RIX(100)
R2 ← (100 + (RIX))
EE = 100 + (RIX)
ENDEREÇAMENTO INDEXADO DIRETO
• No modo indexado direto o conteúdo do registrador RIX é
somado ao endereço-base para determinação do
endereço efetivo.
INSTRUÇÃO
C.O.
...
EID
MODO
End
END-b
EE = desloc + end
RIX
desloc
Modos de endereçamento
Considere que nosso processador possua um Registrador Indexador (RIX) , cuja função é
definir um deslocamento para o endereço-base da instrução.
Exemplo:
Onde está o
dado? (EE?)
MOV R2 ,(RIX(100))
R2 ← ((100 + (RIX)))
EE = (100 + (RIX))
ENDEREÇAMENTO INDEXADO INDIRETO
• PRÉ-INDEXADO: o deslocamento contido no registrador
indexador é somado ao endereço base antes da busca do
endereço indireto.
INSTRUÇÃO
C.O.
...
EIIDPRE
MODO
End
END-b
EE = (desloc + end)
RIX
desloc
Modos de endereçamento
Considere que nosso processador possua um Registrador Indexador (RIX) , cuja função é
definir um deslocamento para o endereço-base da instrução.
Exemplo:
Onde está o
dado? (EE?)
MOV R2 , RIX((100))
R2 ← ((100) + (RIX))
EE = (100) + (RIX)
ENDEREÇAMENTO INDEXADO INDIRETO
• PÓS-INDEXADO: o deslocamento contido no registrador
indexador é somado ao conteúdo da posição de memória
dada pelo endereço-base (indireto).
INSTRUÇÃO
C.O.
...
MODO
EIIDPOS
End
END-b
EE = desloc + (end)
RIX
desloc
Modos de endereçamento
Agora, além do RIX, nosso processador possui um Registrador de Base (RB), de forma que o
endereço-base estará contido nele.
Exemplo:
Onde está o
dado? (EE?)
MOV R2 , 8(RB)
R2 ← ((RB) + 8)
EE = (RB) + 8
ENDEREÇAMENTO BASEADO
• O endereço efetivo é calculado com a adição do conteúdo de um Registrador
de Base (RB) a um deslocamento contido no campo de endereço da instrução.
O deslocamento é interpretado como um número com sinal, permitindo um
deslocamento, positivo ou negativo, em relação à posição dada pelo conteúdo
do registrador RB.
INSTRUÇÃO
C.O.
...
EB
MODO
desloc
END-b
EE = end-b + desloc
RB
End-b
Modos de endereçamento
Agora, além do RIX, nosso processador possui um Registrador de Base (RB), de forma que o
endereço-base estará contido nele.
Exemplo:
MOV R2 , RIX(RB)
Onde está o
dado? (EE?)
R2 ← ((RIX) + (RB))
EE = (RIX) + (RB)
ENDEREÇAMENTO BASEADO E INDEXADO
•
O endereço efetivo é calculado com a adição do conteúdo de um Registrador de Base
(RB) com o conteúdo do Registrador Indexador (RIX).
•
Este é o modo de endereçamento mais versátil de todos. Qualquer um dos exemplos de
utilização apresentados pode ser implementado com este modo de endereçamento.
INSTRUÇÃO
C.O.
...
MODO
EBI
RIX
END-bRB
EE = (RIX) + (RB)
Modos de endereçamento
Exemplo:
NEG
Onde está o
dado? (EE?)
Acc ← (Acc)
EE = Acc
ENDEREÇAMENTO INERENTE OU IMPLICITO
• O próprio código de operação identifica o endereço dos dados a serem
manipulados.
• O endereço do operando não é especificado na instrução, é implícito.
Modos de endereçamento
ENDEREÇAMENTO POR PILHA
• Neste caso, o apontador de pilha SP indica o endereço
efetivo do dado.
• Retirando dados da pilha:
POP R1
SP ← (SP) – 1
R1 ← ((SP))
EE = (SP) - 1
• Inserindo dados na pilha:
PUSH R1
(SP) ← (R1)
SP ← (SP) + 1
EE = (SP)
Este tipo de endereçamento é muito utilizado para salvar o
conteúdo de registradores e posições de memória que
posteriormente serão recarregados em suas posições originais.
Uso típico: subrotinas.
Conclusões
• Ao escrever ou ler uma instrução Assembly, precisamos conhecer onde estão
os dados que estamos manipulando.
• A instrução nos fornece o endereço-base, ou seja, um conteúdo que irá nos
auxiliar a descobrir qual é o endereço efetivo do dado. Além disso, ela nos
fornece os “rótulos” que determinarão onde estão os dados.
• Há diversos modos de combinar o endereço-base com os rótulos a fim de se
acessar os dados. Cada forma define um modo de endereçamento.
• Processadores CISC possuem muitos modos de endereçamento já que não há
restrição no acesso à memória.
• Por sua vez, os processadores RISC possuem poucos modos de endereçamento
já que o acesso a memória se dá apenas por instruções especiais. Tal fato facilita
a programação.
• Por fim, um último modo de endereçamento comumente utilizado nos
processadores é o endereçamento paginado. Tal forma será detalhadamente
estudada na disciplina de EA876, no contexto de sistemas operacionais.
Download