Вы находитесь на странице: 1из 2

LILIAN AFONSO CANDIDO

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES

Modos de Endereçamento

Modos de endereçamento são convenções usadas na programação em linguagem


Assembly que especificam como determinados valores são lidos dentro de um determinado
segmento de instruções de montagem. Um modo de endereçamento permite determinar um
operando ou a localização de um operando em uma instrução. Estes operandos podem residir
na própria instrução, ou na memória principal ou nos registros internos da CPU. Programas
utilizam vários modos de endereçamento devido poupança de espaço, estruturas de dados, etc.

1. Modo Imediato: Imediato significa que o valor de uma determinada instrução em


programação de montagem é especificado diretamente. Isso significa que o valor é constante e
escrito imediatamente e imutavelmente na instrução. É a forma mais simples de endereçamento
já que o valor do campo operando é o próprio dado. Este modo é utilizado para definir e utilizar
constantes ou inicializar variáveis. O bit à esquerda é utilizado como bit de sinal em
complemento de dois. Quando transferido para um registro, o bit de sinal é estendido para a
esquerda para completar os campos da palavra. Vantagens: Não há necessidade de outra
referência a memória além da instrução e o operando é obtido em apenas um acesso. Sua
desvantagem é que o tamanho do número fica restrito ao tamanho do campo de
endereçamento.

2. Modo Direto: Aqui, a instrução indica o endereço de memória real do dado. Esse
modo exige uma única referência da memória para ler o operando a partir de uma dada
localização, porém ele fornece apenas um espaço de endereçamento limitado. Sua vantagem é
que requer apenas uma referência à memória principal para buscar o dado e uma para buscar a
instrução. Suas desvantagens são a limitação do endereço da memória principal que pode ser
indicado pelo tamanho do campo operando e também é mais lento que o modo imediato, que
veremos a frente. Este modo é muito utilizado quando o dado varia de valor a cada execução.

3. Modo Indireto: No endereçamento direto, o comprimento do campo de endereço é


habitualmente inferior ao comprimento da palavra, desta forma, acaba limitando a gama de
endereços. A solução seria ter o campo operando contendo um endereço de memória cujo
conteúdo é o endereço do dado a ser operado. Dessa forma, há um duplo endereçamento. O
endereço intermediário é chamado ponteiro. A vantagem dessa abordagem é que a limitação
de células endereçáveis é eliminada, e é permitida a implementação de estruturas de
organização de dados mais complexas e sofisticadas. A desvantagem é que a execução da
instrução precisa de duas referências à memória para extrair o operando, sendo uma para obter
o respectivo endereço e outra para obter o valor. Dessa forma, requer maior quantidade de
acessos a MP para completar o ciclo de execução da instrução, aumentando o tempo requerido
para execução da instrução. É utilizado na manutenção de ponteiros de dados. Esse método se
tornou obsoleto devido à enorme quantidade de acessos à MP e a dificuldade para
programadores da linguagem Assembly.

4. Endereçamento por Registradores: Esse método tem características semelhantes aos


modos direto e indireto, salvo pela célula de memória referenciada na instrução, que é agora
um dos registradores da CPU. Dessa forma, o endereço mencionado na instrução passa a ser o
de um dos registradores ao invés de uma célula da MP. Suas vantagens incluem os pequenos
endereços de 3 a 4 bits geralmente e a não necessidade de referenciar a memória. Também
temos o tempo de acesso que é muito menor que o acesso à MP. Desvantagens: o espaço de
endereçamento é pequeno, Se o endereçamento ao registro for muito pequeno num conjunto
de instrução os registros da CPU serão muito utilizados. Por causa do número muito limitado de
registros, seu uso só faz sentido se for feito de maneira eficiente. Se cada operando que for
trazido para um registro de memória, for utilizado em uma única operação e mandado de volta
à memória, então um passo intermediário custoso terá sido adicionado. Porém se o operando
permanecer no registro e em uso por várias operações, uma economia real será atingida. Esse
modo é mais utilizado na implementação de contadores. Existem 2 formas de se empregar o
modo de endereçamento por registradores, sendo eles o modo por registrador direto e o
indireto. No modo direto o operando aponta para um registrador que contém o dado. No modo
indireto o operando aponta para o registrador que contém o endereço de memória do dado.

5. Modo indexado: Usado para acessar uma sequência de dados armazenados em


posições consecutivas da MP. Há a necessidade de um registrador de uso específico para a
implementação desse tipo de endereçamento, uma vez que este armazena o índice do vetor. O
endereço de cada elemento é obtido através da soma do campo operando com o conteúdo
deste registrador. Seu maior uso está na manipulação de vetores e arrays. Vantagens: Alteração
de endereços é realizada dentro da CPU, através do incremento ou decremento do índice,
portanto não necessita de acesso à MP, tornando a operação mais rápida e, também, a
possibilidade do uso de estruturas de dados mais sofisticados como vetores. Suas desvantagens
são a limitação do tamanho do array e a necessidade do uso de um registrador específico para
isso.

6. Modo base mais deslocamento: Semelhante ao indexado, porém aqui o endereço é


obtido da soma do campo de deslocamento com o conteúdo do registrador base. Este modo de
endereçamento tem como objetivo permitir a modificação de endereço de programas ou
módulos destes, bastando para isso alterar o registrador base. É usado para acessar uma
sequência de dados armazenados em posições consecutivas da MP. Existe aqui a necessidade
do uso de registradores específicos (Registrador de Segmento RS), que armazenam o endereço
do início de cada segmento. O que varia é o deslocamento dentro do segmento. Vantagem:
Reduz o tamanho das instruções e facilita o processo de relocação de programas, também tem
realocação dinâmica rápida. Desvantagem é exatamente a necessidade do uso de registradores
específicos para isso.

Assembly x Assembler

Assembler é o compilador que transforma o código escrito na linguagem Assembly em


linguagem de máquina, substituindo as instruções e variáveis pelos códigos binários e endereços
de memória correspondentes, já que o computador necessita que lhe instruam com ações bem
especificas. O código binário representa as operações e os operandos que serão utilizados no
processamento do programa. A linguagem Assembly é representada por comandos que
reproduzem as tarefas que serão executadas dentro do computador, entretanto mesmo ela é
difícil de se programar e normalmente programas feitos para um determinado processador não
funcionarão em um processador de outro tipo.
Os softwares para os primeiros computadores foram escritos principalmente em
linguagem Assembly por muitos anos. As linguagens de alto nível de programação não foram
inventadas até que os benefícios de ser capaz de reutilizar software em diferentes tipos de CPUs
passassem a ser significativamente maiores que o custo de escrever um compilador.