Программная модель 32 – разрядных микропроцессоров

Программная модель процессора представляет собой набор из основных внутренних регистров (рисунок 3.5). Все регистры процессора имеют собственное имя, по которому к ним возможно обращение по команде из программы. Регистры процессоров расширены до 32– разрядов, на что указывает буква Е стоящая перед именем регистра. По назначению и способу использования регистры можно разбить на следующие группы:

Ÿ Регистры общего назначения (EАХ, EВХ, EСХ, EДХ, ESI, EDI, EBP, ESP);

Ÿ Сегментные регистры (CS, DS, SS, ES, FS,GS);

Ÿ Указатель команд (EIP);

Ÿ Регистр (или указатель) флагов (EF);

Ÿ Системные адресные регистры (GDTR, IDTR, LDTR, TR);

Ÿ Управляющие регистры (CR0, CR1, CR2, CR3);

Ÿ Регистры отладки (DR0 …DR7);

Ÿ Регистры тестирования (TR3, TR4, TR5, TR6, TR7);

Ÿ модельно-специфические регистры (зависящие от конкретной модели процессора).

Опишем коротко состав и назначение этих регистров.

Регистры общего назначения

Регистры в командах могут адресоваться явно, их назначение аналогично назначению регистров процессора 8086.

31 16 15 0

  AH AX AL   EAX ( Extended accumulator, аккумулятор); EBX ( Extended base, база); ECL ( Extended counter, счетчик); EDX ( Extended date, данные); ESI ( Extended source index, индекс источника); EDI (Extended destination index, индекс приемника); ESP ( Extended base pointer, указатель базы); EBP ( Extended stack pointer, указатель стэка).
  BH BX BL
  CH CX CL
  DH DX DL
  SI
  DI
  SP
  BP

 

31 16 15 0

  IP EIP – instruction pointer, указатель команд;

 

31 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

 

 

CS Код Стэк Данные Данные Данные Данные
SS
DS
ES
FS
GS

 

15 0

 

 

Рисунок 3.5 – Программная модель процессора Intel x86

 

Рисунок 3.5 – Программная модель процессора Intel x86

 

Регистр ES – хранит адрес сегмента текущего дополнительного сегмента, который используется для работы над строками или хранения данных и программ.

Регистры сегментов

Эти регистры содержат 16-битные указатели (в реальном режиме) или селекторы дескрипторов (в защищенном режиме) сегментов CS (Code Segment — сегмент кодов команд), SS (Stack Segment — сегмент стека), DS (Data Segment — сегмент данных) Регистр DS – хранит адрес текущего сегмента данных используемых в программе. Регистр SS – хранит адрес сегмента стека., ES, FS и GS — дополнительные сегменты данных. Содержимое сегментных регистров не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. Использование сегментных регистров определяется типом обращения к памяти. Для многих типов обращений, возможно применение альтернативных сегментных регистров, которое вводится префиксами команд CS:, SS:, DS:, ES: FS: или GS:. С каждым из шести сегментных регистров связаны программно-недоступные скрытые регистры дескрипторов (их еще называют Segment Descriptor Cache — кэш сегментных регистров), автоматически загружаемые при загрузке соответствующих сегментных регистров. В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-битный базовый адрес, 32-битный лимит (размер сегмента) и атрибуты сегментов. По содержимому этих скрытых регистров, при каждом обращении к памяти, выполняется вычисление линейного адреса и проверка защиты. В защищенном режиме лимит может задаваться в пределах от 1 байта до 4 Гбайт.

ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF CF

 

Регистр флагов

 

Регистр флагов EFLAGS также расширен до 32 бит Биты 0-15, определенные для 8086 и 80286, имеют прежнее назначение, ряд флагов добавился с появлением процессоров 4-го и 5-го поколений. Флаги регистра разбиты на три группы: - системные флаги; - флаги состояний; - управляющие флаги.

Назначение битов системных флагов регистра EFLAGS описано ниже, назначение флагов управления и состояния смотри в МП 8086.

системные флаги

VIP (Virtual Interrupt Pending) — виртуальный запрос прерывания (Р5+).

ID (Id Flag) — флаг доступности команды идентификации CPUID (P5+ и некоторые 486).

AC (Alignment Check) — флаг контроля выравнивания.

VM (Virtual 8086 Mode) — в защищенном режиме включает режим виртуального процессора 8086.

RF (Resume Flag) — флаг возобновления, используется совместно с регистрами точек останова.

IOPL (Input/Output Privilege Level) — уровень привилегий ввода/вывода.

NT (Nested Task Flag) — флаг вложенной задачи.

 

Управляющие регистры (Control Registers) CRO, CR1, CR2, CR3 32- битные регистры, хранят признаки состояния процессора (рисунок 3.6) Регистр CRO обеспечивает общее управление режимами работы процессора.

Регистр CR1 не используется.

Регистр CR2 (Page Fault Linear Address) хранит 32-битный линейный адрес, по которому был получен последний отказ страницы памяти.

Регистр CR3 (Page Directory Base Register) в старших 20 битах хранит физический базовый адрес таблицы каталога страниц.

Регистр CR4 содержит биты разрешения архитектурных расширений

31 16 12 1110 9 8 7 6 5 4 3 2 1 0

                                          OSXM OSFX P C E P G E M C E P A E PSE   D E   T D P V I   V E   CR4     CR3   CR2 CR1 CR0
Базовый адрес каталога страниц   P C D P W T      
Линейный адрес отказа страницы памяти
 
P G C D N W       AM   W P           N E ET T S E M M P P E
                                                                                                 

 

Рисунок 3.6 – Управляющие регистры процессора

.

Системные адресные регистры

Системные адресные регистры (рисунок 3.7) предназначены для ссылок на сегменты и таблицы в защищенном режиме.

Регистры GDTR (Global Descriptor Table Register) и IDTR (Interrupt Descriptor Table Register) программно загружаются 6-байтными операндами, содержащими 32-битный линейный базовый адрес и 16-битный лимит глобальной таблицы дескрипторов и таблицы дескрипторов прерываний. В регистр задачи TR (Task Register) и регистр селектора локальной таблицы дескрипторов LDTR (Local Descriptor Table register) загружаются 16-битные селекторы дескрипторов сегмента состояния задачи TSS и локальной таблицы дескрипторов LDT.

Регистры отладки (Debug Register) предназначены для задания и управления отладочными точками останова.

Регистры DRO...DR3 (Linear Breakpoint Address 0...3) хранят 32-битные линейные адреса точек останова.

Регистры DR4, DR5 в процессоре Pentium при вклю­ченном расширении отладки обращение к этим регистрам вызывает исключение недопустимого кода операции (#UD).

Регистр DR6 (Breakpoint Status) отражает состояние контрольной точки.

47 16 15 0

GDTR   IDTR 32 – битные линейные базовые адреса Лимиты
32 – битные линейные базовые адреса Лимиты

15 0

TR LDTR Селекторы
Селекторы

 

Системные сегментные регистры

 

Автоматически загружаемые регистры дескрипторов

32-битные линейные адреса 20-битные лимиты сегментов Атрибуты
32-битные линейные адреса 20-битные лимиты сегментов Атрибуты

 

Рисунок 3.7 –Системные адресные регистры

Регистр DR7 (Breakpoint Control) управляет установкой контрольных точек.

Регистры тестирования

TR3 – регистр данных внутреннего КЭШа.

TR4 – тестовый регистр состояния КЭШа.

TR5 – управляющий регистр тестирования КЭШа.

TR6 – регистр для теста кэширования страниц.

TR7 – регистр данных для теста кэширования страниц.

Модельно-специфические регистры MSR (Model-Specific Registers) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями. Их назначение привязывается к архитектуре конкретного процессора, состав меняется от модели к модели, доступ привилегирован.

Организация памяти

Память для процессоров представляется в виде линейной последовательности байт, который является минимальной адресуемой ячейкой памяти. Далее адресуются слова (16 бит), двойные слова (32 бит) и учетверенные слова (64 бит) и поля байт.

Применительно к памяти различают три адресных пространства: логическое, линейное и физическое.

Плоское (линейное) логическое адресное пространство. Состоит из массива байтов, не имеющего определенной структуры. Трансляция адреса в этом случае не требуется, поскольку логический адрес совпадает с физическим адресом.

Сегментированное логическое адресное пространство. Состоит из не­скольких или большого числа сегментов, каждый из которых со­держит переменное число байтов. Логический адрес содержит две части — идентификатор сегмента и смещение внутри сегмента.

Страничное логическое адресное пространство. Состоит из большого числа страниц, каждая из которых включает фиксированное число байтов. Логический адрес состоит из номера (идентификатора) страницы и смещения внутри страницы.

Сегментно-страничное логическое адресное пространство. Состоит из

сегментов, которые, в свою очередь, состоят из страниц. Логический адрес страницы состоит из идентификатора сегмента и смещения внутри сегмента. Затем производится трансляция логического адреса в номер страницы и смещение в ней, которые транслируются в физический адрес. Принцип трансляции адреса показан на рисунке 3.8.

Селектор (точнее, его поле — старшие 13 бит) представляет собой индекс в таблице дескрипторов сегментов, т.е. по сути это поле содержит идентифицирующий номер сегмента. В свою очередь каждый элемент таблицы дескрипторов сегментов содержит базовый адрес сегмента. Процессор добавляет к нему смещение и получает 32-битный линейный адрес.

Если страничный механизм не включен, процессор считает, что линейный адрес является физическим, и выдает его на адресную шину. В противном случае процессор осуществляет дополнительную трансляцию линейного адреса в физический. Это делается с помощью таблиц страниц.

Основным режимом работы 32-разрядных процессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств (рисунок 3.9).

Логический адрес, также называемый виртуальным, состоит из селектора сегмента (в реальном режиме — просто адреса сегмента) и эффективного адреса, называемого также смещением (offset).

Селектор сегмента хранится в старших 14 битах сегментного регистра (CS, DS, ES, SS, FS или GS), участвующего в адресации конкретного элемента памяти. По значению селектора из специальных таблиц, хранящихся в памяти, извлекается начальный адрес сегмента.

Эффективный адрес формируется суммированием компонент base, index, displacement с учетом масштаба (scale). Блок сегментации транслирует логическое адресное пространство в 32-битное пространство линейных адресов.

Линейный адрес образуется сложением базового адреса сегмента с эффективным адресом. Базовый адрес сегмента в реальном режиме образуется умножением содержимого используемого сегментного регистра на 16 (как и в 8086). В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по адресу указанному в сегментном регистре.

32-битный физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора

Режимы адресации

Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов:

смещение (Displacement или Disp) 8-, 16- или 32-битное число, включенное в команду;

– база (Base) –содержимое базового регистра;

Индекс (Index) – содержимое индексного регистра;

Масштаб (Scale) –множитель (1, 2, 4 или 8), указанный в коде инструкции.

Эффективный адрес вычисляется по формуле

EA=Base+Index × Scale + Disp

Процессор может работать с 32-битной или 16-битной адресацией. 16-битная адресация функционирует так же, как и в процессорах 8086 и 80286, при этом в качестве компонентов адреса используются младшие 16 бит соответствующих регистров. При 32-битной адресации применяются расширенные 32-разрядные регистры и дополнительные режимы с масштабированием индекса.

Стек

 

Стек представляет собой непрерывную область памяти, адресуемую регистрами ESP (указатель стека) и SS (селектор сегмента стека). Особенность стека заключается в том, что данные в него помещаются и извлекаются по принципу «первым вошел — последним вышел». Данные помещаются в стек с помощью инструкции PUSH (заталкивание), а извлекаются по инструкции POP (вытаскивание). За одну операцию можно поместить или извлечь только слово (2 байта) или двойное слово (4 байта). При записи данных первым делом указатель стека декрементируется на 2 или 4, в зависимости от разрядности данных; после этого данные помещаются в сегмент, определенный регистром SS, со смещением, определяемым новым значением ESP. При извлечении данные считываются из памяти по адресу SS:SP, после чего указатель стека инкрементируется на 2 или 4.

Кроме явного использования стека инструкциями PUSH и POP, стек автоматически используется процессором при выполнении инструкций вызова (CALL), возвратов (RET и IRET), входа и выхода из процедур (ENTER и LEAVE), а также при обработке прерываний.

По инструкции CALL в стек помещается адрес возврата – значение регистров CS (при длинном вызове) и EIP, указывающие на инструкцию, следующую после инструкции вызова.

По прерыванию в стек помещается также и значение регистра EFLAGS. По инструкциям возврата эти значения извлекаются из стека в соответствующие регистры, и процессор продолжает выполнять прерванную последовательность инструкций.

Стек используют для следующих целей:

– организации прерываний, вызовов и возвратов;

– временного хранения данных, когда под них нет смысла выделять фиксированные места в памяти;

– передачи и возврата параметров при вызовах процедур.

До использования стека он должен быть инициализирован — должны быть установлены значения селектора SS и указателя ESP так, чтобы они указывали на область реальной оперативной памяти.








Дата добавления: 2016-02-24; просмотров: 2021;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.024 сек.