Офсет (информатика)
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
В информатике смещение указывающее расстояние ( смещение внутри массива или другого структуры данных объекта представляет собой целое число, ) между началом объекта и данным элементом или точкой, предположительно внутри того же объекта. [ 1 ] : 100–103 Концепция расстояния действительна только в том случае, если все элементы объекта имеют одинаковый размер (обычно задаваемый в байтах или словах ).
Например, если A
представляет собой массив символов, содержащий "abcdef"
, четвертый элемент, содержащий символ 'd'
имеет смещение, равное трем от начала A
.
На языке ассемблера
[ редактировать ]В компьютерной инженерии и низкоуровневом программировании (например, языке ассемблера ) смещение обычно обозначает количество адресных ячеек, добавленных к базовому адресу , чтобы добраться до определенного абсолютного адреса . только базовая единица адреса, обычно 8-битный байт В этом (исходном) значении смещения для указания размера смещения используется . В этом контексте смещение иногда называют относительным адресом .
В инструкциях IBM System/360 12-битное смещение, встроенное в некоторые инструкции, обеспечивало диапазон от 0 до 4096 байт. Например, в инструкции безусловного перехода (X'47F0Fxxx') 12-битное шестнадцатеричное смещение xxx обеспечивает смещение байтов от базового регистра (15), к которому осуществляется переход. Нечетное смещение вызвало бы проверку программы (если только сам базовый регистр также не содержал нечетный адрес), поскольку инструкции должны были быть выровнены по границам полуслова, чтобы выполняться без программного или аппаратного прерывания .
Предыдущий пример описывает косвенный способ обращения к ячейке памяти в формате сегмент:смещение. Например, предположим, что мы хотим обратиться к ячейке памяти 0xF867. Один из способов добиться этого — сначала определить сегмент с начальным адресом 0xF000, а затем определить смещение 0x0867. Кроме того, нам также разрешено сдвигать шестнадцатеричный сегмент, чтобы достичь конечного абсолютного адреса памяти. Здесь следует отметить, что мы можем достичь нашего окончательного абсолютного адреса разными способами.
Смещение не всегда относительно базового адреса модуля, например: если у вас есть класс и вы хотите получить атрибут «цвет» этого класса, смещение может быть 0x0100, но это смещение необходимо добавить к смещение самого класса, а не базовый адрес. Если смещение класса равно 0xFF881, а базовый адрес — 0x0A100, то для получения атрибута «цвет» оба смещения добавляются к базовому адресу. 0x0A100 (базовый) + 0xFF881 (класс) + 0x0100 (атрибут). В конечном итоге адрес атрибута будет 0x109A81.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Керниган, Брайан В .; Ричи, Деннис М. (1988). Язык программирования C (2-е изд.). Энглвуд Клиффс, Нью-Джерси: Прентис Холл. ISBN 0-13-110362-8 . ОСЛК 318301687 .