Описание регистров ia-32 Основные функциональные регистры
Состав основных функциональных регистров идентичен для всех 32-разрядных микропроцессоров семейства Intel 80х86 и Pentium.
Восемь 32-разрядных регистров общего назначения (general propose) ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ЕВР, ESP (рис.$.1) предназначены для хранения данных и адресов. Младшие 16 разрядов этих регистров доступны под именами АХ, ВХ, СХ, DX, SI, DI, BP, SP. При операциях с байтами можно отдельно обращаться к младшему (разряды 7-0) или старшему (разряды 15-8) байту регистров АХ, ВХ, СХ, DX: младшие байты имеют имена AL, BL, CL, DL, старшие – АН, ВН, СН, DH.
|
31 |
16 |
15 |
|
0 |
ЕАХ |
|
(АН) |
АХ |
(AL) |
|
EDX |
|
(DH) |
DX |
(DL) |
|
ЕСХ |
|
(СН) |
СХ |
(CL) |
|
ЕВХ |
|
(ВН) |
ВХ |
(BL) |
|
ЕВР |
|
ВР |
|||
ESI |
|
SI |
|||
EDI |
|
DI |
|||
ESP |
|
SP |
|||
Рис. $.1 Регистры общего назначения
Сегментные регистры содержат 16-битные указатели (в реальном режиме) или селекторы дескрипторов (в защищенном режиме) сегментов CS (Code Segment – сегмент кодов инструкций), SS (Stack Segment – сегмент стека), DS (Data Segment – сегмент данных), ES, FS и GS – дополнительные сегменты данных (Рис. $.2).
|
Сегментные регистры |
Скрытые регистры дескрипторов |
||||
|
15 |
0 |
|
|
|
|
Код |
CS |
|
|
|
||
Стек |
SS |
|
|
|
||
|
|
DS |
|
|
|
|
Данные |
|
ES |
|
|
|
|
|
FS |
|
|
|
||
|
|
GS |
|
|
|
|
|
|
Базовый адрес |
Размер сегмента |
Атрибуты сегмента |
||
Рис. $.2. Сегментные регистры процессора IA-32
Сегментных регистров FS и GS в 16-разрядных процессорах не было. Содержимое сегментных регистров не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. Использование сегментных регистров определяется типом обращения к памяти. Для многих типов обращений возможно применение альтернативных сегментных регистров, которое вводится префиксами инструкций CS:, SS:, DS:, ES:, FS: или GS:. С каждым из шести сегментных регистров связаны программно-недоступные скрытые регистры дескрипторов (их еще называют Segment Descriptor Cache – кэш сегментных регистров), автоматически загружаемые при загрузке соответствующих сегментных регистров. В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-битный базовый адрес, 32-битный лимит (размер сегмента) и атрибуты сегментов. Используя содержимое этих скрытых регистров, при каждом обращении к памяти, выполняется вычисление линейного адреса и проверка защиты, причем именно эти регистры задают свойства сегментов как в защищенном, так и в реальном режимах. Образ этих 96-битных регистров доступен только в режиме SMM и внутрисхемной эмуляции (ICE), форматы специфичны для каждой модели (поколения) процессоров. В реальном режиме, в который процессор входит по аппаратному сбросу, лимит (размер сегмента) фиксирован – 64 Кбайт, атрибуты не используются, а в качестве базового адреса заносится значение сегментного регистра, сдвинутое на 4 бита влево. В защищенном режиме лимит может задаваться в пределах 1 байт - 4 Гбайт.
Указатель инструкций EIP представляет собой 32-разрядный регистр, содержимое которого используется в качестве смещения при определении адреса следующей выполняемой инструкции. Смещение задается относительно базового адреса сегмента инструкций, задаваемого регистром CS. Младшие 16 бит EIP (биты 15-0) содержат 16-разрядный указатель инструкций с именем IP, который используется при 16-разрядной адресации. Содержимое EIP (IP) изменяется при выполнении инструкций передачи управления и прерываний.
Регистр флагов EFLAGS содержит ряд битов (рис.$.4), которые имеют различное назначение: признаки состояния CF, PF, AF, ZF, SF, OF указывают определенные характеристики результата, полученного при выполнении инструкции; управляющий признак DF определяет порядок адресации операндов при выполнении последовательности инструкций обработки строк символов; системные признаки TF, IF, IOPL, NT, RF, VM, AC, VIF, VIP, ID задают режим процессора при обслуживании исключений и прерываний, организации ввода-вывода данных, решении последовательности вызываемых задач и реализации ряда других процедур. Младшие шестнадцать бит регистра EFLAGS (биты 15-0) представляют 16-разрядный регистр флагов FLAGS, который используется при выполнении программ, написанных для микропроцессоров 8086, 80186, 80286.
|
31 |
16 |
15 |
0 |
EIP |
|
IP |
||
EFLAGS |
|
FLAGS |
||
Рис. $.3. Указатель инструкций и регистр флагов IA-32
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1- |
0 |
0 |
NT |
IOPL |
OF |
DF |
IF |
TF |
SF |
ZF |
0 |
AF |
0 |
PF |
1 |
CF |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
ID |
VIP |
VIF |
AC |
VM |
RF |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
Рис. $.4. Формат содержимого регистра EFLAGS
Биты в регистре EFLAGS имеют следующее значение:
CF (Cary Flag) – признак переноса/заема, принимает значение CF=1 при возникновении переноса из старшего разряда обрабатываемых операндов.
PF (Parity Flag)– признак четности, принимает значение PF=1, если результат содержат четное число единичных бит.
AF (Auxiliary Flag) – признак дополнительного переноса/заема (полупереноса), принимает значение AF=1, если при выполнении операции возникает перенос между младшими тетрадами (из разряда 3 в разряд 4) обрабатываемых операндов; используется при операциях с операндами, представленными в двоично-десятичном коде (BCD).
ZF (Zero Flag) – признак нуля, принимает значение ZF=1 при получении нулевого результата операции.
SF (Sign Flag) – признак знака, принимает значение старшего (знакового) разряда результата операции (SF=0 – положительное число или ноль, SF=1 – отрицательное).
TF (Trap Flag) – признак трассировки (пошагового режима). При значении TF=1, после выполнения каждой инструкции процессор вызывает внутреннее прерывание типа 1 (INT 1).
IF (Interrupt-enable Flag) – признак разрешения прерывания, установка значения IF=1 разрешает обслуживание маскируемых аппаратных прерываний.
DF (Direction Flag) – признак направления в строковых операциях. При значении DF=0 вызывает автоматический инкремент содержимого индексных регистров ESI, EDI (SI, DI) после выполнения инструкции обработки символа, при DF=1 – декремент содержимого этих регистров; таким образом обеспечивается обработка символов слева направо (от младших адресов к старшим) или в обратном направлении (от старших адресов к младшим). Значение этого бита устанавливается пользователем перед выполнении соответствующих инструкций.
OF (Overflow Flag) – признак переполнения, принимает значение OF=1 в случае переполнения разрядной сетки при обработке операндов со знаком; значение признака для n-разрядных операндов определяется логическим выражением OF = Cn Сn-1, где Cn – перенос, возникающий в старшем (n-1)-ом разряде (знаковом), Сn-1 – перенос, возникающий в предыдущем (n-2)-ом разряде.
IOPL (Input/Output Privilege Level) – уровень привилегий ввода/вывода, задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение инструкций ввода/вывода.
NT (Nested Task) – признак вложенной задачи, принимает значение NT=1 при переключении процессора на выполнение другой задачи с помощью инструкции вызова CALL; используется для организации многозадачного режима.
RF (Resume Flag) – признак маскирования ошибок отладки, при установке значения RF=1 возможные ошибки отладки игнорируются при выполнении следующей инструкции; используется в процессе отладки программ совместно с регистрами отладки.
VM (Virtual 8086 Mode) – признак режима виртуального 8086, установка значения VM=1 вызывает переключение процессор в V-режим, при котором эмулируются возможности микропроцессора 8086. Попытка использования привилегированных инструкций в этом режиме вызовет исключение #GP. Бит может устанавливаться только в защищенном режиме: либо инструкцией IRET на нулевом уровне привилегий, либо переключением задач на любом уровне привилегий. На этот бит не действует инструкция POPF, а инструкция PUSHF всегда заносит в этот бит ноль. Его единичное значение может быть сохранено только в образе EFLAGS, автоматически сохраняемом при прерывании, переключении задач или при переходе в режим SMM.
AC (Alignment Check) – признак контроля выравнивания. Влияет только на выполнение программ на уровне привилегий 3. Установка значения АС=1 и бита АМ=1 в регистре CR0 вводит контроль выравнивания операндов при обращениях к памяти; в этом случае при обращении к невыровненному операнду (выборка слова по нечетному адресу или двойного слова по адресу, не кратному четырем) реализуется исключение типа #АС (ошибка выравнивания).
VIF (Virtual Interrupt Flag) – признак разрешения обслуживания виртуального прерывания (для P5+). Установка значения VIF=1 разрешает обслуживание запросов виртуальных прерываний, поступление которых фиксируется установкой признака VIP=1.
VIP (Virtual Interrupt Pending) признак запроса виртуального прерывания (для P5+). Значение VIP=1 устанавливается операционной системой в защищенном режиме, если внешний запрос прерывания поступает при выполнении программ пользователя (низший уровень привилегии CPL=3) с запрещенным обслуживанием прерываний;
ID (Identification) – признак доступности идентификации. Значение ID=1 указывает, что для данного процессора обеспечивается выполнение инструкции идентификации CPUID.
1 Добавим, что МП комплект это уже устаревший вид МП. Он был обусловлен недостаточно высоким уровнем технологии, не обеспечивающим нужную степень интеграции аппаратуры. Еще заметим, что среди МП комплектов выделялись так называемые секционные МП, которые могли увеличивать разрядность АЛУ за счет дополнительных корпусов.
2 За исключением случаев, когда микроконтроллер предназначен именно для управления сложным интерфейсом.
3 Это могут быть и математические функции (например, log10), и математические операции (например, сложение или умножение матриц).
4 Например, в математических сопроцессорах семейства ix87.
5 Заметим, что при этом в ПЗУ микропроцессора должны быть, по крайней мере, программа загрузки.
6 Если оба МП – элементы мультипроцессорной системы.
7 Так делается в программируемых логических матрицах (ПЛМ)
8 Заметим, что иногда скалярный универсальный МП может иметь в своем наборе векторные инструкции. Например, i8086 имеет инструкции сравнения двух векторов CMPS. Кроме того, современные скалярные универсальные МП имеют инструкции типа SIMD в наборах своих инструкций.
9 VLIW – Very Large Instruction Word (очень длинное командное слово).
10 Иногда CISC трактуется как Complex Instruction Set Computer – процессоры с комплексным набором инструкций.
11 Иногда RISC трактуется как Restricted Instruction Set Computer – процессоры с ограниченным набором инструкций.
