A palavra de instrução do MIPS tem 2 endereços de registradores de 5 bits cada. Como o MIPS consegue endereçar endereços de memória com valor maior que 32 ?
Passo 1
O enunciado pergunta: “Como o MIPS consegue endereçar endereços de memória com valor maior que 32?” (ou seja, maiores do que o número
que aparece relacionado aos bits de endereço de registrador). As informações relevantes dadas ou implícitas no enunciado:
- A instrução MIPS tem campos de endereço de registrador de
bits cada (portanto cada campo pode identificar registradores distintos). - Queremos entender como, mesmo com campos de apenas
bits, o processador acessa endereços de memória cujo valor numérico é bem maior (por exemplo endereços de bits). - Não há figura nem outros dados fornecidos.
Passo 2
Entendimento básico (sem resolver ainda): o campo de
bits nas instruções serve para selecionar qual registrador vai ser usado, não para conter o próprio endereço de memória. Ou seja:
- Cada campo de
bits identifica um registrador do arquivo de registradores (um índice entre e ). - Cada registrador em MIPS é largo
bits (no MIPS32), ou seja guarda um valor de bits que pode ser usado como endereço de memória.
Explicação curta do porquê isso importa: selecionar um registrador combits não limita o tamanho do valor que esse registrador guarda — o registrador pode conter um número de até bits.
Passo 3
Como as instruções load/store formam o endereço efetivo: formato I-type (ex.:
,
) e cálculo do endereço.
- Formato genérico tem campos: opcode (6 bits),
(5 bits), (5 bits), immediate (16 bits). - A fórmula usada para obter o endereço efetivo (EA) é:
onde:
-
é o conteúdo de bits do registrador apontado pelo campo de bits , -
é o valor de bits da instrução estendido para bits com sinal (intervalo a ). - Conclusão: o endereço final é um valor de
bits produzido somando um conteúdo de registrador de bits com um deslocamento de bits. Portanto podemos referenciar endereços grandes se o registrador já contém a parte alta do endereço.
Passo 4
Como colocar um endereço de
bits em um registrador (método prático usado no MIPS): instruções
,
e pseudo-instrução
.
-
(load upper immediate) carrega os bits altos de um registrador e zera os baixos:
- Depois pode-se usar
ou para colocar os bits baixos:
- A pseudo-instrução
(load address) do montador expande para estas instruções quando necessário.
Passo 5
Exemplo concreto passo a passo (para fixar): suponha que queremos acessar o endereço
.
- Carregar os
bits altos em :
- Somar o deslocamento baixo
para formar o endereço completo (duas opções):
- usar
:
- ou manter
e usar o deslocamento imediato da carga:
que implementa
.
3. Observação: o montador pode transformar em
/
automaticamente.
3. Observação: o montador pode transformar
Passo 6
Por que os
bits são suficientes e não limitam o endereço:
- Os
bits apenas escolhem qual dos registradores será usado. O valor do endereço está no registrador (e esse valor tem bits); os campos na instrução não precisam conter o endereço inteiro. - Assim, mesmo endereços muito grandes (até
em MIPS32) são acessíveis porque o conteúdo do registrador fornece os bits altos e o imediato dá os bits baixos ou um pequeno deslocamento.
Passo 7
Nota sobre variações e limites:
- Em MIPS32 o tamanho de palavra e dos registradores é
bits; em MIPS64 os registradores são bits e o mesmo princípio vale com maiores larguras. - O campo immediate de
bits limita o deslocamento direto, mas isso é contornado carregando a base completa no registrador (com / / pseudo-instruções). - Em sistemas com memória maior do que o espaço de endereçamento do ISA, entrariam técnicas de gerenciamento (MMU, segmentos, etc.), mas esse é outro tópico.
Resposta
Porque os
bits selecionam apenas qual registrador (entre
) será usado; o próprio registrador guarda um valor de endereço com largura completa (
bits em MIPS32), e a instrução forma o endereço efetivo somando esse conteúdo de
bits com um imediato de
bits (sign-extended). Para criar endereços de
bits o montador/instruções usam sequências como
+
(ou
+ deslocamento) para carregar a parte alta e baixa do endereço no registrador.