| 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 |