Микропроцессор Intel 486

2.2. Структура оперативной памяти.
Порты ввода-вывода

Память микропроцессорной системы организуется как одномерный массив байтов, имеющих физические адреса, лежащие в определенном диапазоне. Для реального режима работы микропроцессора эти адреса 20-разрядные, находящиеся в интервале 00000h…FFFFFh. Любые два соседних байта образуют машинное слово, адресом слова считается адрес его младшего байта. Существует также понятие двойного слова (четыре байта) и т.д. Слово называется выровненным, если его младшему байту соответствует четный адрес, и невыровненным в противном случае. Несмотря на то, что физический адрес насчитывает 20 разрядов, в практической работе программиста применяются 16-разрядные логические адреса, состоящие из базового адреса сегмента и внутрисегментного смещения. Пространство памяти – 1 Мбайт в реальном режиме – представляется как набор так называемых сегментов. Сегмент состоит из смежных ячеек памяти; его длина не может превышать 64 Кбайт. Каждому сегменту назначается (программным путем) базовый адрес; эти адреса для четырех сегментов (сегмент кода, сегмент данных, сегмент стека, дополнительный сегмент) записываются соответственно в регистры CS, DS, SS, ES. Так обстоит дело с микропроцессорами 8086, 80286 и 80386; в процессорах же i486 и Pentium имеются еще два дополнительных сегментных регистра – FS и GS. Для обращения к другим сегментам программа должна изменять значения сегментных регистров и тем самым она может работать со всем адресным пространством оперативной памяти. Сегменты могут быть смежными, разделенными, перекрывающимися и даже совпадающими (во всех сегментных регистрах записано одно и то же значение; этот случай соответствует фактически отказу от сегментации памяти). Физически одна и та же ячейка (байт) может принадлежать нескольким сегментам.

Упомянутый выше логический адрес состоит из двух 16-разрядных слов, называемыми для краткости просто сегментом (SEG) и смещением (OFFSET). Используется следующая форма записи: SEG:OFFSET, например, А000h:0010h или 0050h:8010h. При вычислении 20-разрядного физического адреса к сегментной части логического адреса (16 бит) в процессоре приписываются четыре нулевых бита справа; полученный таким способом 20-разрядный двоичный код суммируется со смещением. Очевидно, что, например, логические адреса 40h:17h и 0:417h будут соответствовать одной и той же физической ячейке памяти.

Микропроцессор всегда выбирает исполняемые команды из сегмента кода, адресуемого регистровой парой CS : IP. Команды работы со стеком используют обращение к стековому сегменту, адресуемому как SS : SP. Обрабатываемые данные (переменные, массивы, строки и т.п.) чаще всего располагаются в основном или дополнительном сегменте данных; текущие адреса данных можно обозначить как DS : EA или ES : EA, где EA (Executable Address) – исполнительный адрес, формируемый с помощью того или иного метода адресации (о чем будет рассказано ниже).

В защищенном режиме организация памяти выглядит существенно сложнее. Здесь с каждым сегментным регистром связан программно-недоступный регистр дескриптора, где содержится базовый (и притом 32-разрядный) адрес конкретного сегмента, размер (32-разрядный) сегмента, а также атрибуты сегмента. Если, как уже говорилось выше, в реальном режиме размер сегмента не превосходит 64 Кбайт, то в защищенном режиме он может составлять от 1 байта до 4 Гбайт. Кроме того, поддерживается так называемый механизм страниц памяти. Однако работа в защищенном режиме здесь рассматриваться не будет.

Кроме пространства памяти (в котором, кстати, кроме ячеек ОЗУ, могут находиться и буферы внешних устройств, например, видеопамять), микропроцессор имеет доступ к пространству портов ввода-вывода. Каждый такой порт представляет собой некий регистр (набор триггеров), связанный с тем или иным внешним устройством. Каждый порт имеет индивидуальный адрес, выраженный числом от 0 до 65535 (в десятичной системе) или от 0 до FFFFFh (в шестнадцатеричной системе). В учебной модели микропроцессора i486 имеются два порта с адресами 0 и 1, снабженные десятичными индикаторами.


Назад Содержание Вперёд