|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Branching |
|
|
|
|
machine code |
|
|
|
branch |
|
|
|
I-type |
|
|
opcode 000 xxx |
|
(xxx = 1, 4, 5, 6, 7) |
|
|
Note that bgez, bltz have same
opcode, but different rt fields |
|
|
|
|
|
Instruction
|
B31-26 |
B25-21 |
B20-16 |
B15-0 |
|
|
|
opcode |
register
s |
register
t |
immediate |
|
|
beq $rt, $rs,
<offset> |
000 100 |
- |
- |
offset |
|
|
bne $rt, $rs,
<offset> |
000 101 |
- |
- |
offset |
|
|
bgtz $rs,
<offset> |
000 111 |
- |
00000 |
offset |
|
|
bgez $rs,
<offset> |
000 001 (REGIMM) |
- |
00001 (BGEZ) |
offset |
|
|
bltz $rs,
<offset> |
000 001 (REGIMM) |
- |
00000 (BLTZ) |
offset |
|
|
blez $rs,
<offset> |
000 110 |
- |
00000 |
offset |
|
|
|
The dashes are 5-bit encoding of
the register number in UB. For example, $r7 is encoded as 00111. The offset is represented in 16-bit 2C. |
|
|
jump |
|
|
jr and jalr are R-type instructions. |
|
|
opcode 000 000, function different |
|
|
note rd is 31 for jalr (optional
second argument can specify reg for return address) |
|
|
|
|
|
Instruction
|
B31-26 |
B25-21 |
B20-16 |
B15-11 |
B10-6 |
B5-0 |
|
|
|
opcode |
register s |
register t |
register d |
shift amount |
function |
|
|
jr $rs |
000 000 (SPECIAL) |
- |
00000 |
00000 |
00000 |
001 000 |
|
|
jalr $rs |
000 000 (SPECIAL) |
- |
00000 |
11111 |
00000 |
100
010 |
|
|
|
|
|
|
both j and jal are J-type instructions. |
|
|
|
|
|
|
|
|
|
Instruction
|
B31-26 |
B25-0 |
|
|
|
|
|
opcode |
target
|
|
|
|
|
j <target> |
000
010 |
- |
|
|
|
|
jal
<target> |
000
011 |
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|