Difference between "move" and "li" in MIPS assembly language

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, $zero

Am 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, 0

There'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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like