Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программная модель 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
31 16 15 0
31 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
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 Гбайт.
Регистр флагов
Регистр флагов 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
Рисунок 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
15 0
Системные сегментные регистры
Автоматически загружаемые регистры дескрипторов
Рисунок 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 так, чтобы они указывали на область реальной оперативной памяти. Прерывания и исключения Прерывания и исключения нарушают нормальный ход выполнения программы для обработки внешних событий или команд прерываний. Прерывания подразделяются на аппаратные, вызываемые электрическими сигналами на входах процессора, и программные, выполняемые по команде INTxx. Программные прерывания, строго говоря, прерываниями не являются, это лишь своеобразный способ вызова процедур, но процессором они обрабатываются как разновидность прерываний. По прерыванию или исключению процессор сохраняет в стеке регистр (E)FLAGS и указатель CS: (E)IP на ту инструкцию, которую он должен будет выполнить после обработки прерывания. Этой инструкцией будет следующая за той, во время исполнения которой произошло прерывание. В защищенном режиме при возникновении ряда исключений в стеке сохраняется еще и код ошибки. После сохранения этих значений процессор переходит к исполнению программы обработки данного прерывания (исключения), определяя точку входа в него через номер (0-255) по таблице прерываний. Последней командой обработчика прерывания должна быть инструкция возврата IRET, по которой из стека восстанавливается указатель CS: (E)IP и прежнее значение флагов. Таким образом, процессор по команде прерываний выполняет следующие действия: 1. записывает в стек, по адресу SS: SP-2, содержимое регистра флагов; 2. записывает в стек по адресу SS: SP-4, содержимое сегментного регистра команд. 3. записывает в стек SS по адресу SS: SP-6 содержимое регистра указателя команд IP; 4. запрещает внешние прерывания, IF: = 0; 5. вычисляет адрес вектора прерываний (содержимое регистра АН умножает на 4 и получает адрес вектора, где хранятся CS и IP программы обрабатывающей данное прерывание). Область векторов прерываний находится в памяти с адреса 000H по 3FFH. Причем в каждом векторе, длинной в 4 байта, в двух байтах, по младшим адресам, находится IP, а двух байтах старших адресов CS; 6. выставляет вычисленный адрес на шину адресов и загружает из памяти в регистры CS и IP содержимое вектора; 7. разрешает внешние прерывания, IF: = 1; 8. начинает выполнять базовый цикл работы процессора. Аппаратные прерывания выполняются по такому же алгоритму иподразделяются на маскируемые и немаскируемые. Маскируемые прерывания выполняютсяпри установленном флаге разрешения (IF=1). Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Его обработка не может прерываться до выполнения команды IRET. Исключения (Exceptions), или особые случаи, подразделяются на отказы, ловушки и аварийные завершения. Различия заключаются в сохраняемых значениях CS: (E)IP. Отказ (fault) – это исключение, которое обнаруживается и обслуживается до выполнения инструкции, вызывающей ошибку. После обслуживания этого исключения управление возвращается снова на ту же инструкцию (включая все префиксы), которая вызвала отказ. Ловушка (trap) – это исключение, которое обнаруживается и обслуживается после выполнения инструкции, его вызывающей. После обслуживания этого исключения управление возвращается на следующую инструкцию. К классу ловушек относятся и программные прерывания. Аварийное завершение (abort) — это исключение, которое не позволяет точно установить инструкцию, его вызвавшую. Оно используется для сообщения о серьезной ошибке, такой, как аппаратная ошибка или повреждение системных таблиц. В защищенном режиме каждому номеру (0-255) прерывания или исключения соответствует элемент в таблице дескрипторов прерываний IDT (Interrupt Descriptor Table). В реальном режиме таблица прерываний содержит дальние адреса (двойные слова) обслуживающих процедур и после сброса располагается, начиная с нулевых адресов. Популярное: |
Последнее изменение этой страницы: 2016-03-17; Просмотров: 970; Нарушение авторского права страницы