- •Введение
- •1 Постановка задачи
- •2 Анализ предметной области
- •3 Разработка арифметико-логического устройства
- •4 Разработка гипотетического микропроцессора
- •5 Разработка структуры микро-эвм на базе гипотетического микропроцессора
- •6 Разработка программы эмуляции работы микро-эвм на базе гипотетического микропроцессора
2 Анализ предметной области
2.1 Структура базовой МЭВМ
На рисунке 2.1 показана общая структура базовой МЭВМ, состоящая из микропроцессора (МП), генератора синхросигналов и схемы начального устройства (ГСС и СНУ), оперативной памяти (ОЗУ), постоянной памяти (ПЗУ), параллельного периферийного адаптера (ППА), последовательного периферийного адаптера (ПСПА), периферийного устройства (ПУ), шины управления (ШУ), шина адреса (ША), шины данных (ШД).
ПСПА
Рисунок 2.1 – Структура базовой МЭВМ
2.2 Общая характеристика i80286
В качестве прототипа для проектируемого микропроцессора выступает микропроцессор i80286. Данный микропроцессор содержит: буфер адреса данных, устройство управления и синхронизации, сумматор физического адреса, регистр команд, регистр обмена, регистры очереди команд, регистры данных, сегментные регистры, регистры указателей индексов, 16-разрядное АЛУ, регистр флагов, микропрограммное устройство управления.
Сегментные регистры предназначены для хранения начальных (базовых) адресов сегментов памяти. Используется четыре 16-разрядных сегментных регистра и, соответственно, четыре сегмента памяти. CS – регистр сегмента команд, определяет сегмент памяти, в котором хранится выполняемая программа. DS – регистр сегмента данных, задает сегмент памяти, содержащий обрабатываемые данные. SS – регистр сегмента стека, определяет сегмент памяти, доступ к элементам которого возможен с помощью стековой адресации. ES – регистр экстра сегмента, задает дополнительный сегмент, в котором наряду с сегментом данных может храниться обрабатываемая информация.
Регистр адреса команды (IP) – хранит 16-разрядный адрес очередной команды, которая должна извлекаться из сегмента команд памяти. Шесть 8-разрядных регистров очереди образуют внутреннюю промежуточную память с быстрым доступом для хранения последовательности команд выполняемой программы;
Регистры общего назначения: AX – аккумулятор. BX – регистр базы, как правило в нем хранится начальный адрес обрабатываемого массива данных. CX – в ряде команд используется как счетчик при организации циклических вычитаний. DX – регистр данных, в командах умножения и деления сохраняет старшую половину 32-разрядных операндов, а в командах ввода-вывода содержит адрес внешних устройств. (Примечание: H – регистр старшего байта; L – регистр младшего байта;)
Регистры указателей: SP, BP используются для работы со стековой памятью (ее стековым сегментом). SP – содержит адрес вершины стека. BP – хранит адрес начального элемента массива данных в стековом сегменте.
Регистры индексов используются для доступа к элементам массива. SI – регистр индекса источника, хранит смещение адреса для чтения элемента из памяти. DI – регистр индекса приемника, хранит смещение адреса для записи в память;
Регистр флагов Flags: содержит девять признаков (флагов), характеризующих состояние микропроцессора. Шесть флагов устанавливается в соответствии с результатом выполненной в АЛУ операцией.
CF – флаг переноса, устанавливается в 1, если в результате выполнения операции возник перенос из (n-1)-го разряда результата в несуществующий старший n-й разряд или потребовался заем несуществующего n-го разряда.
PF – флаг паритета, дополняет код результата до нечетного, т.е. устанавливается в 1, если количество единиц в коде результата четно.
AF – флаг вспомогательного переноса, устанавливается в 1, если при выполнении операции произошел перенос из 3 в 4 разряд результата или выполнился заем из 3 в 4 разряд. Используется для десятичной коррекции результата.
ZF – флаг нулевого результата, принимает единичное значение, если все разряды результата нулевые; если хотя бы один разряд результата отличен от 0, ZF сбрасывается в 0.
SF – флаг знака, устанавливается равным старшему (n-1)-му разряду кода результата. При выполнении операций над числами со знаком он соответствует знаку результата, если результат >= 0, будет сброшен в 0, если результат < 0 - будет установлен в 1.
OF – флаг переполнения, устанавливается в 1, если в результате выполнения операций происходит переполнение разрядной сетки (если перенос из (n-2)-го разряда в (n-1) не совпадает с переносом из (n-1)-го разряда в несуществующий n-ый).
DF – флаг направления передачи, определяет способ изменения адресов источников/приемников кода в командах работы со строками данных. Если DF равен 0, то адреса наращиваются, 1 – уменьшаются.
IF флаг разрешения прерывания, сброшенный в состояние 0, запрещает обработку запроса на прерывание, а в 1 разрешает ее.
TF флаг пошагового режима, в 1 - задает специальный режим покомандного выполнения, в котором после обработки каждой команды генерируется программное прерывание;
Арифметико-логическое устройство: предназначено для выполнения арифметических, логических и сдвиговых операций над 8- и 16-разрядными кодами. Операнды поступают в АЛУ из регистров общего назначения и/или памяти. Результат операции возвращается в регистр общего назначения или в память. АЛУ кроме собственно схем для выполнения операций, содержит два программно недоступных регистра для временного хранения операндов.
Устройство управления и синхронизации: осуществляет организацию работы микропроцессора. Оно обеспечивает анализ входных и генерацию выходных сигналов, управление обменом и последовательностью выполнения команд.
Микрокомандное устройство управления: формирует сигналы управления работой устройства обработки.
Шина адреса состоит из двадцати сигнальных линий, несущих адреса ячеек памяти и портов ввода/вывода. По каждой линии можно передать два возможных значения (0 или 1). Стандартный PC может адресовать 220 ячеек памяти.
Системная шина (шина данных). Шина данных совместно с шиной адреса используется для передачи данных внутри PC. Единица передачи 1 байт. Шина данных состоит из 16 информационных линий, каждая передает одну двоичную цифру.
На рисунке 2.2 приведена структура микропроцессора i80286.
Пояснения к схеме:
БАД – буфер адреса данных;
СФА – сумматор физического адреса;
МУУ – микропрограммное устройство управления;
УУиС – устройство управления и синхронизации;
АЛУ – 16-разрядное арифметико-логическое устройство;
A/D15...A/D0 – младшие разряды входного сигнала;
A19/S6...A16/S3 – старшие разряды входного сигнала;
AX, BX, CX, DX – регистры общего назначения;
SP,BP – регистры указателей;
SI,DI – регистры индексов;
CS, DS, ES, SS – сегментные регистры;
РК – регистр команд;
РФ – регистр флагов;
IP – регистр адреса команды.
Р
исунок
2.2 – Структура базового микропроцессора
Intel 80286
2.3 Адресация основной памяти
2.3.1 Управление памятью
В процессоре предусмотрены два режима работы процессора: реальный режим и защищенный режим. Способы обращения к памяти ЭВМ, а конкретней способы определения адреса в ОЗУ при различных режимах работы, так же различны. Кроме того, при работе процессора в защищенном режиме возможен режим работы с обращением к виртуальной памяти.
2.3.1.1 Реальный режим работы процессора
В реальном режиме работы процессора возможно обращение к памяти объемом в 1 048 576 байт. При этом используется сегментация памяти, когда сплошной участок памяти разбивается на сегменты размером в 64 килобайта. Каждый из сегментов выделяется для хранения определенного типа информации: данных, кодов команд, стека. Если выделенные сегменты не используются в полном объеме, допускается перекрытие сегментов. При этом правильность расположения сегментов в памяти целиком ложится на программиста, что является одним из недостатков сегментной адресации памяти в реальном режиме работы процессора.
Рис. 2.3 - Механизм формирования физического адреса в реальном режиме.
Указатель адреса в микропроцессоре i80286 имеет размерность в 32 бита, притом, что разрядность адресной шины составляет 20 бит. Для определения конкретного физического адреса следует определить адрес начала сегмента и смещение внутри сегмента. Адрес начала сегмента хранится в соответствующем сегментном регистре, а смещение внутри сегмента вычисляется в соответствии с типом адресации или находится в регистре.
Адрес начала сегмента часто называют селектором. Селектор это базовый адрес. Вычисленное смещение – образует эффективный адрес. Суммирование смещения с селектором дает линейный адрес. Для процессора i80286 линейный адрес дает физический адрес конкретной ячейки в памяти ЭВМ. В процессорах поздних выпусков со страничной организацией памяти физический адрес вычисляется из линейного и номера страницы памяти.
Как уже сказано выше указатель адреса является 32 битным и задается как селектор: смещение, шина адреса 20 бит, а регистры процессора 16 бит. Рассмотрим механизм преобразования указателя адреса в физический адрес. При различных способах адресации памяти смещение задается сочетанием трех составляющих: базы, индекса и смещением из команды. Смещение из команды является ничем иным как непосредственным операндом. Три параметра смещения суммируются в блоке формирования адреса, быстродействующим сумматором. Результат вычисления смещения проверяется узлом контроля сегмента. Если значение превышает FFFFh, вызывается соответствующее прерывание. Адрес сегмента сдвигается на 4 бита влево, в результате чего последние 4 бита становятся равным 0, а разрядность сегмента становится равной 20 битам. После этого в еще одном быстродействующем сумматоре происходит сложение селектора и смещения и вычисленный физический адрес помещается в буфер адреса блока шины. Наличие буфера шины обусловлено возможностью работы процессора в конвейерном режиме.
На рис. 2.3 представлен механизм формирования физического адреса в реальном режиме, а на рисунке 2.4 показано соответствие логического адреса физическому адресу.
Рис. 2.4 - Соответствие логического адреса физическому адресу.
2.3.1.2 Работа с виртуальной памятью
Процессор i80286 может непосредственно адресовать до 16 мегабайт физической памяти, однако реально компьютеры редко имели оперативную память такого размера. Обычный размер оперативной памяти для IBM AT составлял 2-4 мегабайта.
Механизм виртуальной памяти, реализованный в процессоре i80286, позволяет организовать память большого размера с использованием относительно небольшой физической оперативной памяти и дисковой памяти.
Основная идея виртуальной памяти заключается в том, чтобы хранить (и обновлять) содержимое большой виртуальной памяти на диске, подкачивая отдельные участки виртуальной памяти в реальную оперативную память по необходимости. Можно, например, хранить все используемые программой сегменты на диске, а в физическую память записывать только те сегменты, которые необходимы для выполнения программы в настоящий момент. Процесс "подкачки" сегментов с диска в память и их выгрузки после изменения на диск называется свопингом. Операционная система должна вести учет сегментов и знать, какие сегменты находятся в памяти, а какие - на диске. Процессор i80286 может оказать ей в этом существенную помощь. Последние два поля дескриптора - бит присутствия сегмента в памяти P и бит обращения к сегменту памяти A - предназначены для аппаратной реализации учета сегментов.
Бит P должен быть установлен в 1 для тех сегментов, которые находятся в физической памяти. Сегменты, временно отсутствующие в памяти и находящиеся на диске, помечаются в дескрипторе битом P, сброшенным в 0. Установкой и сбросом бита P занимается операционная система. А вот проверка этого бита - работа для процессора. Когда программа обращается к отсутствующему в физической памяти сегменту (загрузкой селектора в сегментный регистр), выполнение программы прерывается и управление передается операционной системе. Та, в свою очередь, подкачивает нужный сегмент в оперативную память и устанавливает для него бит P в 1, после чего работа программы возобновляется.
Время от времени операционная система должна находить сегменты, к которым было обращение, и в случае их изменения сбрасывать на диск. Кроме того, если для закачки нового сегмента в физической памяти недостаточно свободного места, можно выгрузить самые старые сегменты из физической памяти на диск и на их место загрузить новый сегмент.
Процессор может оказать помощь операционной системе в определении тех сегментов, к которым было обращение. Для этих сегментов бит обращения A устанавливается процессором в 1. Сбросить бит обращения можно только из программы, поэтому такая работа возлагается на саму операционную систему.
Однако у этой схемы есть один серьезный недостаток. Так как все сегменты имеют разные размеры, и все они подкачиваются по очереди (и по несколько штук) в одну область физической памяти, возможно возникновение фрагментации физической памяти. Например, был удален сегмент размером в 10 килобайт, и образовался свободный участок физической памяти такого же размера. Новый сегмент, который требуется закачать в память, имеет размер 15 килобайт, и он не поместится на место старого.
Операционная система может выполнить перемещение сегментов в физической памяти, изменив соответствующим образом 24-битовые базовые адреса сегментов в таблицах дескрипторов. После перемещения сегментов можно объединить все свободные участки памяти в один и использовать этот участок для загрузки нового сегмента. Так как программы защищенного режима не знают физических адресов памяти (они работают только с селекторами), перемещение сегментов никак не отразится на их работе. Но на перемещение сегментов требуется время, и кроме того, часто нужен не весь сегмент, а только его небольшой участок. Процессор i80286 не предлагает никакого решения проблемы фрагментации физической памяти при свопинге сегментов, и не позволяет загружать сегмент по частям. Все эти возможности появились в процессорах i80386 и i80486. Эти процессоры позволили первыми эффективно реализовать механизм виртуальной памяти.
2.3.2 Режимы адресации
Показав, каким образом аппаратно формируется физический адрес операнда. Необходимо рассмотреть, как интерпретируются биты адресного пространства программно, то есть рассмотреть режимы адресации.
2.3.2.1 Непосредственная адресация
При этом режиме адресации, непосредственно в теле команды указывается не адрес операнда или какая-либо другая информация, описывающая, где находится операнд, а непосредственно значение самого операнда. Такой операнд называется непосредственным. При непосредственной адресации не требуется дополнительного обращения к памяти для вызова операнда. В результате, чего команды, использующие непосредственный режим адресации выполняются быстрее, чем команды использующие другие режимы адресации.
Однако у такого способа адресации есть недостатки. Во-первых, таким способом можно работать только с константами. Во-вторых, число значений ограниченно размером поля.
2.3.2.2 Прямая адресация
Следующий способ определения операнда – просто дать его полный адрес. Такой режим называется прямой адресацией. Как и непосредственная адресация, прямая адресация имеет некоторые ограничения: команда всегда имеет полный доступ только к одному и тому же адресу памяти. То есть значение операнда в процессе выполнения программы может меняться, а адрес нет. Таким образом, прямая адресация может быть использована только для доступа к глобальным переменным, адреса которых вычисляются во время компиляции программы. Так как многие программы содержат глобальные переменные, этот способ широко используется.
2.3.2.3 Регистровая адресация
Регистровая адресация отличается от прямой, тем что вместо адреса ячейки памяти, в команде указывается регистр, содержащий значение операнда. Благодаря быстрому доступу этот режим адресации используется довольно широко. Многие компиляторы определяют, к каким переменным, в данный момент выполнения программы, будет осуществляться чаще всего доступ и загружает эти переменные в регистры. Примером такой переменной может служить, например: индекс цикла.
2.3.2.4 Косвенная адресация
При косвенной адресации адрес искомого операнда хранится в регистре и не фиксируется жестко в команде. Использование адреса таким способом позволяет, выполняя многократно одну и туже команду, меняя значения в регистре, обращаться к различным операндам в памяти компьютера. Косвенная регистровая адресация применяется для обращения к локальным переменным, адреса которых задаются не в процессе компиляции, а в процессе загрузки программы в оперативную память компьютера.
