
Описание регистров ia-32 Основные функциональные регистры
Состав основных функциональных регистров идентичен для всех 32-разрядных микропроцессоров семейства Intel80х86 иPentium.
Восемь 32-разрядных регистров общего назначения(generalpropose) ЕАХ, ЕВХ, ЕСХ, 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(CodeSegment– сегмент кодов инструкций),SS(StackSegment– сегмент стека),DS(DataSegment– сегмент данных),ES,FSиGS– дополнительные сегменты данных (Рис. $.2).
|
Сегментные регистры |
Скрытые регистры дескрипторов | ||||
|
15 |
0 |
|
|
| |
Код |
CS |
|
|
| ||
Стек |
SS |
|
|
| ||
|
|
DS |
|
|
| |
Данные |
|
ES |
|
|
| |
|
FS |
|
|
| ||
|
|
GS |
|
|
| |
|
|
Базовый адрес |
Размер сегмента |
Атрибуты сегмента |
Рис. $.2. Сегментные регистры процессора IA-32
Сегментных регистров FS и GS в 16-разрядных процессорах не было. Содержимое сегментных регистров не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. Использование сегментных регистров определяется типом обращения к памяти. Для многих типов обращений возможно применение альтернативных сегментных регистров, которое вводится префиксами инструкций CS:,SS:,DS:,ES:,FS:илиGS:. С каждым из шести сегментных регистров связаны программно-недоступные скрытые регистры дескрипторов (их еще называютSegmentDescriptorCache– кэш сегментных регистров), автоматически загружаемые при загрузке соответствующих сегментных регистров. В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 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 (CaryFlag) – признак переноса/заема,принимает значениеCF=1 при возникновении переноса из старшего разряда обрабатываемых операндов.
PF (ParityFlag)– признак четности,принимает значениеPF=1, если результат содержат четное число единичных бит.
AF (AuxiliaryFlag)–признак дополнительного переноса/заема (полупереноса),принимает значениеAF=1, если при выполнении операции возникает перенос между младшими тетрадами (из разряда 3 в разряд 4) обрабатываемых операндов; используется при операциях с операндами, представленными в двоично-десятичном коде (BCD).
ZF (ZeroFlag) – признак нуля,принимает значениеZF=1 при получении нулевого результата операции.
SF(SignFlag) – признак знака,принимает значение старшего (знакового) разряда результата операции (SF=0 – положительное число или ноль,SF=1 – отрицательное).
TF (TrapFlag) – признак трассировки (пошагового режима). При значенииTF=1, после выполнения каждой инструкции процессор вызывает внутреннее прерывание типа 1 (INT1).
IF (Interrupt-enableFlag) – признак разрешения прерывания, установка значенияIF=1 разрешает обслуживание маскируемых аппаратных прерываний.
DF (DirectionFlag) – признак направления в строковых операциях. При значенииDF=0 вызывает автоматический инкремент содержимого индексных регистровESI,EDI(SI,DI) после выполнения инструкции обработки символа, приDF=1 – декремент содержимого этих регистров; таким образом обеспечивается обработка символов слева направо (от младших адресов к старшим) или в обратном направлении (от старших адресов к младшим). Значение этого бита устанавливается пользователем перед выполнении соответствующих инструкций.
OF (OverflowFlag) – признак переполнения,принимает значениеOF=1 в случае переполнения разрядной сетки при обработке операндов со знаком; значение признака для n-разрядных операндов определяется логическим выражениемOF=Cn Сn-1, гдеCn– перенос, возникающий в старшем (n-1)-ом разряде (знаковом), Сn-1– перенос, возникающий в предыдущем (n-2)-ом разряде.
IOPL(Input/OutputPrivilegeLevel) – уровень привилегий ввода/вывода, задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение инструкций ввода/вывода.
NT (NestedTask) – признак вложенной задачи, принимает значениеNT=1 при переключении процессора на выполнение другой задачи с помощью инструкции вызоваCALL; используется для организации многозадачного режима.
RF (ResumeFlag) – признак маскирования ошибок отладки, при установке значенияRF=1 возможные ошибки отладки игнорируются при выполнении следующей инструкции; используется в процессе отладки программ совместно с регистрами отладки.
VM (Virtual8086Mode) – признак режима виртуального 8086, установка значенияVM=1 вызывает переключение процессор в V-режим, при котором эмулируются возможности микропроцессора 8086. Попытка использования привилегированных инструкций в этом режиме вызовет исключение #GP. Бит может устанавливаться только в защищенном режиме: либо инструкциейIRETна нулевом уровне привилегий, либо переключением задач на любом уровне привилегий. На этот бит не действует инструкцияPOPF, а инструкцияPUSHFвсегда заносит в этот бит ноль. Его единичное значение может быть сохранено только в образеEFLAGS, автоматически сохраняемом при прерывании, переключении задач или при переходе в режимSMM.
AC (AlignmentCheck) – признак контроля выравнивания. Влияет только на выполнение программ на уровне привилегий 3. Установка значения АС=1 и бита АМ=1 в регистреCR0 вводит контроль выравнивания операндов при обращениях к памяти; в этом случае при обращении к невыровненному операнду (выборка слова по нечетному адресу или двойного слова по адресу, не кратному четырем) реализуется исключение типа #АС (ошибка выравнивания).
VIF (VirtualInterruptFlag) – признак разрешения обслуживания виртуального прерывания (дляP5+). Установка значенияVIF=1 разрешает обслуживание запросов виртуальных прерываний, поступление которых фиксируется установкой признакаVIP=1.
VIP (VirtualInterruptPending) признак запроса виртуального прерывания (дляP5+). ЗначениеVIP=1 устанавливается операционной системой в защищенном режиме, если внешний запрос прерывания поступает при выполнении программ пользователя (низший уровень привилегииCPL=3) с запрещенным обслуживанием прерываний;
ID (Identification) – признак доступности идентификации. ЗначениеID=1 указывает, что для данного процессора обеспечивается выполнение инструкции идентификацииCPUID.
1Добавим, что МП комплект это уже устаревший вид МП. Он был обусловлен недостаточно высоким уровнем технологии, не обеспечивающим нужную степень интеграции аппаратуры. Еще заметим, что среди МП комплектов выделялись так называемые секционные МП, которые могли увеличивать разрядность АЛУ за счет дополнительных корпусов.
2За исключением случаев, когда микроконтроллер предназначен именно для управления сложным интерфейсом.
3Это могут быть и математические функции (например,log10), и математические операции (например, сложение или умножение матриц).
4Например, в математических сопроцессорах семействаix87.
5Заметим, что при этом в ПЗУ микропроцессора должны быть, по крайней мере, программа загрузки.
6Если оба МП – элементы мультипроцессорной системы.
7Так делается в программируемых логических матрицах (ПЛМ)
8Заметим, что иногда скалярный универсальный МП может иметь в своем наборе векторные инструкции. Например,i8086 имеет инструкции сравнения двух векторовCMPS. Кроме того, современные скалярные универсальные МП имеют инструкции типаSIMDв наборах своих инструкций.
9VLIW–VeryLargeInstructionWord(очень длинное командное слово).
10ИногдаCISCтрактуется какComplexInstructionSetComputer– процессоры с комплексным набором инструкций.
11ИногдаRISCтрактуется какRestrictedInstructionSetComputer– процессоры с ограниченным набором инструкций.