Jump to content

Регистрация ссылок

Регистр связи (сокращенно LR) — это регистр , в котором хранится адрес, к которому необходимо вернуться после завершения вызова подпрограммы . Это более эффективно, чем более традиционная схема хранения адресов возврата в стеке вызовов , иногда называемом машинным стеком. Регистр связи не требует записи и чтения памяти, содержащей стек, что может сэкономить значительный процент времени выполнения при повторных вызовах небольших подпрограмм.

Архитектура IBM POWER и ее преемники PowerPC и Power ISA имеют специальный регистр связи, в который инструкции вызова подпрограмм помещают обратный адрес. В некоторых других наборах команд, таких как архитектуры ARM , SPARC и OpenRISC , инструкции вызова подпрограмм помещают адрес возврата в определенный регистр общего назначения , так что этот регистр обозначается архитектурой набора команд как регистр связи. В некоторых других, таких как PA-RISC , RISC-V , IBM System/360 и его преемниках, включая z/Architecture , инструкция вызова подпрограммы может сохранять адрес возврата в любом регистре общего назначения; по соглашению обычно выбирается конкретный регистр для использования в качестве регистра связи.

В архитектуре ARMv7 в качестве регистра связи используется регистр общего назначения R14. [1] [2] OpenRISC использует регистр r9, [3] и SPARC использует «выходной регистр 7» или o7 . [4]

Некоторые архитектуры имеют два регистра связи: стандартный «регистр связи ветвления» для большинства вызовов подпрограмм и специальный «регистр связи прерываний» для прерываний. Одним из них является ARCv2 ( процессоры ARC, использующие версию 2 архитектуры ARCompact), в котором используются регистры общего назначения r29 для регистра связи прерываний и r31 для регистра связи ветвления. [5] [6] Ссылки на «реестр ссылок» на таких платформах будут относиться к реестру ссылок филиалов.

Более ранние процессоры ARC на базе архитектур ARCompact и ARCtangent имели три регистра связи: два регистра связи прерываний (ILINK) и один регистр связи ветвления (BLINK). [5] [7] [8] [9] Двумя регистрами связи прерываний были ILINK1 (для маскируемых прерываний уровня 1 (низкий приоритет)) и ILINK2 (для маскируемых прерываний уровня 2 (средний приоритет)). В этих архитектурах r29 использовался как регистр канала прерывания уровня 1, r30 как регистр канала прерывания уровня 2 и r31 как регистр канала ветвления. ILINK1 и ILINK2 не были доступны в пользовательском режиме на процессорах ARC 700. [7]

Использование регистра связи, независимо от того, является ли он специализированным регистром или регистром общего назначения, позволяет быстрее вызывать конечные подпрограммы . Когда подпрограмма не является конечной, передача адреса возврата в регистр все равно может привести к созданию более эффективного кода для thunks , например, для подпрограммы, единственной целью которой является вызов другой подпрограммы с каким-либо образом переставленными аргументами. Другие подпрограммы могут извлечь выгоду из использования регистра связи, поскольку он может быть сохранен в пакете с другими регистрами, используемыми вызываемой стороной — например, подпрограмма ARM помещает регистры 4–7 вместе с регистром связи LR с помощью одной инструкции. STMDB SP!, {R4-R7, LR} конвейерная обработка всех необходимых операций записи в память.

  1. ^ «Справочное руководство по архитектуре ARMv7-M» . РУКА . Проверено 24 августа 2022 г.
  2. ^ «Справочное руководство по архитектуре ARMv7-A и ARMv7-R; Arm Holdings» . Arm.com . Проверено 24 августа 2022 г.
  3. ^ «Использование как, раздел 9.33.1.2 (Зависимые функции OPENRISC/имена регистров)» . Проверено 25 августа 2022 г.
  4. ^ «Дополнение к приложениям RTEMS SPARC» (PDF) . Май 2000 г. Архивировано из оригинала (PDF) 8 января 2019 г. . Проверено 19 апреля 2013 г.
  5. ^ Jump up to: а б «Использование as, раздел 9.3.2.2 (зависимые от ARC функции/синтаксис/имена регистров)» . Проверено 25 августа 2022 г.
  6. ^ «Дополнение ABI к ARC Synopsys DesignWare ARCv2 System V» (PDF) . Архивировано (PDF) из оригинала 25 августа 2022 года . Проверено 25 августа 2022 г.
  7. ^ Jump up to: а б «Справочник программиста по архитектуре набора команд ARCompact» (PDF) . Апрель 2008 г. Архивировано (PDF) из оригинала 9 июня 2022 г. Проверено 25 августа 2022 г.
  8. ^ «Справочник программиста ARCtangent-A4» (PDF) . Август 2002 г. Архивировано (PDF) из оригинала 8 марта 2022 г. Проверено 25 августа 2022 г.
  9. ^ «Лаутербах» . Архивировано из оригинала 1 мая 2016 года . Проверено 25 августа 2022 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d09a538021431aa4c846b60a6ac9c48d__1721981880
URL1:https://arc.ask3.ru/arc/aa/d0/8d/d09a538021431aa4c846b60a6ac9c48d.html
Заголовок, (Title) документа по адресу, URL1:
Link register - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)