Branch instructions
Instruction Condition for branch (2C values)
beq   $rs, $rt, offset #  R[s] == R[t]
bne   $rs, $rt, offset #  R[s] != R[t]
bgtz  $rs, offset #  R[s] > 0
bgez  $rs, offset #  R[s] >= 0
bltz  $rs, offset #  R[s] < 0
blez  $rs, offset #  R[s] <= 0
Semantics: Addr = PC + (IR15)14 :: IR15-0 :: 00 compute branch address
if ( condition ) test condition
    PC <-- Addr true: go to branch address
else
    PC <-- PC + 4 false:  increment PC
Don't use just 16 bits for address: to next instruction
Can assume 00, since all addresses are word-aligned (like "hidden 1")
But, we still don't want to be limited to an 18-bit addresss
How do most branches occur?
To an if or else block
Back to top of loop
Usually not very far from current address (compared to entire 32-bit address range)
Add offset to current PC to get new address (PC relative addressing)
Range PC - 217 to PC + 217 - 4 Why -4?