Defina resumidamente:
endereçamento imediato
endereçamento direto
endereçamento indireto
endereçamento de registrador
indireto por registradores.
endereçamento por deslocamento.
endereçamento relativo
endereçamento imediato
endereçamento direto
endereçamento indireto
endereçamento de registrador
indireto por registradores.
endereçamento por deslocamento.
endereçamento relativo
Passo 1
Você pediu definições resumidas de 7 modos de endereçamento: endereçamento imediato, direto, indireto, de registrador, indireto por registradores, por deslocamento e relativo. O que devo entregar: uma explicação passo a passo para cada modo (para você entender na prova) e, ao final, respostas curtas e objetivas (uma linha cada) com as definições pedidas. Não vou pedir nada a você — sigo com as explicações e exemplos.
Passo 2
Antes de começar, vamos combinar a linguagem básica para você não se perder: o que é “modo de endereçamento” e o que significa “endereço efetivo”.
- Uma instrução típica tem um código de operação (opcode) e um campo que indica onde está o operando (o que a instrução vai usar). O “modo de endereçamento” diz como interpretar esse campo.
- “Operando” = dado usado pela instrução (um número, ou o conteúdo de memória, ou um registrador).
- “Endereço efetivo” (EA) = o endereço de memória onde está o operando real (se o operando estiver em memória). Nem sempre precisamos de EA (por exemplo, se o operando já é o valor imediato).
Exemplo comum de instrução: LOAD, que carrega em o valor indicado por — a diferença entre os modos é o que exatamente representa (um valor, um endereço, um ponteiro, um registrador, etc.). Agora vamos a cada modo com calma.
Passo 3
O que é: o campo da instrução contém o próprio valor que será usado como operando — não é endereço, é dado imediato.
Exemplo de sintaxe: LOAD (aqui
indica o valor imediato
).
Como funciona passo a passo:
Exemplo de sintaxe: LOAD
Como funciona passo a passo:
- A CPU lê a instrução.
- Interpreta o campo como o valor
. - Coloca
em .
Prós e contras:
- Vantagem: é rápido (nenhuma leitura adicional de memória).
- Desvantagem: o tamanho do campo na instrução limita o tamanho do valor imediato e não serve para modificar valores na memória (só insere constantes).
Dica de prova: reconheça pela presença do símbolo que indica imediato (, ou sintaxe sem parênteses) e porque o campo é o próprio valor.
Passo 4
O que é: o campo da instrução contém um endereço de memória onde está o operando. O EA é exatamente o valor do campo.
Exemplo: LOAD significa "carregue em
o conteúdo de memória no endereço
".
Como funciona passo a passo:
Exemplo: LOAD
Como funciona passo a passo:
- CPU lê o campo e toma
como EA. - Lê memória em
e copia o conteúdo para .
Prós e contras:
- Simples de entender e codificar.
- Ineficiente para tabelas/arrays porque cada elemento precisa de um endereço completo na instrução.
Dica de prova: se o operando aparece como um número sem símbolos extras e é tratado como endereço, é endereçamento direto.
Passo 5
O que é: o campo da instrução contém um endereço que, por sua vez, guarda o endereço efetivo — ou seja, há um nível extra de indireção (como um ponteiro).
Exemplo de sintaxe: LOAD . Aqui o parêntese indica que em memória no endereço
está guardado outro endereço, digamos
; o dado real vem de memória em
.
Como funciona passo a passo:
Exemplo de sintaxe: LOAD
Como funciona passo a passo:
- Leia o campo: obtenha
. - Acesse memória em
e recupere o valor contido ali (por exemplo ). - Use
como EA e leia memória em para obter o operando.
Quando usar: quando a instrução precisa seguir um ponteiro (listas, tabelas de ponteiros). Cuidado na prova: verifique se há dois acessos à memória (um para obter o ponteiro, outro para obter o dado).
Passo 6
O que é: o operando está em um registrador; o campo da instrução identifica qual registrador.
Exemplo: MOV ou ADD
— aqui o conteúdo de
é usado diretamente.
Como funciona passo a passo:
Exemplo: MOV
Como funciona passo a passo:
- A instrução especifica o número do registrador (por exemplo
). - O valor contido em
é lido e usado (sem acessar memória).
Prós e contras:
- Muito rápido (registradores são rápidos).
- Número de registradores é limitado; algoritmo pode precisar mover dados para/da memória.
Dica de prova: se a operand field referencia um registrador (normalmente por nome ou número) e não há parênteses/hashtags, é registrador direto.
Passo 7
O que é: parecido com indireto em memória, mas o “ponteiro” está num registrador: o campo indica um registrador que contém o endereço efetivo.
Exemplo: LOAD significa: pegue o conteúdo de
(por exemplo
), use isso como EA e leia memória em
.
Como funciona passo a passo:
Exemplo: LOAD
Como funciona passo a passo:
- Leia o registrador
; ele contém um endereço . - Acesse memória em
e copie o dado para .
Vantagem: menos acessos à memória para obter o ponteiro (já está no registrador), útil para percorrer vetores, listas usando ponteiros mantidos em registradores.
Passo 8
O que é: a instrução fornece um deslocamento (offset) e indica um registrador base; o EA é a soma do conteúdo do registrador base com o deslocamento.
Exemplo de sintaxe clássica: LOAD . Se
contém
, então EA =
e o dado vem de memória em
.
Como funciona passo a passo:
Exemplo de sintaxe clássica: LOAD
Como funciona passo a passo:
- Leia o deslocamento imediato (por exemplo
) e o registrador base . - Calcule EA = conteúdo(
) + deslocamento. - Leia memória em EA e carregue o dado.
Por que serve: é perfeito para endereçar elementos de arrays e campos de estruturas. Em provas, pratique somas pequenas à mão (ex.: see deslocamento , EA ).
Passo 9
O que é: o endereço efetivo é calculado em relação ao contador de programa (
) — tipicamente usado para saltos (branches) e chamadas relativas ao código atual.
Exemplo: em uma instrução de salto, você pode ter BEQ . O EA do salto é EA =
(onde
normalmente já aponta para a próxima instrução).
Como funciona passo a passo:
Exemplo: em uma instrução de salto, você pode ter BEQ
Como funciona passo a passo:
- Leia o offset (geralmente um número pequeno, pode ser com sinal).
- Some ao
(ou ao da próxima instrução, dependendo da arquitetura) para obter o destino. - Salte para esse destino se a condição for satisfeita.
Vantagens: permite código position-independent e offsets pequenos economizam bits na instrução. Em provas, verifique se o offset é relativo ao PC atual ou ao PC+4 (varia por arquitetura).
Passo 10
- Identifique pelo símbolo:
ou “immediate” → imediato; parênteses em endereço → indireto; parênteses em registrador → registrador indireto; sintaxe → deslocamento; ausência de parênteses e sem → direto ou registrador direto conforme o campo. - Exemplos rápidos (relações sintáticas):
- Imediato: LOAD
→ carrega valor . - Direto: LOAD
→ carrega memória[ ]. - Indireto: LOAD
→ pega endereço em memória[ ], depois lê dali. - Registrador: MOV
→ copia conteúdo de . - Registrador indireto: LOAD
→ contém endereço. - Deslocamento: LOAD
→ EA = . - Relativo: BRANCH
→ destino = .
Força aí — você já sabe o que olhar no enunciado para identificar cada modo. Agora a resposta curta e direta.
- Imediato: LOAD
Resposta
Endereçamento imediato: o campo da instrução contém o próprio valor do operando (ex.: LOAD
carrega o valor
).
Endereçamento direto: o campo da instrução contém o endereço de memória onde está o operando (ex.: LOAD lê memória[
]).
Endereçamento indireto: o campo contém um endereço que aponta para outra célula que guarda o endereço efetivo; há um nível adicional de indireção (ex.: LOAD ).
Endereçamento de registrador: o operando está no próprio registrador indicado pela instrução (ex.: MOV usa o conteúdo de
).
Indireto por registradores: a instrução indica um registrador cujo conteúdo é um endereço em memória; a CPU usa esse endereço para acessar o operando (ex.: LOAD ).
Endereçamento por deslocamento: o EA é a soma do conteúdo de um registrador base com um deslocamento imediato (ex.: LOAD com EA = conteúdo(
) +
).
Endereçamento relativo: o EA é calculado somando um offset ao contador de programa ( ); muito usado em saltos (ex.: destino =
).
Endereçamento direto: o campo da instrução contém o endereço de memória onde está o operando (ex.: LOAD
Endereçamento indireto: o campo contém um endereço que aponta para outra célula que guarda o endereço efetivo; há um nível adicional de indireção (ex.: LOAD
Endereçamento de registrador: o operando está no próprio registrador indicado pela instrução (ex.: MOV
Indireto por registradores: a instrução indica um registrador cujo conteúdo é um endereço em memória; a CPU usa esse endereço para acessar o operando (ex.: LOAD
Endereçamento por deslocamento: o EA é a soma do conteúdo de um registrador base com um deslocamento imediato (ex.: LOAD
Endereçamento relativo: o EA é calculado somando um offset ao contador de programa (