Почему в MIPS нет инструкции RET, а в x86 есть инструкция RET? - PullRequest
0 голосов
/ 10 апреля 2019

Почему подпрограммы MIPS возвращаются на jr, а x86 возвращается с помощью ret?

Почему в MIPS нет инструкции ret?

В качестве альтернативы, почему нетx86 использовать jr?

1 Ответ

3 голосов
/ 10 апреля 2019

В x86 инструкция вызова помещает адрес возврата в память в стек.В MIPS инструкция вызова (jal) помещает адрес возврата в регистр.

В x86 инструкция ret удаляет адрес возврата из стека и переходит на него.Философия MIPS не объединяет отдельные шаги в одну инструкцию.Это значительно упрощает набор инструкций.Удаление значения из стека и выполнение ветви - это отдельные операции, требующие отдельных инструкций.В частном случае вызова / возврата также имеет то преимущество, что в конечной функции нет необходимости записывать адрес возврата в память вообще.

X86 имеет эквивалент инструкции jr, jmp r/m32 с указанием пункта назначения в качестве регистра.Эта инструкция обычно не используется для возврата функции, потому что тогда для извлечения адреса возврата из стека в регистр потребуется отдельная инструкция (но я написал код, который делает именно это при особых обстоятельствах).

...