Смещение (информатика)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В информатике, смещение внутри массива или другого объекта структуры данных представляет собой целое число, указывающее расстояние (смещение) между началом объекта и данным элементом или точкой, предположительно внутри одного и того же объекта[1]. Концепция расстояния действительна только в том случае, если все элементы объекта имеют одинаковый размер (обычно заданный в байтах или «словах» (упорядоченный набор байтов или бит)).

Например, в массиве A, с содержанием "abcdef", четвёртый элемент, содержащий символ 'd', имеет смещение в три от начала A.

В языке ассемблера[править | править код]

В компьютерной инженерии и низкоуровневом программировании (например, языке ассемблера) смещение обычно обозначает количество адресов, которые нужно добавить к базовому адресу, чтобы получить конкретный абсолютный адрес. В этом значении для указания размера смещения используется только базовый адресный блок, обычно 8-битный байт. В этом контексте смещение иногда называют «относительным адресом».

В инструкциях IBM System/360 12-битное смещение, встроенное в определённые команды, содержит диапазон от 0 до 4096 байт. Например, в инструкции безусловного перехода (X'47F0Fxxx') 12-битное шестнадцатеричное смещение «xxx» обеспечивало смещение байта от базового регистра (15) до ветки[2]. Нечётное смещение приведёт к проверке программы (если только в базовом регистре не содержится нечётный адрес), поскольку инструкции должны быть выровнены на границах полуслова для выполнения без программного или аппаратного прерывания[3].

В предыдущем примере описан непрямой способ обращения к ячейке памяти в формате сегмента: смещение. Например, предположим, что мы хотим ссылаться на ячейку памяти 0xF867. Один из способов, которым это может быть достигнуто, — сначала определить сегмент с начальным адресом 0xF000, а затем определить смещение 0x0867. Кроме того, также разрешено сдвигать шестнадцатеричный сегмент, чтобы достичь конечного абсолютного адреса памяти. Здесь следует отметить, что достичь окончательного абсолютного адреса можно разными способами.

Примечания[править | править код]

  1. Dandamudi, Sivarama P., 1955-. Introduction to Assembly language programming : for Pentium and RISC processors. — 2nd ed. — New York: Springer, 2005. — С. 76. — 1 online resource (xxiii, 690 pages) с. — ISBN 0387271554.
  2. IBM Knowledge Center (англ.). www.ibm.com. Дата обращения: 8 января 2018. Архивировано 9 января 2018 года.
  3. Однократная передача данных (LDR, STR). www.gaw.ru. Дата обращения: 8 января 2018. Архивировано 9 января 2018 года.