Микропроцессор 8086 был выпущен фирмой Intel в 1978, а его модифицированный вариант 8088 с 8-разрядной шиной данных - в 1979 году. Дальнейшим развитием семейства явились микропроцессоры 80286 (1983 год), 80386 (1986 год) и 80486 (1990 год).
16-разрядный МП 80286 (или просто 286) разрабатывался с расчетом на многозадачную работу и увеличенный объем памяти. Так как должна была сохраниться его совместимость с 8086, то были введены два режима работы:
· реальный режим (как быстродействующий 8086);
· защищенный режим (с памятью до 16 Мбайт).
Для защищенного режима используются те же сегментные регистры CS, DS, ES и SS, но теперь они хранят не сегментные адреса, а селекторы сегментов - номера сегментов в специальной таблице дескрипторов сегментов (рис. 1.9).
Сегментный регистр ПАМЯТЬ
002 (селектор)
Таблица дескрипторов сегментов
1
2
3 сегмент
.....
k N 2
Дескриптор сегмента
/8/ /24/ /16/
Служ.разр База_сегмента Длина_сегмента
Рис.1.9. Принцип адресации данных в защищенном режиме 80286
Дескриптор сегмента хранит определяющую сегмент информацию - базовый адрес сегмента (24 разряда), длину сегмента (16 разрядов) и 8 служебных разрядов. Таким образом сегмент может начинаться с произвольного байта памяти общим объемом 2 24 = 16 Мбайт и иметь длину до 2 16 = 64 Кбайта.
Очевидно, что формирование адреса через таблицу дескрипторов, расположенную в памяти, потребует существенных дополнительных затрат времени. Поэтому в МП 80286 предусмотрены скрытые (теневые) регистры дескрипторов сегментов (рис. 1.10), в которых и
Сегментные регистры (расширение сегментных регистров)
CS
DS
SS
ES
i286: 15 0 47 40.39 /24/ 16.15 /16/ 0
GS
FS
i386: 15 0 63 53.52 /32/ 20.19 /20/ 0
Cлуж. сегментные регистры (Сл. разряды Базовый адрес сегмента Длина сегмента)
TR
LDTR
GDTR
IDTR
*) для i80286 регистры AX, BX, CX, DX и указатели SP, BP,
SI, DI и IP полностью соответствуют i8086;
**) для i80386/80486 регистры имеют 32 разряда (см. ниже).
Рис. 1.10. Сегментные регистры МП 80286 и 80386/486
размещаются дескрипторы рабочих сегментов. Их содержимое меняется автоматически при изменении селектора сегмента в каком-либо сегментном регистре (при явной загрузке или межсегментном переходе). При работе же с некоторым сегментом в течение длительного интервала замедления операций практически нет, так как в формировании физического адреса участвует базовый адрес из расширения сегментного регистра.
Для многозадачной работы предусмотрено разделение поля памяти между несколькими задачами (процессами), при этом считается, что в системе имеются:
· единственная глобальная таблица дескрипторов сегментов, доступных всем процессам;
· собственная у каждого процесса локальная таблица дескрипторов сегментов, принадлежащих только данному процессу.
На рис. 1.10 показаны дополнительные сегментные регистры GDTR, IDTR, LDTR и TR, предназначенные для хранения селекторов таблиц (сегментов) GDT, IDT, LDT_i и TSS_i, а также текущих значений их базовых адресов, длины и другой служебной информации.
Этот же подход был реализован и в МП 80386, который стал 32-разрядным микропроцессором (рис. 1.11).
AX EAX
AH AL
BX EBX
BH BL
CX ECX
CH CL
DX EDX
DL DL
SP ESP
BP EBP
SI ESI
DI EDI
IP EIP
EFLAGS
PG ET TS EM PE GR0 (MSW)
бит защищенного (protect) режима
Рис. 1.11. Рабочие регистры ЦП 80386/486
Все рабочие регистры и регистры-указатели стали расширенными (Expanded), количество сегментных регистров увеличилось (добавлены GS и FS) и их расширение имело 64 разряда (Рис.1.10), так как под базовый адрес сегмента отведено 32 разряда, а длина сегмента задается двадцатью разрядами. Таким образом, сегмент может начинаться с произвольного байта памяти общим объемом 2 32 = 4 Гбайт и иметь длину до 2 20 = 1 Мбайта. Кроме того, в микропроцессоре аппаратно поддерживаются специальные схемы распределения памяти (страничная и сегментно-страничная), позволяющие выполнять программы, адресное пространство которых превышает объем реальной оперативной памяти компьютера.
Микропроцессор 80486 в концептуальном плане мало отличается от 80386, имея более высокое быстродействие за счет использования специальных аппаратных решений.