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 |