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