Московский Государственный Институт Электроники и Математики
Курсовая работа
по дисциплине
«Организация ЭВМ»
на тему
«Моделирование процедур выборки операндов для системы команд 32-разрядных процессоров»
Преподаватель: Выполнил:
Иванова Е. М. студент группы С-33
Бондарева А.В.
Москва 2003 г.
Содержание курсовой работы:
1. Задание для курсовой работы. 3
Алгоритм выполнения команды. 3
2. Постановка задачи. 3
2.1. Дано. 3
2.2. Требуется. 3
2.3. Ограничения. 4
3. Метод решения. 4
Эффективный адрес 5
Линейный адрес 5
Физический адрес 7
4. Описание алгоритма. 9
Укрупненный алгоритм выполнения команды DIV WORD PTR A[EBX][ESI]. 9
Алгоритм формирование базового адреса селектора DS с применением глобальной таблицы дескрипторов. 10
Формирование базового адреса селектора DS с применением локальной таблицы дескрипторов. 11
Вычисление базового адреса локальной таблицы. 12
Вычисление базового адреса сегмента данных. 13
Формирование физического адреса 14
Выполнение операции логического сложения 15
5. Вывод. 16
-
Задание для курсовой работы.
Составить алгоритм процедуры выборки операндов из оперативной памяти в защищенном режиме работы процессора для заданного механизма страничной переадресации и заданной команды ассемблера из системы команд 32-разрядных процессоров.
Номер варианта — 19.
Механизм страничной переадресации — PAE-4Кб.
Режимы адресации — базово-индексный со смещением.
Комманда ассемблера — DIV (DIVide unsigned) – беззнаковое деление операндов делимое и делитель.
Действие: делимое задается неявно, и его размер зависит от размера делителя. Местоположение делимого, делителя, частного и остатка, в зависимости от из размера, показаны в следующей таблице.
Размер операнда | Делимое | Делитель | Частное | Остаток |
Слово/байт | AX | r8/m8 | AL | AH |
Дв.слово/слово | DX:AX | r16/m16 | AX | DX |
Здесь r – регистр, m – ячейка памяти.
После выполнения команды флаги OF, SF, ZF, AF, PF, CF имеют неопределенные значения.
Использование в качестве делителя непосредственных операндов не допускается.
Алгоритм выполнения команды.
1. Выборка операнда делимое и копирование его в регистр-накопитель.
-
Выборка операнда делитель и непосредственное деление на него содержимого накопителя, причем частное и остаток записываются в регистры, указанные в таблице. Например, при делении слова (в регистре AX) на байт (в регистре или ячейке памяти) частное (8 бит) будет записано в регистр AL, а остаток (8 бит) – в регистр AH. Примечание. При делении на 0 возникает исключение #DE.
-
Постановка задачи.
В соответствии с заданием необходимо описать алгоритм процедуры выборки операндов из оперативной памяти для команды div при базово-индексной адресации и PAE-4Кб механизмом страничной переадресации. Команда, удовлетворяющая таким условиям:
DIV WORD PTR A[EBX][ESI]
2.1. Дано.
Делитель находится в памяти с логическим адресом DS:A[EBX][ESI].
Делимое — в регистре AX, так как размер делителя — байт.
2.2. Требуется.
Из таблицы пункта 1 и заданной команды следует, что надо поместить частное от деления делимого на делитель в регистр AL, а остаток в регистр AH.
2.3. Ограничения.
1) Деление на ноль вызовет исключение #DE.
2) Попытка выполнения любой команды с операндом памяти, хотя бы один байт которого не умещается в данном сегменте, вызовет исключение #GP;
3) При невозможности обращения к требуемой странице памяти процессор вырабатывает исключение #PF (Page Fault – отказ страницы).
-
Метод решения.
Так как делитель находиться в памяти, то для доступа к нему необходимо вычислить физический адрес этого операнда — то есть адрес ячейки памяти, в которой хранится значение делителя.
В общем случае эффективный адрес формируется суммированием компонентов Base, Index, Displacement с учетом множителя Scale:
EA = Base + IndexScale + Displacement
Для различных режимов адресации некоторые слагаемые могут отсутствовать. В режиме, определенным в 1 пункте (базово-индексный со смещение) значение множителя Scale равно 1. В команде указываются необходимые для получения эффективного адреса составляющие:
DIV WORD PTR A[EBX][ESI]
A – Displacement;
EBX – базовый регистр, содержащий Base;
ESI – индексный регистр, содержащий Index.
Логический или виртуальный адрес состоит из селектора сегмента и эффективного адреса, называемого также смещением offset. По умолчанию, для данных селектором сегмента является регистр DS.
Линейный адрес образуется сложением базового адреса сегмента с эффективным адресом. В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по селектору, загруженному в используемый сегментный регистр.
Физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора.
Эффективный адрес
В соответствии с заданным режимом адресации (базово-индексная со смещением) эффективный адрес будет формироваться по следующей схеме
EA = Base + Index + Displacement
Таким образом,
EA[031] := PrEBX[031] + PrESI[031] + A[031].
Линейный адрес
Для нахождения линейного адреса необходимо обратиться к селектору сегмента — в нашем случае мы обращаемся к сегменту данных, селектором которого является регистр DS[015]. В зависимости от значения флага TI (DS[2]) мы будем использовать глобальную (TI=0) или локальную(TI=1) таблицу дескрипторов.
Рассмотрим первый случай (TI=0). Адрес начала глобальной таблицы находится в регистре GDTR[1647]. Перед обращением к дескриптору сегмента, на который указывает DS[315], проверяется, не выходит ли указатель за рамки лимита GDTR[015], и не является ли указатель нулевым. В случае нулевого или превышающего лимит таблицы значения формируется прерывание #GP.
В случае корректного значения указателя происходит обращение к дескриптору сегмента, находящемуся в таблице. Дескрипторы имеют 8-байтный формат:
segment base — базовый адрес сегмента;
segment limit — лимит (граница) сегмента;
G (Granularity) — бит дробности, определяющий в каких единицах задан лимит: G=0 — в байтах, G=1 в страницах по 4 Кбайт (что и обеспечивает максимальную длину в 4 Гбайт);
P (Present) — бит присутствия в памяти. При P=1 сегмент отображен в физической памяти, при P=0 отображения нет и поля базового адреса и лимита не используются;
DPL (Descriptior Privilege Level) — атрибуты привилегий сегмента;
A (Accessed) — обращение. При А=0 — к сегменту не было обращения, А=1 — селектор данного сегмента загружался в регистр сегмента.
E (Expand down) — контролируемое направление расширения: E=0 — расширение вверх (для сегмента данных), E=1 — расширение вниз (стек)
B (Big) — определяет разрядность операндов по умолчанию: B=0 — задействуется 16-битный формат, B=0 — 32-битный формат.
W (Writeable) — разрешение (W=1) или запрет (W=0) записи данных в сегмент.
Обращение к находящимся в оперативной памяти таблицам происходит только при загрузке селектора сегмента. Полученная информации записывается в связанный с сегментным регистром скрытый регистр SDC (Segment Descriptor Cache).
И тогда линейный адрес будет формироваться следующим образом:
LA[031] = SDC[6495] + EA[031].
В случае, если TI = 1 и используется локальная таблица дескрипторов, необходимо вычислить адрес локальной таблицы, селектор которой находиться в регистре LDTR[015] (для этого регистра LDTR[2] — TI всегда равно 0). То есть аналогичным образом проверяем указатель LDTR[015], и если его значение не 0 и не больше лимита таблицы GDTR[015](иначе инициируется прерывание #GP), обращаемся к соответствующему дескриптору LDT, структура которого аналогична дескриптору сегмента данных.
Данные дескриптора LDT копируются в теневой регистр LDTR. И используя этот регистр, находим дескриптор сегмента данных по индексу DS[315] в локальной таблицы, проверяя соответственно индекс на предмет превышения границы лимита. Если указатель корректен, мы получаем доступ к дескриптору сегмента данных, из которого в SDC регистра DS будет записана информация о сегменте (базовый адрес, граница и атрибуты).
В итоге, в том (TI=0) и другом (TI=1) случае линейный адрес будет равен:
LA[031] = SDC[6495] + EA[031]
Физический адрес
Физический адрес получается из линейного в блоке страничной переадресации.
Заданный режим страничной переадресации — PAE-4Кб.
PAE-4Кб механизм страничной переадресации имеет три части: каталог страниц (Page Directory), таблицу страниц (Page Table) и собственно страницы (Page Frame) и включается установкой бита PG=1 в регистре CR0. Регистр CR3 содержит старшие 20 бит (CR3[1231]) физического адреса каталога страниц (младшие 12 бит адреса всегда нулевые).
Каталог страниц размером 4 Кбайта содержит 1024 32-битных строки PDE (Page Directory Entry). Каждая строка содержит 20 старших бит адреса таблицы следующего уровня (младшие 12 бит этого адреса тоже всегда нулевые) и атрибуты этой таблицы. Индексом поиска в каталоге страниц являются 10 старших бит линейного адреса LA[3122].
В случае, если нулевой бит присутствия P строки, соответствующей данному индексу LA[3122], равен нулю, то это означает, что таблица страниц не находиться в оперативной памяти и инициируется исключение #PF. В результате запускается обработчик исключений, который должен принять меры по загрузке затребованной страницы в оперативную память.
Каждая таблица страниц также имеет 1024 строки PTE (Page Table Entry), которые содержат базовый физический адрес (точнее старшие 20 бит этого адреса) и атрибуты самих страниц. Индексом поиска в таблицы являются биты линейного адреса LA[2112]. В случае, если в найденной строке нулевой бит присутствия P=0 , аналогичным образом происходит подкачка страницы в память.
После определения базового адреса страницы, к нему прибавляется 12-битной смещение LA[110] и получается физический адрес операнда.
Делимое явно не указывается в команде, но при этом оно находится в регистровой паре DX:AX.
Таким образом, получен физический адрес делителя, а также известно местонахождения делимого. Следовательно, можно выполнять операцию деления:
-
Копирование операндов в блок регистров АЛУ.
-
Проверка делителя на предмет его равенства нулю (в этом случае инициируется прерывание #DE).
-
Выполнение операции деления с получением результата в регистрах АЛУ
-
Копирование полученного результата в указанные регистры общего назначения.
Опрерация деления выполняется в Арифметическо-Логическом Устройстве (АЛУ). Обобщенная структурная схема АЛУ (рис. 7) включает:
-
блок регистров для приема и размещения операндов и результатов;
-
операционный блок, в котором осуществляется преобразование операндов в соответствии с реализуемыми алгоритмами;
-
схемы контроля, обеспечивающие непрерывный оперативный контроль и диагностирование ошибок;
-
блок управления (БУ), в котором после приема кода операции (КОП) из центрального устройства управления формируются управляющие сигналы (УС), координирующие взаимодействие всех узлов АЛУ между собой и с другими блоками процессора.
Данные поступают из Регистров Общего Назначения (РОН) или КЭШа данных и под управлением БУ над ними выполняются операции поступающие на вход БУ. В случае получения результата, он отправляются в РОН или КЭШ данных, в противоположном случае Схема Контроля отправляет сигнал об ошибке процессору.
-
-
Описание алгоритма.
Укрупненный алгоритм выполнения команды DIV WORD PTR A[EBX][ESI].
Для выполнения команды деления необходимо произвести выборку операнда-делителя из оперативной памяти (второй операнд-делимое находится в регистровой паре DX:AX). Эту операцию осуществляют первые 3 этапа следующего алгоритма:
Вычисление эффективного адреса
Вычисление линейного адреса
Вычисление физического адреса
Выполнение операции
После вычисление физического адреса, который выставляется на шину данных, происходит выполнение операции деления и запись результата в регистры DX и AX.
Алгоритм формирование базового адреса селектора DS с применением глобальной таблицы дескрипторов.
Формирование базового адреса селектора DS с применением локальной таблицы дескрипторов.
Так как этот алгоритм достаточно сложен, то разобьем представим его укрупненный алгоритм с последующей детализацией:
Алгоритмы для вычисления базового адреса локальной таблицы и вычисление базового сегмента данных аналогичны алгоритму формирования базового адреса селектора DS с применением глобальной таблицы дескрипторов
Вычисление базового адреса локальной таблицы.
Вычисление базового адреса сегмента данных.
Формирование физического адреса
Выполнение операции логического сложения
-
Вывод.
В результате выполнения курсового проекта составлен алгоритм выборки операндов из оперативной памяти в защищенном режиме работы процессора для заданного механизма страничной переадресации и заданной команды ассемблера из системы команд 32-разрядных процессоров. В результате проделанной работы разработан алгоритм вычисления эффективного, линейного, физического адресов, а также алгоритм выполнения команды DIV. Закреплены навыки составления алгоритмов процедур с использованием языка микроопераций и блок-схемы, а также принципы грамотного составления пояснительной записки и технического задания.