Tengo problemas para entender cómo funciona la instrucción jal en el procesador MIPS. Mis dos preguntas son:
a) ¿Cuál es el valor almacenado en R31 después de "jal": PC + 4 o PC + 8?
b) Si es realmente PC + 8, lo que ocurre con la instrucción en PC + 4? ¿Se ejecuta antes del salto o nunca se ejecuta?
En Patterson y Hennessy (cuarta edición), página 113:
"instrucción de salto-y-link: Una instrucción que salta a la dirección y al mismo tiempo guarda la dirección de la siguiente instrucción en un registro ($ ra en MIPS)"
'contador de programa (PC ): el registro que contiene la dirección de la instrucción en el programa en ejecución'
Después de leer estas dos declaraciones, se deduce que el valor sa ved en $ ra debe ser (PC + 4).
Sin embargo, en los datos de referencia MIPS (tarjeta verde) que viene con el libro, el algoritmo de la instrucción jal se define así:
"Jump y Link: jal: J: R [31] = PC + 8 , PC = JumpAddr "
Este website también afirma que 'es realmente PC + 8', pero extrañamente, después de que se dice que, dado que la canalización es un tema avanzado" vamos a asumir la dirección de retorno es PC +4 ".
Vengo del ensamblado 8086, así que soy consciente de que hay una gran diferencia entre volver a una dirección y la siguiente, porque los programas no funcionarán si asumo algo que no es cierto. Gracias.
¡Muchas gracias! Curiosamente, muchos sitios web presentan información incorrecta (PC + 4). – ReimannCL