Diferença entre "mover" e " li " na linguagem MIPS assembly

eu estava a praticar a conversão do código C em linguagem de montagem MIPS, e estou a ter dificuldade em compreender o uso de move e li na atribuição de variáveis.

por exemplo, para implementar a seguinte linha C em MIPS:

int x = 0;

se bem entendi (duvido muito disso, no entanto), parece que ambos trabalham na montadora MIPS:

move $s0, $zero
li $s0, $zero
Estou errado? Qual é a diferença entre estas duas linhas?

Author: Palec, 2013-11-07

1 answers

A instrução move copia um valor de um registo para outro. A instrução li carrega um valor numérico específico nesse registo.

Para o caso específico de zero, pode usar o zero constante ou o registo zero para obter isso:

move $s0, $zero
li   $s0, 0
No entanto, não há nenhum registo que produza um valor diferente de zero, por isso teria de usar {[[3]} se quisesse outro número, como:
li $s0, 12345678
 55
Author: duskwuff -inactive-, 2013-11-07 03:55:32