Un registre de liaison (LR en abrégé) est un registre qui contient l'adresse à laquelle revenir lorsqu'un appel de sous-routine est terminé. Il est plus efficace que le schéma plus traditionnel de stockage des adresses de retour sur une pile d'appels , parfois appelée pile machine. Le registre de liaison ne nécessite pas les écritures et les lectures de la mémoire contenant la pile, ce qui peut économiser un pourcentage considérable de temps d'exécution avec des appels répétés de petites sous-routines.
L' architecture IBM POWER et ses successeurs PowerPC et Power ISA disposent d'un registre de liaison à usage spécifique, dans lequel les instructions d'appel de sous-programme placent l'adresse de retour. Dans d'autres jeux d'instructions, tels que les architectures ARM , SPARC et OpenRISC , les instructions d'appel de sous-programme placent l'adresse de retour dans un registre à usage général spécifique , de sorte que ce registre est désigné par l'architecture du jeu d'instructions comme registre de liaison. Dans d'autres, tels que PA-RISC , RISC-V et IBM System/360 et ses successeurs, y compris z/Architecture , l'instruction d'appel de sous-programme peut stocker l'adresse de retour dans n'importe quel registre à usage général ; un registre particulier est généralement choisi, par convention, pour être utilisé comme registre de liaison.
L'architecture ARMv7 utilise le registre à usage général R14 comme registre de liaison, OpenRISC utilise le registre r9, et SPARC utilise le « registre de sortie 7 » ou o7 .
Certaines architectures ont deux registres de liaison : un « registre de liaison de branche » standard pour la plupart des appels de sous-programmes et un « registre de liaison d'interruption » spécial pour les interruptions. L'un d'eux est ARCv2 ( processeurs ARC utilisant la version 2 de l'architecture ARCompact), qui utilise les registres à usage général r29 pour le registre de liaison d'interruption et r31 pour le registre de liaison de branche. Les références au « registre de liaison » sur de telles plates-formes feront référence au registre de liaison de branche.
Les premiers processeurs ARC basés sur les architectures ARCompact et ARCtangent disposaient de trois registres de liaison : deux registres de liaison d'interruption (ILINK) et un registre de liaison de dérivation (BLINK). Les deux registres de liaison d'interruption étaient ILINK1 (pour les interruptions masquables de niveau 1 (faible priorité)) et ILINK2 (pour les interruptions masquables de niveau 2 (priorité moyenne)). Dans ces architectures, r29 était utilisé comme registre de liaison d'interruption de niveau 1, r30 comme registre de liaison d'interruption de niveau 2 et r31 comme registre de liaison de dérivation. ILINK1 et ILINK2 n'étaient pas accessibles en mode utilisateur sur les processeurs ARC 700.
L'utilisation d'un registre de liaison, qu'il s'agisse d'un registre dédié ou d'un registre à usage général, permet des appels plus rapides aux sous-routines feuille . Lorsque la sous-routine n'est pas feuille, le passage de l'adresse de retour dans un registre peut toujours entraîner la génération d'un code plus efficace pour les thunks , par exemple pour une sous-routine dont le seul but est d'appeler une autre sous-routine avec des arguments réorganisés d'une certaine manière. D'autres sous-routines peuvent bénéficier de l'utilisation du registre de liaison car il peut être enregistré dans un lot avec d'autres registres utilisés par l'appelé, par exemple une sous-routine ARM pousse les registres 4 à 7 avec le registre de liaison, LR, par l'instruction unique STMDB SP!, {R4-R7, LR}qui canalise toutes les écritures mémoire requises.