O estágio WB não é usado por todas as instruções. Dê um exemplo de instrução que usa e um que não usa o WB.

Passo 1

O que o enunciado pede: dar um exemplo de uma instrução que usa o estágio Write Back (WB) e um exemplo de uma instrução que não usa o estágio WB.
Dados relevantes (implícitos no enunciado): o contexto é uma pipeline típica de CPU (por exemplo a pipeline de 5 estágios usada em MIPS): IF, ID, EX, MEM, WB. Não foi pedido um exame teórico completo da pipeline, apenas exemplos com explicação.

Passo 2

O que é o estágio WB (Write Back)? Explanação curta e didática:
  • O estágio WB é o estágio final da pipeline onde um resultado produzido pela instrução é escrito de volta no banco de registradores da CPU.
  • Em palavras simples: se a instrução gera um valor que deve ficar guardado em um registrador (por exemplo soma, carga de memória, retorno de chamada), esse valor chega ao estágio WB e lá é escrito no registrador destino.
  • Regra prática que vamos usar: “uma instrução usa WB se ela precisa escrever um valor no banco de registradores ao final da sua execução”.

Passo 3

Resumo das classes de instruções e se normalmente usam WB (intuição prática):
  • Instruções aritméticas que escrevem resultado em registrador (ex.: add, sub, addi): usam WB.
  • Instruções de LOAD (ex.: lw): usam WB — elas carregam um dado da memória para um registrador.
  • Instruções de STORE (ex.: sw): NÃO usam WB — elas escrevem na memória, não no registrador.
  • Instruções de desvio/branch (ex.: beq, bne) e jump (ex.: j) normalmente NÃO usam WB; exceções: instruções de salto que também gravam um endereço de retorno (ex.: jal) usam WB porque escrevem em um registrador ( \$ra).
    Essa classificação segue a regra prática do passo anterior.

Passo 4

Exemplo que usa WB — escolha e por quê:
Escolha: a instrução add \$t_0,\\ \$t_1,\\ \$t_2.
Por que usa WB (passo a passo no pipeline, explicando cada estágio de forma bem didática):
  • IF (Instruction Fetch): a instrução add é buscada da memória de instruções.
  • ID (Instruction Decode / Register Read): decodifica-se que é uma operação R-type e leem-se os valores dos registradores \$t_1 e \$t_2. Aqui identifica-se também o registrador destino \$t_0.
  • EX (Execute): a ALU faz a soma dos valores lidos de \$t_1 e \$t_2 e produz o resultado (por exemplo R = \text{valor}(\$t_1) + \text{valor}(\$t_2)).
  • MEM (Memory): para uma add típica não há acesso relevante à memória (passa sem alteração).
  • WB (Write Back): o resultado R produzido pela ALU é escrito no registrador destino \$t_0. Esse é exatamente o propósito do estágio WB: colocar o resultado no banco de registradores.
    Resumo em uma linha: add \$t_0,\\ \$t_1,\\ \$t_2 usa WB porque o resultado precisa ser escrito em \$t_0.

Passo 5

Exemplo que não usa WB — escolha e por quê:
Escolha: a instrução sw \$t_0,\\\ 0(\$t_1) (store word).
Por que NÃO usa WB (passo a passo simplificado):
  • IF: busca da instrução sw.
  • ID: decodifica e lê o registrador base \$t_1 e o registrador fonte \$t_0 (o dado a ser armazenado).
  • EX: calcula o endereço de memória efetivo (por exemplo A = \text{valor}(\$t_1) + 0).
  • MEM: escreve o conteúdo de \$t_0 no endereço A da memória (operação de store).
  • WB: não há nenhum resultado para escrever no banco de registradores — a instrução já cumpriu seu efeito escrevendo na memória — portanto não ocorre escrita em registradores no estágio WB. Em implementações simples, pode-se dizer que a etapa WB é “nula” para essa instrução.
    Resumo em uma linha: sw \$t_0,\\\ 0(\$t_1) não usa WB porque seu efeito é escrever na memória, não no banco de registradores.

Passo 6

Observações úteis para a prova (dicas práticas e memorização):
  • Regra rápida: “escreve em registrador → usa WB; caso contrário → não usa WB”. Isso resolve a maioria dos casos.
  • Exemplos rápidos de memória mental: add, sub, addi, andi, lw, jal → usam WB; sw, beq, bne, j → geralmente não usam WB (exceto jal que escreve \$ra).
  • Se a questão pedir justificar, descreva brevemente o fluxo IF→ID→EX→MEM→WB e identifique em qual estágio ocorre a escrita no registrador (se houver).

Resposta

add \$t_0,\\ \$t_1,\\ \$t_2 (usa WB)
sw \$t_0,\\\ 0(\$t_1) (não usa WB)

Exercícios relacionados