# Converting Mips to binary

18
Hey Guys!!!! Thank you for checking out my Thread.... I am taking a computer assembly class and i have homework due on Wed but i am stuck on a single problem. I have to convert MIPS instructions into binary, I want to learn how to do this because it will be on a test... and i could just go into mars and assemble the code and read it from there but i wanna know how to do it..... okay soo the instructions are:
addi $sp,$sp, -8
sw $ra, 4($sp)

Now from looking into my book i see that addi has an Opcode of 001000 and it has a I instruction format...
Also sw has an Opcode of 101011 and is an I instruction format

How do i figure out what registers $sp?,$ra, the array 4($sp) are in binary? Please help... i would really appreciate it! 2. ### Mark44 ### Staff: Mentor See http://en.wikipedia.org/wiki/MIPS_architecture, in the section titled Compiler register usage.$sp is the stack pointer, and its value in MIPS instructions is $29.$ra is return address; its value is $31. 4($sp) would be an address on the stack - $sp + 4*(size of a machine word). Here's another link to a site that lists the instructions and what they look like in binary - http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html. For your ADDI instruction, the constant to be added is -8, which will need to be written in two's complement form. 3. ### basketball853 18 Thank you for your reply... i have already checked those sites out... but they have not helped me at all.... So how do i go about converting it into binary code? i think i am missing the simple concept... So i take Addi for instance and use its opcode... okay cool got that done but what about the registers? all it says on that web site is: Used to add sign-extended constants (and also to copy one register to another: addi$1, $2, 0), executes a trap on overflow 001000ss sssttttt CCCCCCCC CCCCCCCC what the hell does that mean lol 4. ### Mark44 ### Staff: Mentor This -001000ss sssttttt CCCCCCCC CCCCCCCC - shows how the instruction op code and registers and operands are encoded to make up an ADDI instruction. First 6 bits - the instruction opcode (001000 for ADDI) Next 5 bits - the source ($2 in your example)
Next 5 bits - the destination ($1 in your example) Next 16 bits - the immediate value ADDI effectively does this$t = $s + imm. value So if you wanted to add 5 plus the value in$t1 to $t2, the MIPS assembly instruction would be: ADDI$t2, $t1, 5 Note that the numbers associated with$t0 and $t1 are 8 and 9. The binary form of this instuction would be Code (Text): 001000 01001 01000 0000000000000101 opcode ......|$t1..|

### Staff: Mentor

Are you asking about ADDI $sp,$sp, -8?

What do you mean "but for the other $sp register is it defaulted at 0" 7. ### basketball853 18 Yes i am addi$sp, $sp, -8 would that in the end turn to be (opcode) 001000 (default 0 for$sp) 00000 (default 0 for $sp) 00000 1111111111110111 (-8) 8. ### Mark44 ### Staff: Mentor 0 is not the number for$sp, so the parts with 00000 and 00000 are not right. This link - http://en.wikipedia.org/wiki/MIPS_architecture- tells you the numbers of all the registers. I also told you what it was in post #2.

18
oohhh i think i may understand.... so the value of $sp ( the stack pointer) is$29 sooo
it would be

001000 11101 11101 111111111111011
opcode $sp$sp -8 constant

did i correctly get the value?

### Staff: Mentor

Looks good!

18
okay SWEET!!! soo and for the other one i got