Красное смещение
- 1 year ago
- 0
- 0
В информатике , смещение внутри массива или другого объекта структуры данных представляет собой целое число , указывающее расстояние (смещение) между началом объекта и данным элементом или точкой, предположительно внутри одного и того же объекта . Концепция расстояния действительна только в том случае, если все элементы объекта имеют одинаковый размер (обычно заданный в байтах или «словах» (упорядоченный набор байтов или бит )).
Например, в массиве
A
, с содержанием
"abcdef"
, четвёртый элемент, содержащий символ
'd'
, имеет смещение в три от начала
A
.
В компьютерной инженерии и низкоуровневом программировании (например, языке ассемблера ) смещение обычно обозначает количество адресов, которые нужно добавить к , чтобы получить конкретный абсолютный адрес . В этом значении для указания размера смещения используется только базовый адресный блок, обычно 8-битный байт. В этом контексте смещение иногда называют «относительным адресом».
В инструкциях IBM System/360 12-битное смещение, встроенное в определённые команды, содержит диапазон от 0 до 4096 байт. Например, в инструкции безусловного перехода (X'47F0Fxxx') 12-битное шестнадцатеричное смещение «xxx» обеспечивало смещение байта от базового регистра (15) до ветки . Нечётное смещение приведёт к проверке программы (если только в базовом регистре не содержится нечётный адрес), поскольку инструкции должны быть выровнены на границах полуслова для выполнения без программного или аппаратного прерывания .
В предыдущем примере описан непрямой способ обращения к ячейке памяти в формате сегмента: смещение. Например, предположим, что мы хотим ссылаться на ячейку памяти 0xF867. Один из способов, которым это может быть достигнуто, — сначала определить сегмент с начальным адресом 0xF000, а затем определить смещение 0x0867. Кроме того, также разрешено сдвигать шестнадцатеричный сегмент, чтобы достичь конечного абсолютного адреса памяти. Здесь следует отметить, что достичь окончательного абсолютного адреса можно разными способами.