ПОИСК
Категории книг
ОПРОС
Вопрос: Какой язык программирования вы предпочитаете
С/C++
Delphi
Visual Basic
Perl
Java
PHP
ASP
Другой
ЭТО ПОЛЕЗНО!
ОБРАТНАЯ СВЯЗЬ

/ Главная / Программирование / Иллюстрированный самоучитель по SVGA
Иллюстрированный самоучитель по SVGA

 

Сегменты оперативной памяти

Первые компьютеры IBM PC имели 16-разрядную шину данных, что соответствовало пространству адресов 64 Кбайт. У IBM PC/XT, собранного на базе процессора Intel 8086, адресная шина увеличилась на 4 разряда и появилась возможность работы с пространством адресов размером в 1 Мбайт. Однако основные регистры процессора остались 16-разрядными, поэтому 20-разрядные адреса в них просто не помещались. Для работы с пространством адресов в 1 Мбайт потребовалось создание специального механизма.

Разработчики выбрали не самое лучшее из возможных решений, ограничив предельный размер пространства адресов значением 1 Мбайт. Возможно, им казалось, что такой объем памяти удовлетворит нужды пользователей на многие годы. Так или иначе, но заведомо ограниченное решение стало стандартом и используется во всех без исключения компьютерах семейства IBM PC.

Режимы работы микропроцессора. Компьютеры IBM .PC/AT, собранные на базе процессора Intel 80286, уже обеспечивали доступ к пространству адресов размером в 16 Мбайт. Однако для реального использования такого пространства требовалось новое программное обеспечение. К этому времени было создано много системных и прикладных программ, ориентированных на возможности процессора Intel 8086, и изменять способ работы с адресами было слишком поздно. Разработчики пошли по другому пути. Начиная с модели 80286, все микропроцессоры Intel поддерживают два режима работы. Один из них называется реальным режимом (real-address mode), а другой защищенным режимом (protected-address mode).

Реальным режим назван потому, что используются физические адреса оперативной памяти и внешних устройств, значения которых не превышают 1 Мбайт. При включении ПК любой современный микропроцессор переключается в реальный режим. В нем он работает в точности как Intel 8086, только значительно быстрее.

Работа с дополнительным пространством адресов возможна только в защищенном режиме. При этом микропроцессор контролирует допустимость значений адресов, откуда и произошло название режима. Для распределения и контроля расширенного пространства адресов в состав микропроцессоров включены специальные регистры и команды для их обслуживания. Те и другие доступны только при работе микропроцессора в защищенном режиме.

У микропроцессора Intel 386 шины адреса и данных стали 32-разрядными, а размер пространства адресов увеличился до 4 Гбайт. Кроме того, был введен
еще один виртуальный режим (virtual-address mode), иногда его обозначают V86. Он позволяет при работе в защищенном режиме эмулировать процессор 8086. Отличие от реального режима в том, что адреса не являются физическими (реальными), а отображаются на конкретную часть 32-разрядного пространства. Это позволяет современным операционным системам "параллельно" выполнять несколько задач, рассчитанных на работу в реальном режиме, загружая их в свободные адреса ОЗУ.
Таким образом, работа любого современного IBM PC начинается в реальном режиме, затем его можно перевести в защищенный режим, а из последнего — в виртуальный. Изменение текущих режимов работы микропроцессора обычно выполняет операционная система. Прикладные задачи могут это делать только при работе в монопольном режиме, на практике такие случаи встречаются редко.

Сегменты оперативной памяти

В реальном режиме работы процессора пространство оперативной памяти делится на сегменты, размер которых не превышает 64 Кбайт, а адрес начала обязательно кратен 16.

При выборке команд и операндов микропроцессор вычисляет абсолютный адрес, исходя из значения (кода) сегмента и смещения (относительного адреса) в нем. Для этого он сдвигает значение сегмента на 4 разряда вправо и прибавляет смещение к результату сдвига. Табл. Б.1 иллюстрирует схему формирования 20-разрядного адреса.

Таблица Б. 1. Схема формирования 20-разрядного адреса

  15 14 13 ... c м е щ е н и е ... 2 1 0
15 14 13 12 ... с е г м е н т ... 2 1 0  
19 18 17 ... п о л н ы й   а д р е с ... 2 1 0

При записи на бумаге или на экране монитора сегмент и смещение разделяет символ "двоеточие". Например, записи 1111:2222 соответствует адрес 11110 + 2222 = 13332. Такая форма записи адресов используется при работе с большинством отладчиков.
Один и тот же полный адрес может быть задан различными способами. Например, область данных BIOS расположена в оперативной памяти, начиная с абсолютного адреса 400h. Его можно записать в виде 0000:0400, 0040:0000, 0020:0200 И Т. П.

Оперативная память занимает не все пространство адресов, а только младшие 640 Кбайт. Ее можно разделить на 10 сегментов максимального размера (64 Кбайт), коды которых будут изменяться от оооо до эоооь. Обычно далеко не все сегменты имеют максимальный размер, поэтому их количество бывает больше 10, но в любом случае сегмент с кодом AOOOh уже не относится к оперативной памяти, обычно это код видеосегмента при работе в графических режимах. И вообще, пространство от 640 Кбайт до 1 Мбайт выделено для размещения BIOS, ее дополнений, расположенных на платах контроллеров внешних устройств, адресов, через которые происходит доступ к этим устройствам, и т. п.

Расположение адресов в регистрах

Микропроцессор выбирает части адреса из двух разных регистров. Коды сегментов хранятся в специальных сегментных регистрах, которые предназначены только для этих целей. Начиная с модели 80386, у микропроцессоров Intel таких регистров 6. На языке ассемблера они имеют имена cs, DS, ES, FS, GS, ss. По умолчанию, т. е., если явно не указано другое, регистр cs используете т при выборке команд, DS — при выборке данных, a ss — при работе со стеком. Умолчаний для ES, FS и GS не существует, они всегда указываются явно.

Смещения в сегментах (относительные адреса) процессор может выбирать из шести регистров, которые на языке ассемблера имеют имена вх, ВР, IP, SP, DI, si. Первый (вх) называется регистром базы, относится к регистрам общего назначения и делится на два байта. Остальные пять на байты не делятся, три из них имеют фиксированное назначение. В SP хранится указатель стека, с ним работают команды push, pop и др. Регистр ВР используется для доступа обычных команд (mov, add и пр.) к области стека (см. приложение В). Из IP процессор выбирает относительный адрес очередной выполняемой команды. Индексные регистры DI и si используют строковые операции, а в остальных случаях они не имеют фиксированного назначения.

 


Компьютерные книги © 2006-2013
computers.plib.ru