Вход

Моделирование процедур выборки операндов для системы команд 32-разрядных процессоров

Реферат по программированию
Дата добавления: 25 июня 2006
Язык реферата: Русский
Word, rtf, 6.7 Мб (архив zip, 241 кб)
Реферат можно скачать бесплатно
Скачать
Не подходит данная работа?
Вы можете заказать написание любой учебной работы на любую тему.
Заказать новую работу




Московский Государственный Институт Электроники и Математики













Курсовая работа

по дисциплине

«Организация ЭВМ»

на тему

«Моделирование процедур выборки операндов для системы команд 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





































  1. Задание для курсовой работы.

Составить алгоритм процедуры выборки операндов из оперативной памяти в защищенном режиме работы процессора для заданного механизма страничной переадресации и заданной команды ассемблера из системы команд 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. Выборка операнда делимое и копирование его в регистр-накопитель.

  1. Выборка операнда делитель и непосредственное деление на него содержимого накопителя, причем частное и остаток записываются в регистры, указанные в таблице. Например, при делении слова (в регистре AX) на байт (в регистре или ячейке памяти) частное (8 бит) будет записано в регистр AL, а остаток (8 бит) – в регистр AH. Примечание. При делении на 0 возникает исключение #DE.


  1. Постановка задачи.

В соответствии с заданием необходимо описать алгоритм процедуры выборки операндов из оперативной памяти для команды 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 – отказ страницы).

  1. Метод решения.

Так как делитель находиться в памяти, то для доступа к нему необходимо вычислить физический адрес этого операнда — то есть адрес ячейки памяти, в которой хранится значение делителя.



В общем случае эффективный адрес формируется суммированием компонентов 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.

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

  1. Копирование операндов в блок регистров АЛУ.

  2. Проверка делителя на предмет его равенства нулю (в этом случае инициируется прерывание #DE).

  3. Выполнение операции деления с получением результата в регистрах АЛУ

  4. Копирование полученного результата в указанные регистры общего назначения.

Опрерация деления выполняется в Арифметическо-Логическом Устройстве (АЛУ). Обобщенная структурная схема АЛУ (рис. 7) включает:

  • блок регистров для приема и размещения операндов и результатов;

  • операционный блок, в котором осуществляется преобразование операндов в соответствии с реализуемыми алгоритмами;

  • схемы контроля, обеспечивающие непрерывный оперативный контроль и диагностирование ошибок;

  • блок управления (БУ), в котором после приема кода операции (КОП) из центрального устройства управления формируются управляющие сигналы (УС), координирующие взаимодействие всех узлов АЛУ между собой и с другими блоками процессора.

Данные поступают из Регистров Общего Назначения (РОН) или КЭШа данных и под управлением БУ над ними выполняются операции поступающие на вход БУ. В случае получения результата, он отправляются в РОН или КЭШ данных, в противоположном случае Схема Контроля отправляет сигнал об ошибке процессору.


  1. Описание алгоритма.

Укрупненный алгоритм выполнения команды DIV WORD PTR A[EBX][ESI].

Для выполнения команды деления необходимо произвести выборку операнда-делителя из оперативной памяти (второй операнд-делимое находится в регистровой паре DX:AX). Эту операцию осуществляют первые 3 этапа следующего алгоритма:



Вычисление эффективного адреса



Вычисление линейного адреса













Вычисление физического адреса

Выполнение операции








После вычисление физического адреса, который выставляется на шину данных, происходит выполнение операции деления и запись результата в регистры DX и AX.

Алгоритм формирование базового адреса селектора DS с применением глобальной таблицы дескрипторов.





Формирование базового адреса селектора DS с применением локальной таблицы дескрипторов.

Так как этот алгоритм достаточно сложен, то разобьем представим его укрупненный алгоритм с последующей детализацией:
















Алгоритмы для вычисления базового адреса локальной таблицы и вычисление базового сегмента данных аналогичны алгоритму формирования базового адреса селектора DS с применением глобальной таблицы дескрипторов































Вычисление базового адреса локальной таблицы.




Вычисление базового адреса сегмента данных.






Формирование физического адреса

















Выполнение операции логического сложения















  1. Вывод.

В результате выполнения курсового проекта составлен алгоритм выборки операндов из оперативной памяти в защищенном режиме работы процессора для заданного механизма страничной переадресации и заданной команды ассемблера из системы команд 32-разрядных процессоров. В результате проделанной работы разработан алгоритм вычисления эффективного, линейного, физического адресов, а также алгоритм выполнения команды DIV. Закреплены навыки составления алгоритмов процедур с использованием языка микроопераций и блок-схемы, а также принципы грамотного составления пояснительной записки и технического задания.

© Рефератбанк, 2002 - 2017