sexta-feira, julho 08, 2011

Modos de Endereçamento

O endereço da próxima instrução é apontado através do valor armazenado no CI
(contador de instruções). A ação a ser realizada pela instrucao é determinada pelo
mnemônico da instrução, armazenado no campo "Código de Operação" OPCODE).
O dado da instrução pode ser um valor numérico, um caracter ou mesmo um endereço
(no caso de uma instrução de desvio). A localização do dado é, em geral, explicitamente
indicada na próxima instrução sendo representada no campo "Operando".
Exemplo de quantidade de Operandos:
a) Instrução com 3 operandos:
ADD A, B, X  ->  (X) <- (A) + (B)
b) Instrução com 2 operandos:
ADD A, B  ->  (A) <- (A) + (B)
c) Instrução com 1 operando:
ADD Op  ->  ACC <- ACC + (Op)
Dentre os diversos modos de endereçamento, os principais são:
          imediato;
         direto;
          indireto;
por registrador (direto ou indireto);
indexado;
base mais deslocamento
Modo Imediato
O valor do campo operando é o próprio dado. É usado para trabalhar com valores
constantes.
Vantagem: O operando é obtido em apenas um acesso.
Desvantagens:
a) O tamanho do dado fica limitado ao número de bits do operando.
b) Não permite flexibilidade para alterar dados que variam a cada execução do programa.
Utilização:
inicialização de contadores;
constantes;
armazenamento de ponteiros em registradores;
indicação de quantidade de posições em operações de deslocamento de bits
(mutiplicação e divisão).
Exemplo:
LDI Op  ->  CI <- Op



Modo Direto
O valor do campo operando indica o endereço do dado na memória principal.
Vantagens:
a) É aplicado em mais situações que o modo imediato.
b) Requer apenas uma referência à memória principal para buscar o dado (além de uma
para buscar a instrução).
Desvantagens:
a) Limitação do endereço da memória principal que pode ser indicado pelo tamanho do
campo operando.
b) É mais lento que o modo imediato.
Utilização:
Quando o dado varia de valor a cada execução.
Exemplo:
LDA Op   -> CI <- (Op)
Modo Indireto
O campo operando contém um endereço de memória cujo conteúdo é o endereço do
dado a ser operado. Há um duplo endereçamento. O endereço intermediário é chamado
ponteiro ("pointer").
Vantagens:
a) Permite implementar estruturas de organização de dados mais complexas e mais
sofisticadas.
b) Elimina a limitação de celulas endereçáveis.
Desvantagem:
Requer maior quantidade de acessos à memória principal para completar o ciclo de
execução da instrução, acarretando que o tempo requerido de execução para a execução
da instrução é maior.
Utilização:
Manutenção de ponteiro de dados.
Exemplo:
LDID Op   -> ACC <- ((Op))



Endereçamento por Registrador
Este método tem características semelhantes aos modos direto e indireto, exceto que a
célula de memória referenciada na instrucao é substituída por um dos registradores da
CPU. Com isso, o endereço mencionado na instrução passa a ser o de um dos
registradores, e não de uma célula da memória principal.
Há duas maneiras de empregar o modo de endereçamento por registrador:
modo por registrador direto: o operando aponta para um registrador, o qual
contém o dado.
modo por registrador indireto: o operando aponta para um registrador, o qual
contém o endereço de memória do dado.
Vantagens:
a) Menor número de bits necessários para endereçar os registradores.
b) O dado passa a ser armazenado em um meio (registrador) cujo acesso é muito mais
rápido que o acesso à memória.
c) Economia de bits nas instruções.
Exemplos:
Com registrador:            OPCODE      R1         R2
8 bits       4 bits     4 bits
Com células de memória:
OPCODE        Op1         Op2
8 bits        16 bits      16 bits
Desvantagens:
a) Não são adequados para a transferência de variáveis da memória principal para a ULA.
b) Pequeno número de registradores.
Utilização:
Implementação de contadores.
Exemplos:
a) ADD R  ->
(ACC) <- (ACC) + (R)      Soma conteúdo do registrador R ao conteúdo
do acumulador (direto)
b) ADD M  ->  (ACC) <- (ACC) + ((M))  Soma conteúdo da posição de memória
indicada pelo registrador M ao conteúdo do acumulador (indireto)



Modo Indexado
O endereço de cada elemento é obtido através da soma do campo operando com o
conteúdo de um registrador (Registrador de Índice). O endereço de cada elemento (por
exemplo, um vetor) é a soma (antes da colocação do endereço no REM) do valor do
campo operando com o conteúdo de um registrador, escolhido registrador de índice).
Vantagem:
Rapidez na execução das instruções de acesso aos dados.
Utilização:
Manipulação de estruturas de dados mais sofisticadas (vetores).
Exemplo:
LDX Ri, Op  ->   ACC <- ((Op) + (Ri))
Modo Base mais Deslocamento
Utiliza um registrador (registrador de base), que contém o endereço base na memória
principal, e um operando, que contém o deslocamento do dado em relação à base.
Utilização:
Usado para relocação de programas: define endereço inicial da área do programa e o
endereço da área de dados.
Exemplo:
ADD [BX + DI + 5], DX
deslocamento, registrador