next up previous contents
Next: Codificação binária Up: Assembly do 68000 Previous: Instruções assembly   Sumário


Modos de endereçamento

O 68000 apresenta quatorze modos de endereçamento distintos, agrupados em seis modos básicos. Estes modos básicos são absoluto, imediato, direto a registrador, indireto a registrador, relativo a PC e implícito.

No modo de endereçamento absoluto o operando está no endereço especificado na própria instrução. Por exemplo, a instrução

    MOVE.W  1000,D1
copia o conteúdo da palavra (dois bytes) na posição de memória $ 1000_{10}$ para o registrador de dados D1. Na codificação desta instrução há duas possíveis variantes. Se o endereço absoluto pode ser representado em dois bytes, então o modo absolute short pode ser utilizado. Caso contrário, quatro bytes deverão ser utilizados (modo absolute long). Observe que está informação não está contida na instrução -- o .W na instrução refere-se ao tamanho do operando, e não de seu endereço. Neste texto, quando não explicitado de outra forma serão utilizados quatro bytes para endereços absolutos.

No modo de endereçamento imediato o valor do operando está incorporado à instrução, sendo precedido pelo símbolo #. Por exemplo, a instrução

    ADDQ.L  #2,A0
soma o valor 2 ao conteúdo do registrador de endereço A0.

No modo de endereçamento direto a registrador o operando é o conteúdo de um registrador especificado na instrução. Por exemplo, para mover o conteúdo do registrador de dados D0 para o registrador de dados D1

    MOVE.W D0,D1
Há duas variantes deste modo de endereçamento, direto a registrador de dados Dn ou direto a registrador de endereços An.

No modo de endereçamento indireto a registrador o operando está no endereço contido em um registrador de endereços especificado na instrução. Por exemplo, a instrução

    MOVE.W (A0),D1
move o conteúdo da palavra na posição de memória cujo endereço está no registrador A0 para o registrador de dados D1.

Este modo de endereçamento indireto oferece variantes com pós-incremento, pré-decremento, com deslocamento e indexado. O modo de endereçamento indireto a registrador com pós-incremento permite incrementar o valor do registrador de endereços após o acesso ao valor corrente do registrador. Por exemplo, a instrução

    MOVE.W (A0)+,D1
move o conteúdo da palavra cujo endereço é o conteúdo do registrador de endereços A0 para o registrador de dados D1 e incrementa o valor de A0 de 2 (o tamanho de uma word). Assim, esta única instrução equivale à seqüência de instruções
    MOVE.W (A0),D1
    ADDQ.L #2,A0

O modo de endereçamento indireto a registrador com pré-decremento é similar a este modo, sendo que neste caso o conteúdo do registrador de endereços é decrementado antes do acesso ao seu conteúdo. Assim, a instrução

    MOVE.W -(A0),D1
equivaleria a
    SUBQ.L #2,A0
    MOVE.W (A0),D1

No modo de endereçamento indireto a registrador com deslocamento, é possível especificar na instrução um valor constante que deve ser adicionado ao conteúdo corrente do registrador de endereços. O deslocamento é uma constante representável em 16 bits com sinal. Assim, a instrução

    MOVE.W 32(A0),D1
irá adicionar 32 ao conteúdo de A0 para obter o endereço da palavra que deverá ser carregada no registrador D1, sendo que o conteúdo de A0 permanecerá inalterado. A título de ilustração, a implementação desta instrução caso este modo de endereçamento não fosse suportado iria requerer a utilização de outro registrador para armazenagem temporária. Supondo que o registrador A6 fosse utilizado para este fim, então a instrução acima equivaleria a
    MOVEA.L A0,A6
    ADDI.L  #32,A6
    MOVE.W  (A6),D1

O modo de endereçamento indireto a registrador pode ser também indexado. Este é similar ao modo com deslocamento, sendo que além de se adicionar uma constante ao registrador de endereços é possível especificar um registrador de dados cujo conteúdo também será acrescentado ao conteúdo do registrador de endereços para a obtenção do endereço efetivo do operando. Por exemplo, a instrução

    MOVE.W  16(A0,D0.W),D1
equivaleria a
    MOVEA.L A0,A6
    ADDA.L  D0,A6
    ADDI.L  #16,A6
    MOVE.W  (A6),D1
novamente utilizando A6 como um registrador temporário.

No modo de endereçamento relativo ao PC o operando é especificado tendo por base o conteúdo corrente do registrador contador de programa. Há duas variantes possíveis para este modo de endereçamento, com deslocamento ou indexado, ambos similares aos modos equivalentes descritos no modo de endereçamento indireto a registrador de endereços. Por exemplo,

    MOVE.W  16(PC),D1
adiciona 16 ao conteúdo corrente do registrador PC para obter o endereço efetivo da palavra fonte cujo conteúdo será copiado para D1. É importante observar que o valor corrente do PC não corresponde ao endereço da palavra da instrução que contém o código de operação, mas sim à palavra de extensão (que contém o deslocamento). Esta forma de endereçamento é muito importante na definição de códigos independentes de posição.

No modo de endereçamento implícito o operando não está especificado na instrução. Por exemplo, todas instruções de desvio da forma branch referem-se implicitamente ao valor corrente do registrador PC.


next up previous contents
Next: Codificação binária Up: Assembly do 68000 Previous: Instruções assembly   Sumário
Ivan L. M. Ricarte 2003-02-14