Offset (informatique) - Offset (computer science)

En informatique , un décalage dans un tableau ou un autre objet de structure de données est un entier indiquant la distance (déplacement) entre le début de l'objet et un élément ou un point donné, vraisemblablement dans le même objet. Le concept de distance n'est valide que si tous les éléments de l'objet sont de la même taille (généralement exprimés en octets ou en mots ).

Par exemple, dans A un tableau de caractères contenant "abcdef" , le quatrième élément contenant le caractère 'd' a un décalage de trois à partir du début de A .

En langage d'assemblage

Dans l'ingénierie informatique et la programmation de bas niveau (comme le langage d'assemblage ), un décalage indique généralement le nombre d'emplacements d'adresses ajoutés à une adresse de base afin d'obtenir une adresse absolue spécifique . Dans cette signification (originale) de décalage, seule l'unité d'adresse de base, généralement l' octet de 8 bits , est utilisée pour spécifier la taille du décalage. Dans ce contexte, un décalage est parfois appelé une adresse relative .

Dans les instructions IBM System / 360 , un décalage de 12 bits intégré dans certaines instructions fournissait une plage comprise entre 0 et 4 096 octets. Par exemple, dans une instruction de branchement inconditionnel (X'47F0Fxxx '), l'offset hexadécimal xxx 12 bits a fourni le décalage d'octet du registre de base (15) vers lequel effectuer le branchement. Un décalage impair provoquerait une vérification du programme (à moins que le registre de base lui-même ne contienne également une adresse impaire) - puisque les instructions devaient être alignées sur des limites d'un demi-mot pour s'exécuter sans programme ou interruption matérielle .

L'exemple précédent décrit une manière indirecte d'adresser un emplacement mémoire au format segment: offset. Par exemple, supposons que nous voulions faire référence à l'emplacement de mémoire 0xF867. Une façon d'y parvenir consiste à définir d'abord un segment avec l'adresse de début 0xF000, puis à définir un décalage de 0x0867. De plus, nous sommes également autorisés à décaler le segment hexadécimal pour atteindre l'adresse mémoire absolue finale. Une chose à noter ici est que nous pouvons atteindre notre dernière adresse absolue de plusieurs manières.