No sé si el instruction set de MIPS
aquí es del todo correcto, pero te dan 26 bits para poner direcciones.
Esto creo que estará claramente mal, pero cada instrucción ocupa un determinado tamaño en tu memoria, y como es un procesador RISC, todas las instrucciones tienen el mismo tamaño, así que nada de VLIWs o cosas maravillosamente extrañas, estará de la siguiente manera:
0x0040000 __start: lw $4, 8($10)
0x0040004 bne $4, $5, distinto
0x0040008 sub $4, $4, $5
0x0040012 j salida
0x0040016 distinto: add $4 4 $5
0x0040020 salida: addi $5, $5, 1
Si no me he equivocado en el tamaño de cada instrucción, salida debería ser 0x0040020. La operación que hace j es:
PC = nPC; nPC = (PC & 0xf0000000) | (target << 2);
Por cierto, mírate este enlace
Jump instruction in MIPS Assembly.
Un pequeño detalle, ¿es que hay foro de programadores en EOL? ¿Y desde cuando, si es así?