Все 16- и 32-разрядные строки x86 (8086, 808, 80186, 80286, 80386, i486, Pentium и т. Д.) Используют некоторую форму сегментной / смещенной адресации.Однако то, к чему относится сегмент, резко изменилось с 8086/88/186 строк до 80286. и далее.
В более ранних чипах, без виртуальной адресации, сегменты относились к старшим 16 битам20-битный адрес памяти, в то время как смещение было 16-битным смещением от этого.Это означало, что у вас была 1 МБ памяти с прямой адресацией, доступ к которой осуществлялся через набор очень сильно перекрывающихся наборов блоков по 64 КБ.
Более поздние микросхемы «защищенного режима» значительно изменили ситуацию.Вместо того, чтобы сегмент был просто старшими 16 битами физического адреса, он вместо этого теперь является индексом в одной из двух таблиц поиска (GDT или LDT), которые содержат структуры памяти, указывающие на базовый адрес, пределы размера, разрешения защиты и т. Д.. сегмента.Смещение работает от этого сохраненного базового адреса и проверяется по ограничителям размера, чтобы гарантировать, что вы не обращаетесь к памяти вне его, таким образом гарантируя, что перекрывающиеся адреса, если таковые имеются, должны быть явно установлены так, а не неявное перекрытиеиз более ранних чипсетов.У 80286 все еще были сегменты, ограниченные размером 64 КБ, но 80386 и позже полностью избавились от этого.
Сегменты все еще неявно используются чипом.Код извлекается из сегмента CS (если специально не указано иное).Данные выбираются из сегмента DS (опять же, если не указано иное).ES используется для пункта назначения во многих операциях (опять же, если ... вы не знаете тренировку).Доступ к стеку осуществляется через SS и так далее.Однако во многих операционных системах (возможно, даже во всех?) На 32-разрядных процессорах (после 80286) все сегменты просто отображаются в одном и том же пространстве памяти, что имитирует плоскую структуру адресного пространства.Скорее всего, вам вообще не придется думать о сегментах, если вы программируете для Windows NT или более поздней версии, или если вы программируете для систем Linux и т. П.
Инструкции AMD64 снова отличаются, и в основном это шагв направлении устранения сегментов полностью.Обычно для защиты в этой среде используется система подкачки.