Вопрос 7 - Регистровые структуры центрального процессора IA-32. Переименование регистров
80386 имеет 32 програмно-доступных регистра. Подразделить их можно на следующие категории:
-
регистры общего назначения;
-
регистры сегментации;
-
регистр флагов;
-
регистры управления;
-
регистры системного адреса;
-
регистр тестов;
-
регистр отладки.
Эти регистры являются также набором регистров процессоров Intel 8086 и Intel 80286, поэтому все 16-и разрядные регистры процессоров более ранних выпусков "покрываются" 32-х разрядными регистрами 80386-го процессора. Регистры базовой архитектуры микропроцессора включают: регистры общего адреса и данных, указатель команд, а так же регистр флагов. Данные регистры при включении новой задачи загружаются новым содержимым. Базовая архитектура содержит 6 прямо доступных сегмента, каждый размером до 4 Гбайт. Сегменты указываются значениями селектора, помещенными в регистр сегмента. Селекторы автоматически загружаются при операции включения задач
Другой тип регистров – это регистры управления, системного адреса, отладки и тестов. Они используются для отладки операционных систем.
-
Регистры отладки и тестовые регистры
Регистры отладки. Шесть доступных для программиста регистров отладки обеспечивают поддержку (на кристалле) отладки. Регистр отладки CRO-3 классифицирует четыре линейных останова. Другой из них DR6 используется для установки точек останова и регистра статуса отладки DR7, а также отображает текущее состояние точек останова.
-
Регистры общего назначения (РОН)
Микропроцессор Intel 80386 имеет 8-м 32-х разрядных регистров общего назначения. Они поддерживают 16, 32-х разрядные адресные операнды, 1, 8, 16, 32, 64 операнды данных и битовые поля от 1 до 32 битов. Они называются: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Младшие 16 разрядов каждого регистра могут использоваться по отдельности, они называются: AX, BX, CX, DX, SI, DI, BP, SP. Также могут индивидуально использоваться младший (0-7) и старший (8-15) байты РОН AX, BX, CX, DX, соответственно их называют: AL, BL, CL, DL и AH, BH, CH, DH.
-
Указатель команд (IP)
Регистр указателя команд представляет собой 32-х разрядный регистр, который называют EIP. Он содержит смещение следующей команды, которую нужно выполнить. Смещение всегда определяется относительно сегмента кода. Его младшие 16 бит называются IP и используются при шестнадцатиразрядной адресации.
-
Регистр флагов
Регистр флагов является 32-х разрядным и называется EFLAGS. Определенные биты EFLAGS управляют некоторыми операциями и подчеркивают статус 80386. Младшие 16-ть разрядов EFLAGS представляют собой регистр FLAGS, который может использоваться при выполнении операций с 8086. Неопределенные биты являются зарезервированными, т. е. в настоящий момент они не имеют значения, однако могут быть использованы для специальных целей в последующих версиях микропроцессора. Все флаги младшего байта регистра устанавливаются арифметическими или логическими операциями процессора.
-
Сегментные регистры
Шесть 16-ти разрядных сегментных регистров содержат базовые адреса сегментов, определяющие сегменты памяти текущей адресации. В защищенном режиме, каждый сегмент может иметь размеры от одного байта до целого линейного и физического пространства машины до 4Гб в режиме реальной адресации, максимальный размер сегмента ограничен на 64Кб. Шесть сегментов, адресуемых в любой данный момент, определяются содержимым регистров CS, SS, DS, ES, FS и GS. Значение в CS указывает на текущий сегмент кода, содержимое SS указывает текущий сегмент стека, а значения в DS, ES, FS, GS на сегменты данных.
-
Регистры дескриптора сегмента
Регистры дескриптора сегмента невидимы для программиста. В 80386, регистр дескриптора невидимый для программиста соотнесен с каждым видимым регистром селектора. Каждый из них содержит 32-х битовый базовый адрес сегмента, его границу (предел) и другие необходимые признаки сегмента. Когда адрес сегмента загружается в сегментный регистр, ассоциативный (соотнесенный) регистр дескриптора автоматически модифицируется в соответствии с новой информацией. В защищенном режиме базовый адрес, граница, все признаки модифицируются содержимым регистра дескриптора сегмента, индексированного селектором. Каждый раз, когда происходит ссылка на ячейку памяти, регистр дескриптора сегмента, автоматически вовлекается ссылкой на ячейку памяти. 32-х битовый базовый адрес сегмента становится компонентом вычисления линейного адреса, 32-х битовое значение границы используется для операций контроля границы, а признаки проверяются на соответствие типу ссылки на ячейку памяти, которая запрашивается.
-
Управляющие регистры
80386 имеет три управляющих регистра по 32 бита: CR0, CR2 и CR3. Эти регистры, наряду с регистрами системного адреса поддерживают состояние машины и воздействуют на все задачи в системе.
-
Регистры системного адреса
Четыре специальных регистра существуют для обращения к таблицам или сегментам, поддерживаемыми 80286/80386 моделью защиты. Данные таблицы или сегменты следующие: GDT (таблица глобального дескриптора), IDT (таблица дескриптора прерывания), LDT (таблица локального дескриптора), TSS (сегмент состояния задачи). Адреса данных таблиц и сегментов помещены в память специальных регистров: регистров системного адреса и регистров системного сегмента. Называются данные регистры соответственно GDTR, IDTR, LDTR, TR.
Рассмотрим теперь файлы регистров IA-64. В их число входят: 128 регистров общего назначения GR; 128 регистров с плавающей запятой FR; 64 регистра предикатов PR; 8 регистров перехода BR; 128 прикладных регистра AR; не менее 4 регистров идентификатора процессора CPUID; счетчик команд IP, указывающий на адрес связки, содержащей исполняемую команду; регистр маркера текущего окна CFM, описывающий окно стека регистров и др.
Регистры CPUID являются 64-разрядными. В CPUID-регистрах 0 и 1 лежит информация о производителе, в регистре 2 находится серийный номер процессора, а в регистре 3 задается тип процессора (семейство, модель, версия архитектуры и т.п.) и число CPUID-регистров. Разряды регистра 4 указывают на поддержку конкретных особенностей IA-64, т.е. тех, которые реализованы в данном процессоре.
Прикладные регистры AR0-AR127 - специализированные (в основном 64-разрядные) регистры, применяемые в IA-64 и IA-32. AR0-7 называются регистрами ядра; запись в них привилегированна, но они доступны на чтение в любом приложении и используются для передачи приложению сообщений от операционной системы.
Среди других прикладных регистров укажем на AR16 (RSC) - регистр конфигурации стека регистров, используемый для управления работой "машиной" стека регистров IA-64 (RSE); AR17 (BSP), в котором находится адрес в памяти, где сохраняется положение GR32 в текущем окне стека; AR40 (FPSR) - регистр состояния для команд с плавающей запятой IA-64; AR44 (ITC) - интервальный таймер; AR64 (PFS) - регистр предыдущего состояния функции, куда автоматически копируются некоторые другие регистры при вызове подпрограмм; AR65 (LC), используемый для организации циклов со счетчиком, и, наконец, 6-разрядный регистр эпилога AR66 (EC). Ряд AR-регистров является фактически регистрами IA-32 (дескриптор сегмента кодов, дескриптор сегмента стека и др.).
