MIPS - Путаница с JAL: $ra = PC+4 или PC+8?

У меня проблемы с пониманием того, как инструкция jal работает в процессоре MIPS.Два моих вопроса:
a) Какое значение хранится в R31 после "jal": PC+4 или PC+8 ?
b) Если это действительно PC+8, что происходит с инструкцией по адресу PC+4? Выполняется ли она перед переходом или никогда не выполняется?

В Patterson and Hennessy (четвертое издание), стр. 113:

«Инструкция перехода и ссылки: инструкция, которая переходит к адресу и одновременно сохраняет адрес следующей инструкции в регистре ($ra в MIPS)"

"счетчик программ (PC): регистр, содержащий адрес инструкции в выполняемой программе"

После прочтения этих двух утверждений следует, что значение, сохраненное в $ra, должно быть (PC+4).

Однако в справочных данных MIPS (зеленая карточка), прилагаемых к книге, алгоритм инструкции jal определяется следующим образом:
«Перейти и связать : jal : J : R[31]=PC+8; PC=JumpAddr"

На этом веб-сайте также говорится, что "это действительно PC+8", но, как ни странно, после этого говорится, что, поскольку конвейерная обработка является сложной темой, "мы предположим, что обратный адрес — PC+4».
Я родом из сборки 8086, поэтому я знаю, что есть большая разница между возвратом на адрес и на следующий за ним, потому что программы не будут работать, если я просто предположу что-то, что не соответствует действительности. Спасибо.

14
задан ReimannCL 3 March 2012 в 18:57
поделиться