Escolar Documentos
Profissional Documentos
Cultura Documentos
Endereçamento
Henrique C. Oliveira1
1
Instituto de Matemática e Computação – Universidade Federal de Itajubá (UNIFEI)
Caixa Postal 37.500-903 – Itajubá – MG – Brasil
henriquecastro@unifei.edu.br
Abstract. Most of the instructions have operands, so you need some way to
specify where they are. This subject, which will be covered in this summary, is
called addressing.
1. Modos de endereçamento
Até aqui, demos pouca atenção ao modo como os bits de um campo de endereço são
interpretados para achar o operando. Agora, chegou a hora de investigar esse assunto,
denominado modos de endereçamento. Como veremos, existem muitas formas de fazer
isso.
2. Endereçamento imediato
O modo mais simples de uma instrução especificar um operando é a parte da instrução ref-
erente ao endereço conter o operando de fato em vez de um endereço ou outra informação
que descreva onde ele está. O endereçamento imediato tem a vantagem de não exigir uma
referência extra à memória para buscar o operando.
3. Endereçamento direto
Um método para especificar um operando na memória é dar seu endereço completo. As-
sim como o imediato, o endereçamento direto tem uso restrito: a instrução sempre aces-
sará exatamente a mesma localização de memória. Assim, o endereçamento direto só
pode ser usado para acessar variáveis globais cujos endereços sejam conhecidos no mo-
mento da compilação. Não obstante, muitos programas têm variáveis globais, portanto,
esse modo é muito utilizado.
4. Endereçamento de registrador
Endereçamento de registrador é conceitualmente o mesmo que endereçamento direto,
mas especifica um registrador em vez de uma localização de memória. Muitos compi-
ladores fazem todo o possı́vel para determinar quais variáveis serão acessadas com maior
frequência e as colocam em registradores. Em arquiteturas carregue/armazene, como a
arquitetura ARM do OMAP4430, quase todas as instruções usam apenas esse modo de
endereçamento. A única vez em que esse modo de endereçamento não é usado é quando
um operando é transferido da memória para um registrador ou de um registrador para a
memória.
5. Endereçamento indireto de registrador
Nesse modo, o operando que está sendo especificado vem da memória ou vai para ela, mas
seu endereço não está ligado à instrução, como no endereçamento direto. Uma grande
vantagem do endereçamento indireto de registrador é que ele pode referenciar a memória
sem pagar o preço de ter um endereço de memória completo na instrução. Além disso,
também pode usar diferentes palavras de memória em diferentes execuções da instrução.
As três primeiras instruções usam o modo registrador para o primeiro operando e o modo
imediato para o segundo operando .
A segunda instrução coloca o endereço de A em R2, não o conteúdo. De modo
semelhante, a terceira instrução coloca em R3 o endereço da primeira palavra logo após
o vetor. Ele usa o modo registrador e o modo indireto de registrador na quarta instrução.
Usa o modo registrador e o modo indireto de registrador na quarta instrução.
Usa o modo registrador e o modo imediato na quinta instrução e o modo regis-
trador duas vezes na sexta instrução. O BLT poderia usar um endereço de memória, mas
provavelmente especifica o endereço para o qual desviar com um deslocamento de 8 bits
em relação à própria instrução BLT. Vale a pena observar que, em teoria, há outro modo
de fazer esse cálculo sem usar endereçamento indireto de registrador.
Um programa que modifica a si mesmo é denominado programa automodificador.
Além do mais, sequer funcionam corretamente em máquinas que têm uma cache dividida
de nı́vel 1 se a cache de instrução não tiver circuitos para fazer escritas retroativas . Por
fim, programas automodificadores também falharão em máquinas com espaços separados
para instrução e dados. De modo geral, essa é uma ideia que chegou e já se foi.
6. Endereçamento indexado
Muitas vezes, é útil poder referenciar palavras de memória cujo deslocamento em relação
a um registrador é conhecido. Vimos alguns exemplos na IJVM, na qual variáveis locais
são referenciadas dando seu deslocamento em relação a LV. Endereçamento indexado é
o nome que se dá ao endereçamento de memória que fornece um registrador mais um
deslocamento constante. O acesso à variável local em IJVM usa um ponteiro para a
memória em um registrador mais um peque-no deslocamento na própria instrução, como
mostra a Figura 4.19.
A em um registrador, o endereço de B em um segundo registrador, e então per-
corrê-los juntos no mesmo passo, semelhante ao que fizemos na Figura 5.17. Um reg-
istrador, R2, e uma constante, o endereço de A, são somados e usados para referenciar a
memória. A soma dessas duas quantidades vai para a memória, mas não é armazenada
em nenhum registrador visı́vel ao usuário. A notação significa que o destino usa o modo
registrador com R4, ao passo que o registrador e a origem usam o modo indexado, sendo
A o deslocamento e R2 o registrador.
Se A tiver o valor, por exemplo, 124.300, a instrução de máquina para isso
provavelmente é parecida com a mostrada na Figura 5.19. Na primeira vez que o laço
é percorrido, R2 é 0 , portanto, a palavra de memória endereçada é A0, no endereço
124.300. Na próxima vez que o laço é percorrido, R2 é 4, portanto, a palavra de memória
endereçada é A1, em 124.304, e assim por diante. Como tı́nhamos prometido, nesse caso
o deslocamento na instrução em si é o ponteiro de memória e o valor no registrador é um
inteiro pequeno, que é incrementado durante o cálculo.
8. Endereçamento de pilha
8.1. Notação polonesa invertida
A forma com o operador após os operandos é denominada pós-fixa ou notação polonesa
invertida, que deve seu nome ao lógico polonês J. Lukasiewicz , pesquisador das pro-
priedades dessa notação. A notação polonesa invertida tem diversas vantagens sobre a
notação infixa para expressar fórmulas algébri-cas. Primeiro, qualquer fórmula pode ser
expressa sem parênteses. A notação polonesa invertida elimina esse inconveniente.
Existem diversos algoritmos para converter fórmulas infixas em notação polonesa
invertida. Para marcar as extremidades de uma fórmula, vamos inserir o sı́mbolo após
o último sı́mbolo e antes do pri-meiro sı́mbolo. Cada sı́mbolo na fórmula é representado
por um vagão ferroviário. Quando cada vagão chega ao desvio, tem de parar um pouco
antes e perguntar se deve ir dire-to para Belo Horizonte ou desviar a rota para o Rio.
Vagões que contêm todos os outros sı́mbolos têm de perguntar qual é o conteúdo
do vagão mais próximo na linha que vai para o Rio antes de entrar no desvio. Os dados
da Figura 5.21 mostram o que acontece, dependendo do conteúdo do próximo vagão na
linha para o Rio e do vagão que está parado no desvio. Note que a linha do Rio está
sendo usada como uma pilha, sendo que o direcionamento de um vagão para o Rio é uma
operação de passar para a pilha, e fazer o vagão que já está na linha do Rio retornar e
enviá-lo para Belo Horizonte é uma operação de tirar da pilha. A ordem das variáveis é a
mesma na notação infixa e na notação polonesa invertida.
Na notação polonesa invertida, eles aparecem na ordem em que serão realmente
executados durante a avaliação da expressão. A Figura 5.22 dá diversos exemplos de
fórmulas infixas e suas equivalentes em notação polonesa invertida.
References
Tanenbaum, A. S., Austin, T., Cossio, M. L. T., Giesen, L. F., Araya, G., Pérez-Cotapos,
M. L. S., VERGARA, R. L., Manca, M., Tohme, R. A., Holmberg, S. D., Bressmann,
T., Lirio, D. R., Román, J. S., Solı́s, R. G., Thakur, S., Rao, S. N., Modelado, E. L.,
La, A. D. E., Durante, C., Tradición, U. N. A., En, M., Espejo, E. L., Fuentes, D. E.
L. A. S., Yucatán, U. A. D., Lenin, C. M., Cian, L. F., Douglas, M. J., Plata, L., and
Héritier, F. (2012). Structured Computer Organization (6th Edition), volume XXXIII.