Onde o resultado de MULT $t0, $t1 é armazenado? Qual instrução extrai o resultado para registradores normais?

Passo 1

O que o enunciado pergunta e o que sabemos:
  • Pergunta 1: Onde o resultado da instrução MULT \$t0,\\ \$t1 é armazenado?
  • Pergunta 2: Qual instrução extrai esse resultado para registradores normais (de uso geral)?
    Informações relevantes que já temos do enunciado: a instrução é a clássica MULT do conjunto de instruções MIPS que multiplica dois registradores de 32 bits.

Passo 2

Entendendo o que a instrução MULT faz (explicação conceitual):
  • Quando se multiplica dois inteiros de 32 bits, o resultado pode precisar de até 64 bits para ser representado sem perda.
  • A instrução MULT em MIPS realiza uma multiplicação inteira (signed) de 32 bits por 32 bits e produz um produto de 64 bits.
  • Em MIPS esse produto de 64 bits NÃO é colocado diretamente em um registrador geral: ele é armazenado em registradores especiais chamados HI e LO. Expliquei isso porque é o ponto central da pergunta.

Passo 3

O que são HI e LO e como eles guardam o resultado (detalhes práticos):
  • HI e LO são dois registradores especiais (cada um com 32 bits) no banco de registradores do processador MIPS.
  • A convenção de armazenamento do produto é:
    • os 32 bits menos significativos (low 32 bits) do produto vão para o registrador LO;
    • os 32 bits mais significativos (high 32 bits) do produto vão para o registrador HI.
  • Em outras palavras: o produto de 64 bits fica distribuído como (HI:LO) — HI guarda a parte alta, LO guarda a parte baixa.

Passo 4

Quais instruções pegam o conteúdo de HI/LO e colocam em registradores normais (a resposta direta com explicação):
  • Para extrair a parte baixa (conteúdo de LO) para um registrador de uso geral usa-se a instrução MFLO. Por exemplo: MFLO \$t2 copia o conteúdo de LO para \$t2.
  • Para extrair a parte alta (conteúdo de HI) usa-se a instrução MFHI. Por exemplo: MFHI \$t3 copia o conteúdo de HI para \$t3.
  • Essas duas são as instruções “move from” que transferem de registradores especiais para registradores gerais.

Passo 5

Exemplo prático passo a passo (para você poder reproduzir na prova):
  • Suponha que antes de multiplicar temos valores em \$t0 e \$t1.
  • Código MIPS típico:
    • MULT \$t0,\\ \$t1 # faz a multiplicação; produto fica em HI e LO
    • MFLO \$t2 # pega os low 32 bits (parte baixa) para \$t2
    • MFHI \$t3 # pega os high 32 bits (parte alta) para \$t3
  • Interpretação: após MFLO e MFHI, \$t2 contém a parte baixa do produto e \$t3 contém a parte alta. Se o produto couber em 32 bits, a parte alta (em HI) será zero (ou sinal estendido dependendo do caso signed), mas normalmente basta usar MFLO se só se quer o resultado truncado para 32 bits.

Passo 6

Observações importantes que costumam cair na prova ou causar dúvidas:
  • MULT é para multiplicação com sinal. Para multiplicação sem sinal usa-se MULTU; o mecanismo de armazenamento (HI/LO) e a extração (MFHI/MFLO) permanecem iguais.
  • Se você só precisa do produto menor (como em muitas operações que ignoram overflow), basta fazer MFLO e usar só a parte baixa. Se precisa do produto completo de 64 bits, precisa usar MFHI e MFLO e tratá-los como duas palavras de 32 bits.
  • Também existem instruções MTHI e MTLO que movem valores de registradores gerais para HI e LO (úteis em rotinas mais baixas ou manipulação de resultados).

Passo 7

Exemplo numérico simples para fixar (mostrando o fluxo):
  • Suponha \$t0 = 2 e \$t1 = 3. Então MULT \$t0,\\ \$t1 produz o produto 6, que em 64 bits é 0x0000000000000006 .
  • LO ficará com 0x00000006 e HI com 0x00000000. Após MFLO \$t2 teremos \$t2 = 6. MFHI \$t3 resultará em \$t3 = 0.
  • Isso mostra como usar MFLO/MFHI para obter os valores em registradores normais.

Resposta

O resultado de MULT \$t0,\\ \$t1 é armazenado nos registradores especiais HI (parte alta) e LO (parte baixa).
As instruções que extraem o resultado para registradores normais são MFLO (para pegar LO) e MFHI (para pegar HI).

Exercícios relacionados