У меня проблемы с пониманием того, как инструкция jal работает в процессоре MIPS.
Мои два вопроса:
а) Какое значение хранится в R31 после "jal": ПК + 4 или ПК + 8 ?
b) Если это действительно ПК + 8 , что происходит с инструкцией в ПК + 4 ? Это выполнено перед прыжком или никогда не выполняется?
В Паттерсон и Хеннесси (четвертое издание), стр. 113:
"инструкция перехода и ссылки: инструкция, которая переходит на адрес и адрес и одновременно сохраняет адрес следующей инструкции в регистре ( $ ra в MIPS)"
"программный счетчик ( ПК ): регистр, содержащий адрес инструкции в выполняемой программе"
После прочтения этих двух операторов следует, что значение, сохраненное в $ ra , должно быть ( PC + 4 ).
Однако в справочных данных MIPS (зеленая карта), которые прилагаются к книге, алгоритм инструкции jal определяется следующим образом:
"Прыжок и соединение: jal: J: R [31] = ПК + 8; ПК = JumpAddr"
Этот веб-сайт также заявляет, что "это действительно ПК + 8 ", но странным образом после этого он говорит, что, поскольку конвейерная обработка является сложной темой ", мы примем адрес возврата ПК + 4".
Я пришел из сборки 8086, так что я знаю, что есть большая разница между возвратом к адресу и тому, который следует за ним, потому что программы не будут работать, если я просто приму что-то, что не соответствует действительности. Спасибо.