I'm given a MIPS instruction:
lw $t1, ($t0)
beq $s0, $0, end
add $s0, $s0, $t0
addi $s0, $s0, -1
bne $s0, $0, top
sll $v0, $t1, 4
and am told to convert each line to the "instruction in hex." What I am having a problem with is the
jal instruction. I understand it is a Pseudodirect address, what I don't understand it how to write it out as asked.
Given the OPCode for a
jal instruction is
3hex, the first 6 bits in the J-Type instruction format would be
000011, how do I figure out the remaining?
I understand how to complete this task for R-Type and I-Type instruction formats but cant figure this one out.
Any help is appreciate.
Best How To :
Remaining 26 bits:
Bits 2-27 of the address of label
The machine language equivalent that you know so far is:
0000 11xx xxxx xxxx xxxx xxxx xxxx xxxx
x represents not-known-at-this-point.
To find 32-bit Machine Language representation of
jal func, first thing you'd need is the memory address of the label
func. If you know the address of any of the instructions above, adding 4 to it for every instruction can give you the address of
Lets say the address of
0001 0010 0011 0100 0101 0110 0111 1000)
This address is 32-bits while you only have 26 bits to fit in.
To deal with this, you would do two things:
1.Since this address will always be a multiple of four, the last two bits are always
00. Therefore, we do not need to include them. Hence, our new "address" of
0001 0010 0011 0100 0101 0110 0111 10--
2.Now we need to fit 30-bits of
func address in 26-bits since 6-bits are occupied by the opcode. To do this, we ignore the 4 most significant bits. Machine takes these 4-bits from the
PC. Hence, our new "address" of
---- 0010 0011 0100 0101 0110 0111 10--
These 26-bits of the address of
func make 32-bit Machine Language of
0000 1100 1000 1101 0001 0101 1001 1110