Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Байланыс тіркелімі (қысқаша LR) – субпрограмма шақырылымы аяқталғанда қайтаруға арналған мекенжайды сақтайтын тіркелім. Бұл, қайтару мекенжайларын шақыру стегінде сақтаудың дәстүрлі схемасынан тиімдірек, кейде оны машина стегі деп атайды. Байланыс тіркелімі стекті сақтайтын жадқа жазу және оқу операцияларын қажет етпейді, бұл кішкентай ішкі бағдарламаларды көп рет шақыру кезінде орындалу уақытының айтарлықтай бөлігін үнемдеуге мүмкіндік береді. IBM POWER архитектурасы және оның PowerPC және Power ISA мұрагерлері арнайы байланыс тіркеліміне ие, оған қосалқы бағдарлама шақыру нұсқаулары қайтару мекенжайын жазады. Басқа кейбір нұсқаулар жиынтықтарында, мысалы ARM архитектурасында, SPARC және OpenRISC, қосалқы бағдарлама шақыру нұсқаулары қайтару мекенжайын белгілі бір жалпы мақсаттағы тіркелімге жазады, сондықтан бұл тіркелім нұсқаулар жиынтығы архитектурасымен байланыс тіркелімі ретінде белгіленеді. PA RISC, RISC V және IBM System/360 және оның мұрагерлері, соның ішінде z/Architecture сияқты басқаларында, қосалқы бағдарлама шақыру нұсқаулығы қайтару мекенжайын кез келген жалпы мақсаттағы тіркелімде сақтай алады; әдетте, байланыс тіркелімі ретінде қолданылатын белгілі бір тіркелім таңдалады. ARMv7 архитектурасы жалпы мақсаттағы R14 тіркелімін байланыс тіркелімі ретінде пайдаланады, OpenRISC r9 тіркелімін, ал SPARC "шығыс тіркелімі 7" немесе o7 тіркелімін қолданады. Кейбір архитектураларда екі байланыс тіркелімі бар: көптеген қосалқы бағдарлама шақырулары үшін стандартты "тармақ байланыс тіркелімі" және үзілістер үшін арнайы "үзіліс байланыс тіркелімі". Мұндай архитектуралардың бірі – ARCv2 (ARCompact архитектурасының 2-ші нұсқасын пайдаланатын ARC процессорлары), ол үзіліс байланыс тіркелімі үшін r29 және тармақ байланыс тіркелімі үшін r31 жалпы мақсаттағы тіркелімдерін қолданады. Мұндай платформаларда "байланыс тіркеліміне" сілтеме жасау, әдетте тармақ байланыс тіркеліміне сілтеме жасау болып табылады. ARCompact және ARCtangent архитектураларына негізделген ескі ARC процессорларында үш байланыс тіркелімі болды: екі үзіліс байланыс тіркелімі (ILINK) және бір тармақ байланыс тіркелімі (BLINK). Екі үзіліс байланыс тіркелімі ILINK1 (1-деңгейлі (төмен басымдылығы бар) маскаланған үзілістер үшін) және ILINK2 (2-деңгейлі (орта басымдылығы бар) маскаланған үзілістер үшін) болды. Бұл архитектураларда r29 1-деңгейлі үзіліс байланыс тіркелімі, r30 2-деңгейлі үзіліс байланыс тіркелімі, ал r31 тармақ байланыс тіркелімі ретінде пайдаланылды. ILINK1 және ILINK2 ARC 700 процессорларында пайдаланушы режимінде қолжетімді болмады. Байланыс тіркелімін пайдалану, ол арнайы тіркелім немесе жалпы мақсаттағы тіркелім болсын, жапырақ емес қосалқы бағдарламаларды жылдам шақыруға мүмкіндік береді. Қосалқы бағдарлама жапырақ емес болғанда, қайтару мекенжайын тіркелімге жіберу, мысалы, аргументтері қандай да бір жолмен қайта реттелген басқа қосалқы бағдарламаны шақыру мақсатын ғана білдіретін қосалқы бағдарлама үшін, тиімдірек кодты жасауға әкелуі мүмкін. Басқа қосалқы бағдарламалар да байланыс тіркелімін пайдаланудан пайда көреді, өйткені оны шақырушы пайдаланатын басқа тіркелімдермен бірге сақтауға болады. Мысалы, ARM қосалқы бағдарламасы тіркелімдерді 4, 7 және LR байланыс тіркелімін бір STMDB SP!, {R4 R7, LR} нұсқаумен сақтайды, барлық қажетті жад жазуларын бірден орындайды.
A link register (LR for short) is a register which holds the address to return to when a subroutine call completes. This is more efficient than the more traditional scheme of storing return addresses on a call stack, sometimes called a machine stack. The link register does not require the writes and reads of the memory containing the stack which can save a considerable percentage of execution time with repeated calls of small subroutines. The IBM POWER architecture, and its PowerPC and Power ISA successors, have a special purpose link register, into which subroutine call instructions put the return address. In some other instruction sets, such as the ARM architectures, SPARC, and OpenRISC, subroutine call instructions put the return address into a specific general purpose register, so that register is designated by the instruction set architecture as the link register. In some others, such as PA RISC, RISC V, and the IBM System/360 and its successors, including z/Architecture, the subroutine call instruction can store the return address in any general purpose register; a particular register is usually chosen, by convention, to be used as the link register. The ARMv7 architecture uses general purpose register R14 as the link register, OpenRISC uses register r9, and SPARC uses "output register 7" or o7. Some architectures have two link registers: a standard "branch link register" for most subroutine calls, and a special "interrupt link register" for interrupts. One of these is ARCv2 (ARC processors using version 2 of the ARCompact architecture), which uses general purpose registers r29 for the interrupt link register and r31 for the branch link register. References to "the link register" on such platforms will be referring to the branch link register. Earlier ARC processors based on the ARCompact and ARCtangent architectures had three link registers: two interrupt link registers (ILINK) and one branch link register (BLINK). The two interrupt link registers were ILINK1 (for level 1 (low priority) maskable interrupts), and ILINK2 (for level 2 (mid priority) maskable interrupts). In these architectures, r29 was used as the level 1 interrupt link register, r30 as the level 2 interrupt link register, and r31 as the branch link register. ILINK1 and ILINK2 were not accessible in user mode on the ARC 700 processors. The use of a link register, regardless of whether it is a dedicated register or a general purpose register, allows for faster calls to leaf subroutines. When the subroutine is non leaf, passing the return address in a register can still result in generation of more efficient code for thunks, e. g. for a subroutine whose sole purpose is to call another subroutine with arguments rearranged in some way. Other subroutines can benefit from the use of the link register because it can be saved in a batch with other callee used registers—e. g. an ARM subroutine pushes registers 4 7 along with the link register, LR, by the single instruction
STMDB SP!, {R4 R7, LR} pipelining all memory writes required.