2014-01-31 6 views
1

В чем разница между Call и JMPL в SPARC? Я знаю, что обе команды могут использоваться для выполнения вызовов функций.Звонок против JMPL в SPARC

Я также хочу знать, как влияет механизм возврата в зависимости от выбора Call или JMPL. Я знаю, что если мы используем JMPL, мы должны использовать инструкцию RETURN для возврата из вызова функции, но я не знаю соответствующей инструкции для команды Call.

+0

Я не знаю, как все работает под SPARC или под вашим компилятором (что является вашим компилятором?), Но обычно язык 'assembly' не заботится и не определяет соглашение о вызове, которое определенная обычно определяется на других языках, таких как C или C++ (с точки зрения ABI). – user2485710

+0

Я считаю, что язык ассемблера должен определять механизм вызова, посредством которого пользователь может вызвать функцию, а затем вернуться в место, где вызывается функция. – user3185252

ответ

0

CALL принимает только относительный адрес (метку) и автоматически сохраняет текущий PC (позже используемый для расчета обратного адреса) в %o7. JMPL, с другой стороны, принимает только абсолютный адрес в регистре и может хранить текущий PC в произвольном регистре.

Соглашение о вызове функции в обоих случаях одинаково. CALL более удобен для меток и JMPL для указателей функций. Последний может использоваться для эмуляции первого путем загрузки адреса адреса в регистр первым.

Что касается возвращения, как RET и RETL синтетические инструкции, которые будут превращены в JMPL ассемблере, используя правильный обратный регистр: RET становится JMPL %i7+8,%g0 и RETL становится JMPL %o7+8,%g0. RET предполагает, что вы создали новое окно регистрации (таким образом, исходный %o7 теперь %i7), и вы должны следовать ему с инструкцией RESTORE в слоте задержки.

Update: RETURN инструкция по-видимому, был введен в Sparc v9, и сочетает в себе JMPL (имеющий второй операнд %g0) и RESTORE (без операндов). Таким образом, его можно удобно использовать для завершения нелистовой функции, где вы обычно используете пару RET; RESTORE.

+0

Как вы упомянули, 'RET' и' RETL' будут преобразованы в инструкцию 'JMPL' ассемблером. Мне интересно, какова роль команды «RETURN» («RETURN» - настоящая инструкция SPARC, а не псевдо-инструкция, введенная ассемблером). Когда и где используется инструкция «RETURN»? Использует ли ассемблер команду «RETURN» для реализации механизма возврата вызова функции? @Jester – user3185252

+0

@ user3185252 Я просто проходил мимо, и мне довелось открыть руководство SPARCv9 на точной странице, сказав следующее: «Команда RETURN используется для возврата из обработчика ловушки, выполняющегося в непривилегированном режиме. RETURN объединяет в себе управляющий элемент управления, передаваемые характеристики команды JMPL с r [0], заданные в качестве регистра назначения, и семантика регистра-окна инструкции RESTORE. " Я не уверен, что это помогает, но мне все равно, чтобы копать глубже. Чао. Прежде всего, он сводит 2 инструкции к одному, что помогает именно пространству. – bazz

 Смежные вопросы

  • Нет связанных вопросов^_^