I'm given a MIPS instruction:
top:
lw $t1, ($t0)
beq $s0, $0, end
jal func
add $s0, $s0, $t0
addi $s0, $s0, -1
j top
bne $s0, $0, top
end:
func:
sll $v0, $t1, 4
jr $ra
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.
Opcode:
0000 11Remaining 26 bits:
Bits 2-27 of the address of labelExplanation:
The machine language equivalent that you know so far is:
xrepresents 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 labelfunc. If you know the address of any of the instructions above, adding 4 to it for every instruction can give you the address offunclabel.Lets say the address of
funcis0x12345678(binary: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" offuncbecomes:0001 0010 0011 0100 0101 0110 0111 10--2.Now we need to fit 30-bits of
funcaddress 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 thePC. Hence, our new "address" offuncbecomes:---- 0010 0011 0100 0101 0110 0111 10--These 26-bits of the address of
funcmake 32-bit Machine Language ofjalbecome: