Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_1.DOC
Скачиваний:
2
Добавлен:
25.08.2019
Размер:
595.97 Кб
Скачать

2.1.2. Модели памяти и сегментные регистры

Оперативная память в ПК представляет собой совокупность байтовых ячеек, каждая из которых обладает уникальным адресом. Адреса байтов, которые необходимо указывать при обращении к ним, могут быть представлены по-разному. В бессегментной или "плоской" (flat) модели памяти байты просто последовательно пронумерованы, и каждый номер (адрес) однозначно соответствует определенному байту. В конечном счете, именно по таким адресам производит обращение к памяти процессор. Диапазон адресов современных процессоров с 32-разрядной адресной шиной — от 0 до 232–1 (4 гигабайта). Для обеспечения независимости программ от их возможного местоположения в памяти, а также для уменьшения размеров адресов, используемых в программах, применяют сегментированные модели памяти. При этом память условно делят на участки (сегменты), размер которых не может превышать определенной величины. Для формирования адреса какой-либо ячейки памяти задействуются два числа — адрес начала сегмента и смещение искомой ячейки относительно этого начала.

Операционные системы (кроме DOS) могут размещать сегменты, с ко­торыми работает программа пользователя, в разных местах в памяти, и даже могут временно записывать их на диск, если памяти не хватает. Так как сегменты могут оказаться где угодно, программа обращается к ним, используя вместо настоящего адреса начала сегмента 16-битное число, называемое селектором. В процессорах Intel предусмотрено шесть 16-битных регистров — CS, DS, ES, FS, GS, SS, исполь­зуемых для хранения селекторов. (Регистры FS и GS отсутствовали в 8086, но появились уже в 80286.) Это не значит, что программа не мо­жет работать одновременно с большим количеством сегментов памя­ти, — в любой момент времени можно изменить значения, записанные в этих регистрах.

В реальном режиме селектор любого сегмента равен адресу его начала, деленному на 16. Чтобы получить адрес в памяти, 16-битное смещение скла­дывают с этим селектором, сдвинутым предварительно влево на 4. Таким образом, оказывается, что максимальный доступный адрес в реальном ре­жиме 220  1 = 1 048 575. Для сравнения, в защищенном режиме адрес нача­ла для каждого сегмента хранится отдельно, так что возможно 246 (64 тера­байта) различных логических адресов в формате сегмент:смещение (программа может определить до 16 383 сегментов, каждый из которых имеет размер до 4 Гб). Реально процессор может адресоваться только к 4 (или 64 для Pentium Pro) гигабайтам памяти.

В отличие от регистров DS, ES, GS, FS, которые называются регист­рами сегментов данных, регистры CS и SS отвечают за сегменты двух особенных типов — сегмент кода и сегмент стека. Сегмент кода содержит программу, исполняющуюся в данный момент, так что запись нового се­лектора в этот регистр приводит к тому, что далее будет исполнена не следующая по тексту программы команда, а команда из кода, находяще­гося в другом сегменте, с тем же смещением. Смещение следующей выполняемой команды всегда хранится в специальном регистре — EIP (указатель инструкции, шестнадцатибитная форма IP). Название регистра EIP является условным, так как оно не используется для обращения к данному регистру в качестве операнда команд. Косвенно запись в регистр EIP можно осуществить лишь командами передачи управления. Каждая из этих команд — перехода, условного перехода, цикла, вызова подпрограммы и т. п. — осуществляет запись в регистры CS и EIP, благодаря чему следующей исполняется команда из другого места памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]