c assembly mips

Diferencia entre “mover” y “li” en lenguaje ensamblador MIPS



assembly (1)

Estaba practicando la conversión de código C al lenguaje ensamblador MIPS, y tengo problemas para entender el uso de move y li en la asignación de variables.

Por ejemplo, para implementar la siguiente línea C en MIPS:

int x = 0;

Si lo entiendo correctamente (aunque lo dudo mucho), parece que ambos de estos trabajos en el ensamblador MIPS:

move $s0, $zero li $s0, $zero

¿Me equivoco? ¿Cuál es la diferencia entre estas dos líneas?


La instrucción de move copia un valor de un registro a otro. La instrucción li carga un valor numérico específico en ese registro.

Para el caso específico de cero, puede usar la constante cero o el registro cero para obtener eso:

move $s0, $zero li $s0, 0

Sin embargo, no hay un registro que genere un valor distinto de cero, por lo que tendrías que usar li si quisieras algún otro número, como:

li $s0, 12345678