user3754212
user3754212

Reputation: 31

How to convert MIPS instructions to machine code?

I'm stuck at converting the below MIPS instruction to machine code

  sb $t3, 40($s2)
  beq $s0, $s1, Lab1
  j Lab1

  jr $s0

So far, I have

101000  10010       01011       101000
000100  10000       10001       0x00400000

How do I go from here? Since 0x00400000 is address not value, I don't think I translate it into binary. And so on... I can't really find an example to go on from here.

Upvotes: 0

Views: 9868

Answers (3)

phuclv
phuclv

Reputation: 41972

The encoding depends on the instruction type.

For relative branch like beq, the immediate is the offset so you need to specify the distance between the current instruction and the branch target. For example to skip next 3 instructions you need beq $s0, $s1, +3 which encodes as

opcode      $s0      $s1                     +3
000100    10000    10001    0000 0000 0000 0011

For absolute jump you need to make sure that the target and the current instruction's high 6 bits are the same. The immediate address is the target's low 26 bits shifted by 2. The j instruction's format is 0000 10ii iiii iiii iiii iiii iiii iiii so j 0x00400000 will be encoded as

0000 1000 0001 0000 0000 0000 0000 0000

You can read more about the encoding in this question as well as the courses here:

The instruction encoding is also available here

But why do you use both conditional branch and jump to Lab1 right beside each other? It's useless because eventually it will jump without doing anything

Upvotes: 1

user3754212
user3754212

Reputation: 31

Ah I think I'm getting a better idea now by looking at MIPS: Calculating BEQ into Hexadecimal Machine Code and Lưu's answer.

  beq $s0, $s1, Lab1
=>000100 10000 10001 0x00400000
=>0001 0010 0001 0001 (0x004000040 + 1 away instruction)
=>0001 0010 0001 0001 0000 0000 0000 0101
=12110001
  j Lab1
=>0000 1000 0001 0000 0000 0000 0000 0000
=08100000
  jr $s0
=>0000 0000 0000 0000 0000 0000 0000 1000
=02000008

So this is what I got. If any error please let me know.

Upvotes: 0

Jason Baker
Jason Baker

Reputation: 2483

Immediate values in MIPS instructions are encoded directly as their binary representations.

Upvotes: 0

Related Questions