I was practicing converting C code into MIPS assembly language, and am having trouble understanding the usage of move and li in variable assignment.
For example, to implement the following C line in MIPS:
int x = 0;If I understand it correctly (I highly doubt this, though), it looks like both of these work in MIPS assembler:
move $s0, $zero
li $s0, $zeroAm I wrong? What is the difference between these two lines?
1 Answer
The move instruction copies a value from one register to another. The li instruction loads a specific numeric value into that register.
For the specific case of zero, you can use either the constant zero or the zero register to get that:
move $s0, $zero
li $s0, 0There's no register that generates a value other than zero, though, so you'd have to use li if you wanted some other number, like:
li $s0, 12345678 1