Оператор :
отличает регистр / селектор сегмента от регистра общего назначения и указывает, в каком сегменте получить доступ к значению регистра. Так, например,
DS:DX
означает в 16-битном реальном режиме доступ к 16-битному значению в смещении регистра DX
от значения сегмента DS
, которое увеличивается на 16-байтовые значения (т. Е. Разница между значениями сегмента 0x0000 и 0x0001 представляет 16-байтовое смещение). Так, например, если значение в DS
было 0xA000, а значение в DX
было 0xFF, то вы будете обращаться к значению 0xA00FF.
В 32-битном защищенном режиме селектор сегмента представляет значение 16-битного дескриптора, где биты 3-15 используются в качестве смещения поиска в таблице глобальных дескрипторов ЦП или в таблице локальных дескрипторов, которая содержит информацию о 32 диапазон адресов -битных сегментов, а также разрешения доступа на уровне кольца для этого сегмента (т. е. на уровне ядра, на уровне пользователя и т. д.). Биты 0-1 представляют уровень привилегий запроса, который не позволяет процессу пользовательского уровня загружать значение сегментирования с более высоким разрешением. Бит 2 является флагом, который при очистке означает поиск сегмента в GDT, или, если установлен, означает смещение в LDT. Например, значение DS
0x0010 будет означать поиск третьего слота в GDT с уровнем привилегий запроса 0 (т. Е. Вам нужно будет находиться в режиме уровня ядра, чтобы установить это значение). Значение в DX
будет тогда смещено от начала диапазона адресов, установленного для этого конкретного сегмента в GDT.