mvpseudo

mv

pseudo
Assembly RISC-V Referência

lyszt.net aborda mv e outras instruções RISC-V com mais detalhes.

Descrição

mv copia o valor de um registrador para outro. O nome é a abreviação de move. Após a linha abaixo, ambos os registradores contêm o mesmo valor e a origem, t0, permanece inalterada.

mv a0, t0

mv é uma pseudoinstrução. O montador reescreve este nome legível em uma instrução real, mostrada abaixo.

addi rd, rs, 0

Adicionar zero a um valor e armazená-lo em outro lugar faz uma cópia. O RISC-V não tem uma instrução de movimentação dedicada e reutiliza a adição em vez disso.

Registradores diferentes têm funções diferentes, o que é a razão usual para usar mv. Por convenção, os cálculos acontecem nos registradores temporários (t0, t1 e assim por diante). Quando uma função é chamada, seus argumentos vão em registradores específicos (a0, a1 e assim por diante), e os resultados retornam em a0. Um programa, portanto, coloca um mv antes de uma chamada, o que coloca um valor calculado no registrador que o código chamado lê, e um mv após uma chamada, o que salva um resultado retornado em um local seguro.

mv a0, t0
call square
mv s0, a0

Colocar valores nos registradores certos no momento certo é grande parte da programação em assembly, e mv faz isso.

O manual do RISC-V afirma que addi com a constante 0 implementa a pseudoinstrução de montador mv.

Como mv copia o valor, alterar o destino depois deixa a origem inalterada. Isso torna mv útil para manter uma cópia de um valor antes que um loop altere o original. O trace do simulador mostra o addi que é executado no lugar de mv.

Expande para

addi rd, rs, 0

O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.

Exemplo

li t0, 42
mv t1, t0         # t1 = 42