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