Explique a instrução MIPS abaixo:
BEQ $t0, $t1, 20
Passo 1
O enunciado dá a instrução MIPS
BEQ \$t0, \$t1, 20. Ou seja:- A instrução é
BEQ(branch if equal). - Os registradores comparados são
e . - O campo imediato é
(um valor inteiro de 16 bits fornecido no encodamento).
O que se pede: explicar o que essa instrução faz, como o offset
é interpretado e como a instrução é codificada/execultada na arquitetura MIPS.
Passo 2
O significado funcional da instrução: e
. Se os valores forem iguais, o fluxo de execução salta para um endereço calculado a partir do campo e .
Importante: a comparação é uma igualdade bit-a-bit entre os conteúdos de e
— não há flags de sinal nem comparação separada para signed/unsigned.
BEQ rs, rt, offset faz a comparação entre os conteúdos dos registradores
offset; se não forem iguais, a execução continua na instrução seguinte. No nosso caso, rs é
rt é
Importante: a comparação é uma igualdade bit-a-bit entre os conteúdos de
Passo 3
Formato da instrução (tipo I):
- Campos e tamanhos:
opcode(6 bits) |rs(5 bits) |rt(5 bits) |immediate(16 bits). - Para
BEQoopcodeé binário000100(decimal). - Nos registradores de propósito geral MIPS:
é o registro número e é o registro número . Então rs = 8ert = 9.
Passo 4
Como o campo imediato é interpretado:
- O
immediateé um inteiro debits com sinal (sign-extended). - Ele representa um deslocamento em palavras (ou seja, número de instruções), não em bytes. Na formação do endereço final o hardware faz um deslocamento de 2 bits à esquerda (multiplica por
) para transformar palavras em bytes. - Fórmula padrão do destino do salto:
Aqui
é o endereço da instrução é o endereço da próxima instrução sequencial.
BEQ atual;
Passo 5
Aplicando ao nosso offset
:
- Primeiro converte-se
(decimal) em deslocamento de bytes: bytes. Isto é o resultado do . - Então o destino do salto é
Exemplo numérico: se a instrução , então o destino será
BEQ estiver em
Passo 6
Comportamento em tempo de execução:
- Se
: o próximo contador de programa (PC) será carregado com o valor , ou seja salta para bytes. - Se
: o PC continua com (executa a instrução seguinte). - Observação de pipeline (conceito importante para provas): em implementações clássicas MIPS existe um branch delay slot — a instrução imediatamente seguinte à
BEQ(a que está em) é executada sempre, independentemente de o salto ser tomado ou não. Em MIPS modernos esse comportamento pode ser mascarado pelo hardware, mas em muitos exercícios e códigos de baixo nível deve-se assumir a existência do delay slot.
Passo 7
Codificação em máquina (32 bits) — cálculo:
- Usando a fórmula de encodamento:
- Substituindo:
, , , , obtemos em hex
Em binário (dividido por campos):
ou seja
000100 01000 01001 0000 0000 0001 0100.Passo 8
Resumo em pseudocódigo (para usar em prova ou entender rápido):
Lembrete prático: o offset
desloca em instruções, não em bytes — por isso multiplica-se por
ao obter o endereço em bytes.
Resposta
Salta para
bytes se
; caso contrário continua em
. A instrução é do tipo I com opcode
, registradores
8 e
9, e codificação máquina
.