- •ОБразования российской федерации
- •Оглавление
- •Краткое содержание
- •Теоретическая часть
- •Организация памяти эвм
- •Организация основной памяти
- •Локальная память и стек 32-разрядных процессоров
- •Режимы адресации операндов
- •Выполнение операции в алу
- •Язык микроопераций
- •Описание слов, регистров и шин
- •Описание массива данных и памяти.
- •Описание микроопераций
- •Условные микрооператоры.
- •Порядок выполнения работы
- •Оформление пояснительной записки
- •Вопросы для самопроверки (защиты к/р)
- •Список литературы
Теоретическая часть
В теоретической части данных методических указаний особое внимание уделяется вопросам организации защищенного режима работы 32-разрядных процессоров, вычислению исполнительного, линейного и физического адреса при выборке команды и операндов из оперативной памяти, алгоритмам выполнения операций в АЛУ. Краткий обзор теоретического материала, необходимого в ходе курсового проектирования, приводится ниже.
Организация памяти эвм
Организация основной памяти
Пространство памяти предназначено для хранения кодов инструкций и данных, для доступа к последним имеется богатый выбор режимов адресации. Память для процессоров представляется в виде линейной последовательности байт.
Память ЭВМ подразделяется на байты(8 бит),слова(16 бит),двойные слова (32 бит) иучетверенные слова(64 бит). Минимальным адресуемым элементом является байт. Все пространство памяти разбивается напараграфы– области из 16 смежных байт, начиная с нулевого адреса (адреса параграфов кратны 16).
Более крупными единицами организации памяти являются страницы и сегменты. Сегмент и страница– это блок пространства памяти определенного назначения. Сегменты имеют имена (логический адрес), различный размер и могут начинаться в любом месте ОП.
Память может логически организовываться в виде одного или множества сегментов переменной длины. Каждой задаче предоставляется доступ к одному или нескольким сегментам трёх типов: сегмент кода, сегмент стека и сегмент данных, различающимся порядком доступа к информации внутри сегмента.
Кроме сегментации, в защищенном режиме работы процессора возможно разбиение логической памяти на страницыфиксированного размера - 4 Кбайт, каждая из которых может отображаться на любую область физической памяти, также разбитой на страницы аналогичного размера. Начиная с процессоровi586, появилась возможность увеличения размера страницы до 4 Мбайт.
Сегментация и разбиение на страницы могут применяться в любых сочетаниях. Сегментация является средством организации логической памяти на прикладном уровне. Разбиение на страницы применяется на системном уровне для управления физической памятью.
Локальная память и стек 32-разрядных процессоров
Процессор работает непосредственно с данными, полученными из основной памяти, но размещенными в высокоскоростных элементах локальной памяти процессора – регистрах. Каждый регистр может хранить одно слово данных, разрядность которого обычно определяется разрядностью процессора. Для сохранения преемственности ПО, созданного для 16-разрядных процессоров, инструкции, которые прежде адресовались к 16-разрядным регистрам, теперь могут адресоваться и к 32-разрядным расширенным регистрам при том же коде операции.
Регистры 32-разрядных процессоров Intelподразделяются на несколько основных категорий.
Регистры данных (см. рис.1 а)). Их особенность заключается в том, что они могут использоваться целиком, как двойное слово (EAX[0÷31], EBX[0÷31], ECX[0÷31], EDX[0÷31]), отдельно младшее слово (AX[0÷15],BX[0÷15],CX[0÷15],DX[0÷15]), отдельно младший байт (AL[0÷7]=EAX[0÷7],BL,CL,DL) и старший байт младшего слова (AH[0÷7]=EAX[8÷15],BH,CH,DH). Неявное использование регистров подразумевает, что они участвуют в следующих операциях (см. рис. 1,а):
Регистры-указатели
ЕSP[0÷31] (StackPointer) - указатель стека, содержит относительный адрес вершины стека, используется совместно с сегментным регистромSS,
EВР[0÷31] (BasePointer– указатель базы), используется для произвольного перемещения по сегменту стека совместно с сегментным регистромSS;
Индексные регистрыиспользуются для операций над строками.
ESI[0÷31] (SI[0÷15]) Source Index - индекс источника,
EDI[0÷31] (DI[0÷15]) Destination Index - индекс назначения;
Регистр флагов EFLAGS[0÷31]. Назначение разрядов регистраEFLAGSприведено ниже в табл. 1, структура показана на рис. 1 б).
Таблица 1. Назначение разрядов регистра флагов EFLAGS
|
Название флага |
Назначение флага |
|
CF (Carry Flag) |
Флаг переноса устанавливается в 1, если в результате выполнения операции был перенос из старшего разряда |
|
PF (Parity Flag) |
Флаг паритета устанавливается в 1, если младшие 8 бит результата операции содержат четное число двоичных единиц. |
|
AF (Auxiliary Flag) |
Флаг вспомогательного переноса в старшую тетраду (или заёма) при операциях над упакованными двоично-десятичными числами. |
|
ZF (Zero Flag) |
Флаг нуля устанавливается в 1, если результат операции равен нулю. |
|
SF (Sign Flag) |
Флаг знака показывает знак результата операции, устанавливаясь в 1 при отрицательном результате. |
|
TF (Trace Flag) |
Управляющий флаг трассировки |
|
IF (Interrupt Flag) |
Управляющий флаг разрешения прерываний |
|
DF (Direction Flag) |
Управляющий флаг направления используется особой группой команд, предназначенных для обработки строк. |
|
OF (Overflow Flag) |
Флаг переполнения фиксирует выход результата операции за пределы допустимого для данного процессора диапазона значений. |
|
IOPL (Input/Output Privilege Level) |
Двухразрядное поле привилегий в/в указывает на максимальное значение уровня текущего приоритета, при котором команды ввода-вывода выполняются без генерации исключительной ситуации. |
|
NT (Nested Task) |
Флаг вложенной задачи. |
|
RF (Restart Flag) |
Управляющий флаг рестарта. |
|
VM (Virtual Mode) |
Управляющий флаг виртуального режима используется для перевода процессора в режим виртуального процессора 8086. |
|
AC (Alignment Check) |
Флаг контроля выравнивания, при установленном флаге, при исполнении программ с уровнем привилегии 3, при обращении к операнду, который не выровнен по соответствующей границе (2, 4, 8 байт) произойдёт исключение #AC. |
|
VIF (Virtual Interrupt Flag) |
Флаг разрешения прерывания для многозадачных систем. |
|
VIP (Virtual Interrupt Pending) |
Виртуальный запрос прерывания. |
|
ID (ID Flag) |
Флаг доступности команды идентификации CPUID. |
Указатель инструкцийEIP[0÷31] (InstructionPointer) содержит относительный адрес следующей исполняемой команды внутри сегмента кода. При 16-битной адресации используются только младшие 16 битIР[0÷16]. Используется совместно с сегментным регистром СS;
Регистры сегментов(см. рис.2) содержат 16-разрядные селекторы дескрипторов сегментов, включающие три поля:Index– № строки в таблице дескрипторов,TI– № таблицы дескрипторов,RPL– уровень привилегий (см. рис.3). Существуют следующие регистры сегментов:
CS[0÷15] (CodeSegment– регистр сегмента кодов команд),
SS[0÷15] (StackSegment– регистр сегмента стека),
DS[0÷15] (DataSegment– регистр сегмента данных),
ES[0÷15],FS[0÷15],GS[0÷15]– регистры дополнительных сегментов данных.
Содержимое сегментных регистров (селектор) не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. С каждым из шести сегментных регистров связан программно-недоступный скрытый регистр дескриптора (SegmentDescriptorCache-SDC), автоматически загружаемый при загрузке соответствующих сегментных регистров.Дескрипторы(см. рис.2,3) используются только в защищённом режиме работы процессора и представляют собой 8-байтные структуры данных, используемые для определения свойств программных элементов (сегментов).

Рис. 2. Сегментные регистры процессора

Рис. 3. Структура скрытого регистраSDCи сегментного регистра
В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-разрядный базовый адрес сегмента в ОП, 32- разрядный размер сегмента и атрибуты сегментов (см. разд. Error: Reference source not found). По содержимому этих скрытых регистров при каждом обращении к памяти выполняется вычисление линейного адреса и проверка привилегий (см. разд. Error: Reference source not found), причём именно эти регистры задают свойства сегментов в защищённом режиме. Назначение скрытых полейдескриптораSDCследующее (для гипотетического сегментного регистраSR):
SR.SDC[95÷64]– поле базового адреса сегмента, задающее начальный адрес сегмента в линейном адресном пространстве,
SR.SDC[63÷32]– поле размера сегмента, которое определяет размер сегмента в байтах,
SR.SDC.P[23]– признак присутствия сегмента в ОП компьютера (0 — сегмент «сброшен» на диск, 1 — сегмент присутствует в ОП),
SR.SDC.DPL[22÷21]– 2-разрядное поле, определяющее уровень привилегий описываемого дескриптором сегмента,
SR.SDC[19÷16]– поле «тип сегмента», определяющее тип сегмента и типы операций, допустимых над сегментом:
SR.SDC[19]– подчинённый (1) или неподчинённый (0) сегмент,
SR.SDC[17]=1, для сегмента разрешены операции чтения,
SR.SDC[18]=1, для сегмента разрешены операции записи.
SR[15÷3] – полеIndexсодержит номер дескриптора в таблице дескрипторов (LDTилиGDT),
SR[2] – битTIселектора, определяет выбор дескриптора сегмента из локальной или глобальной таблицы дескрипторов (TI=1 изLDT,TI=0 изGDT)
SR[1÷0] – полеRPLопределяет .
Управляющие регистры(ControlRegisters) CR0[0÷31],CR1[0÷31],CR2[0÷31],CR3[0÷31],CR4[0÷31] хранят признаки состояния процессора, общие для всех задач.
Регистр CR0обеспечивает общее управление режимами работы процессора, сопроцессора, кэш-памяти, ОП и проч. Полностью назначение разрядов регистра CR0 не приводится. При значении 31 бита CR0.PG=1 (PagingЕnаble– включение механизма страничной переадресации ОП) разрешена страничная трансляция линейных адресов в физические.
Регистр CR1не используется.
Регистр СR2(PageFaultLinearAddress) хранит 32-разрядный линейный адрес, по которому был получен последний отказ страницы памяти.
Регистр CR3(PageDirectoryBaseRegister) содержит некоторые системные флаги и 20 старших разрядов базового адреса таблицы каталога страниц (CR3.ВА= CR3[31÷12]).
Регистр CR4содержит разрешения архитектурных расширений. При значении 4 бита CR4.PSE(PageSizeExtension) разрешено расширение размера страницы до 4Кб или 2Мб, при значении 4 бита CR4.PАE(PhysicalAddressExtension) разрешено расширение физического адреса до 36 разрядов.
Системные адресные регистрыпредназначены для ссылок на таблицы дескрипторов сегментов в защищенном режиме.
Регистр GDTR[0÷47] (GlobalDescriptorTableRegister– регистр глобальной таблицы дескрипторов) (см. рис. 4).

Рис. 4. Global Descriptor Table Register (GDTR)
GDTRсодержит поле 32-разрядного базового адреса и 16-разрядного размера глобальной таблицы дескрипторов. Размер таблицы задается количеством байт, принадлежащихGDT. Оно ограничено 216байт = 64Кбайт.
Регистр LDTR[0÷15](LocalDescriptorTableRegister) локальной таблицы дескрипторов имеет структуру, аналогичную структуре сегментного регистра и его теневой части (см. рис. 2 и 3), и содержит селектор локальной таблицы дескрипторовLDT. Теневая частьLDTRсодержит 32-разрядные базовый адрес (LDTR.BASE[0÷31]) и размер (LDTR.LIMIT[0÷31]) таблицыLDT, а также поле атрибутов (LDTR.ATR[0÷15]).
Регистр IDTR[0÷47](InterruptDescriptorTableRegister– регистр таблицы дескрипторов прерываний) содержит базовый адрес и размер таблицы прерываний и имеет аналогичнуюGDTRструктуру.
Регистр задачи TR[0÷15] (TaskRegister) содержит селектор дескриптора сегмента состояния задачиTSS, в котором сохраняются значения всех регистров задачи при переключении задач. Имеет структуру, аналогичную структуре сегментного регистра и его теневой части.
Регистры тестирования(TestRegister) предназначаются для тестирования кэш-памяти и блока страничной переадресации.
Модельно-специфические регистры MSR(Model-SpecificRegisters) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями.
Стек
Стек представляет собой непрерывную область оперативной памяти, выделяемую для каждой задачи, с логическим адресом SS:ESP(ESP[0÷31] – регистр-указатель стека – исполнительный адрес внутри сегмента стека) иSS[0÷15] (селектор сегмента стека), подробнее см. л.р.№4.
Кроме явного использования стека инструкциями PUSHиPOP, стек автоматически используется процессором при обработке прерываний и для временного хранения данных (например, сохранение адреса возврата при вызове процедур).
До использования стека он должен быть инициализирован - должны быть установлены значения селектора SSи указателя ESP так, чтобы они указывали на область реальной оперативной памяти (выполняется ОС).
В защищённом режиме 32-разрядного процессора данные помещаются в стек и вынимаются из стека по 4 байта. Регистр ESPвсегда изменяется на 4.
Стек заполняется в сторону младших адресов (в отличие от обычных сегментов). При чтении – выталкивании (РОР) – данных из стека ESPувеличивается на 4 (ESP=ESP+4), при записи – помещении (PUSH) данных в стек –ESPуменьшается на 4 (ESP=ESP-4).
При выполнении операций, использующих стек, возможно появление исключения #SS(нарушение границ, отсутствие сегмента стека, загрузка нулевого селектора, см. л.р.№ 5).
