В інформатиці зміщення () в масиві або іншому об'єкті структури даних — це ціле число, яке вказує відстань (зсув) між початком об'єкта та певним елементом або позицією, імовірно в межах того самого об'єкта. Поняття відстані є коректним лише тоді, коли всі елементи об'єкта мають однаковий розмір (зазвичай у байтах або машинних словах).
Наприклад, якщо A — це масив символів, що містить рядок "abcdef", то четвертий елемент, який містить символ 'd', має зміщення, рівне трьом, від початку масиву A.
В асемблері
У комп'ютерній інженерії та низькорівневому програмуванні (наприклад, мовою асемблер) зміщення зазвичай означає кількість адресних позицій, що додаються до базової адреси для отримання певної абсолютної адреси. У цьому (початковому) значенні зміщення для його задання використовується лише базова одиниця адресації, зазвичай 8-бітовий байт. У такому контексті зміщення іноді називають відносною адресою.
В інструкціях IBM System/360 12-бітове зміщення, вбудоване в певні інструкції, забезпечувало діапазон від 0 до 4096 байтів. Наприклад, в інструкції безумовного переходу (X'47F0Fxxx') 12-бітове шістнадцяткове зміщення xxx задавало зміщення в байтах від адреси, що містилася в базовому регістрі (15), до адреси переходу. Непарне значення зміщення спричиняло перевірку програми (якщо лише сам базовий регістр також не містив непарної адреси), оскільки для виконання без програмного чи апаратного переривання інструкції повинні були бути вирівняні за межами півслів.
Попередній приклад описує непрямий спосіб адресації комірки пам'яті у форматі «сегмент:зміщення». Наприклад, припустімо, що потрібно звернутися до комірки пам'яті з адресою 0xF867. Один зі способів — спочатку визначити сегмент із початковою адресою 0xF000, а потім задати зміщення 0x0867. Крім того, дозволяється зміщувати шістнадцяткове значення сегмента, щоб отримати кінцеву абсолютну адресу пам'яті. Варто зазначити, що до однієї й тієї самої абсолютної адреси можна дійти багатьма різними комбінаціями сегмента та зміщення.
Зміщення не завжди є відносним до базової адреси модуля. Наприклад, якщо є клас і потрібно отримати значення його атрибута color, зміщення цього атрибута може дорівнювати 0x0100, але його слід додавати до зміщення самого класу, а не безпосередньо до базової адреси. Якщо зміщення класу дорівнює 0xFF881, а базова адреса — 0x0A100, то для отримання адреси атрибута color обидва зміщення додаються до базової адреси: 0x0A100 (база) + 0xFF881 (клас) + 0x0100 (атрибут). У підсумку адреса атрибута становитиме 0x109A81.
Див. також Базова адреса
Примітки