- •Архитектура эвм и систем.
- •Стороженко а.С.
- •Валюкевич н.Е.
- •Оглавление
- •Введение Архитектура персонального компьютера
- •Набор регистров
- •Регистры состояния и управления
- •Организация памяти
- •Типы данных
- •Лабораторная работа №1 Применение inline assembler
- •Краткая теория
- •Функции ввода-вывода
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №2 Линейное программирование
- •Краткая теория
- •Команды пересылки данных
- •Арифметические команды
- •Сложение двоичных чисел без знака
- •Вычитание двоичных чисел без знака
- •Умножение двоичных чисел со знаком
- •Деление двоичных чисел со знаком
- •Преобразование типов
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №3 Организация ветвлений в программе
- •Краткая теория
- •Команда сравнения cmp
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №4 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №5 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №6 Работа с дисассемблером
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Список рекомендованной литературы
- •Список дополнительной литературы
Регистры состояния и управления
В микропроцессор включены несколько регистров (см. Рисунок 2.1), которые постоянно содержат информацию о состоянии, как самого микропроцессора, так и программы команды которой в данный момент загружены в конвейер. К этим регистрам относятся:
регистр флагов ef lags/flags;
регистр указателя команды eip/ip.
Используя эти регистры, можно получать информацию о результатах выполнения команд и влиять на состояние самого микропроцессора. Рассмотрим подробнее назначение и содержимое этих регистров:
1. eflags/flags (flag register) — регистр флагов. Разрядность eflags/flags — 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086. На Рисунке 3 показано содержимое регистра eflags.
Рисунок 3 – Содержимое регистра eflags
Исходя из особенностей использования флаги регистра eflags/flags можно разделить на три группы:
8 флагов состояния могут изменяться после выполнения машинных команд и они отражают результат исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм;
1 флаг управления обозначается как df (Directory Flag). Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0), либо от конца строки к ее началу (df = 1). Для работы с флагом df существуют специальные команды eld (снять флаг df) и std (установить флаг df). Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками;
5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы.
2. eip/ip (Instruction Pointer register) — указатель команд. Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.
Организация памяти
Физическая память, к которой микропроцессор имеет доступ по шине адреса (см. Рисунок 1), называется оперативной памятью (или оперативным запоминающим устройством — ОЗУ). На самом нижнем уровне память компьютера можно рассматривать как массив битов. Один бит может хранить значение О или 1. Для физической реализации битов и работы с ними идеально подходят логические схемы. Но микропроцессору неудобно работать с памятью на уровне битов, поэтому реально ОЗУ организовано как последовательность ячеек — байтов. Один байт состоит из 8 бит. Каждому байту соответствует свой уникальный адрес (его номер), называемый физическим. Диапазон значений физических адресов зависит от разрядности шины адреса микропроцессора. Для i486 и Pentium он находится в пределах от 0 до 232 - 1 (4 Гбайт). Механизм управления памятью полностью аппаратный. Это означает, что программа не может сама сформировать физический адрес памяти на адресной шине. Ей приходится «играть» по правилам микропроцессора. Отметим, что в конечном итоге этот механизм позволяет обеспечить:
компактность хранения адреса в машинной команде;
гибкость механизма адресации;
защиту адресных пространств задач в многозадачной системе;
поддержку виртуальной памяти.
Микропроцессор аппаратно поддерживает несколько моделей использования оперативной памяти:
сегментированную модель. В этой модели память для программы делится на непрерывные области памяти (сегменты), а сама программа может обращаться только к данным, которые находятся в этих сегментах;
страничную модель. Ее можно рассматривать как надстройку над сегментированной моделью. В случае использования этой модели оперативная память рассматривается как совокупность блоков фиксированного размера 4 Кбайт. Основное применение этой модели связано с организацией виртуальной памяти, что позволяет операционной системе использовать для работы программ пространство памяти большее, чем объем физической памяти. Для микропроцессоров i486 и Pentium размер возможной виртуальной памяти может достигать 4 Тбайт (терабайт).
Особенности использования и реализации этих моделей зависят от режима работы микропроцессора:
Режим реальных адресов, или просто реальный режим. Это режим, в котором работал i8086. Наличие его в i486 и Pentium обусловлено тем, что фирма Intel старается обеспечить в новых моделях микропроцессоров функционирование программ, разработанных для ранних моделей микропроцессоров.
Защищенный режим позволяет максимально реализовать все архитектурные идеи, заложенные в модели микропроцессоров Intel, начиная с i80286. Программы, разработанные для i8086 (реального режима), не могут функционировать в защищенном режиме. Одна из причин этого связана именно с особенностями формирования физического адреса в защищенном режиме.
Режим виртуального 8086. Переход в этот режим возможен, если микропроцессор уже находится в защищенном режиме. Отличительной особенностью этого режима является возможность одновременной работы нескольких программ, разработанных для i8086. Это объясняется тем, что процесс формирования физического адреса для этих программ производится по правилам реального режима.
Сегментированная модель памяти
Сегментация — механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния. В основе механизма сегментации лежит понятие сегмента, который представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти. Когда мы рассматривали сегментные регистры, то отмечали, что для микропроцессоров Intel, начиная с i8086, принят особый подход к управлению памятью. Каждая программа в общем случае может состоять из любого количества сегментов, но непосредственный доступ она имеет только к трем основным: кода, данных и стека, и от одного до трех дополнительных сегментов данных. Программа никогда не знает, по каким физическим адресам будут размещены ее сегменты. Этим занимается операционная система. Операционная система размещает сегменты программы в оперативной памяти по определенным физическим адресам, после чего помещает значения этих адресов в определенные места. Куда именно, зависит от режима работы микропроцессора. Так, в реальном режиме эти адреса помещаются непосредственно в соответствующие сегментные регистры, а в защищенном режиме они размещаются в элементы специальной системной дескрипторной таблицы. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, то есть начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот относительный адрес, или смещение, который микропроцессор использует для доступа к данным внутри сегмента, называется эффективным.
Под физическим адресом понимается адрес памяти, выдаваемый на шину адреса микропроцессора (см. Рисунок 1). Другое название этого адреса — линейный адрес. Эта двойственность в названии обусловлена наличием страничной модели организации оперативной памяти. Эти названия являются синонимами только при отключении страничного преобразования адреса (в реальном режиме страничная адресация всегда отключена).
Формирование физического адреса в реальном режиме
В реальном режиме механизм адресации физической памяти имеет следующие характеристики:
диапазон изменения физического адреса от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий;
максимальный размер сегмента 64 Кбайт. Это объясняется 16-разрядной архитектурой i8086. Нетрудно подсчитать, что максимальное значение, которое могут содержать 16-разрядные регистры, составляет 216 - 1, что применительно к памяти и определяет величину 64 Кбайт;
для обращения к конкретному физическому адресу оперативной памяти необходимо определить адрес начала сегмента (сегментную составляющую) и смешение внутри сегмента. Но мы помним, что сегментная составляющая адреса (или база сегмента) представляет собой всего лишь 16-битное значение, помещенное в один из сегментных регистров. Максимальное значение, которое при этом получается, соответствует 216 - 1. Если так рассуждать, то получается, что адрес начала сегмента может быть только в диапазоне 0-64 Кбайт от начала оперативной памяти. Возникает вопрос о том, как адресовать остальную часть оперативной памяти вплоть до 1 Мбайт с учетом того, что размер самого сегмента не превышает 64 Кбайт. Дело в том, что в сегментном регистре содержатся только старшие 16 бит физического адреса начала сегмента. Недостающие младшие четыре бита 20-битного адреса получаются сдвигом значения в сегментном регистре влево на 4 разряда. Эта операция сдвига выполняется аппаратно и для программного обеспечения абсолютно прозрачна. Получившееся 20-битное значение и является настоящим физическим адресом, соответствующим началу сегмента. Что касается второго компонента, участвующего в образовании физического адреса некоторого объекта в памяти, — смещения, — то оно представляет собой 16-битное значение. Это значение может содержаться явно в команде либо косвенно в одном из регистров общего назначения. В микропроцессоре эти две составляющие складываются на аппаратном уровне, в результате чего получается физический адрес памяти размерностью 20 бит. Данный механизм образования физического адреса позволяет сделать программное обеспечение перемещаемым, то есть не зависящим от конкретных адресов загрузки его в оперативной памяти. Он показан на Рисунке 4.
Рисунок 4 – Механизм формирования физического адреса в реальном режиме
На Рисунке 4 хорошо видно, как формируется некоторый целевой физический адрес: сегментная часть извлекается из одного из сегментных регистров, сдвигается на четыре разряда влево и суммируется со смещением. В свою очередь, видно, что значение смещения можно получить минимум из одного и максимум из трех источников: из значения смещения в самой машинной команде и (или) из содержимого одного базового и (или) одного индексного регистра. Количество источников, участвующих в формировании смещения, определяется кодированием конкретной машинной команды, и если таких источников несколько, то значения в них складываются.
Недостатки такой организации памяти:
сегменты бесконтрольно размещаются с любого адреса, кратного 16 (так как содержимое сегментного регистра аппаратно смещается на 4 разряда). Как следствие, программа может обращаться по любым адресам, в том числе и реально не существующим;
сегменты имеют максимальный размер 64 Кбайт;
сегменты могут перекрываться с другими сегментами.
Желанием ввести в архитектуру средства, позволяющие избавиться от указанных недостатков, в частности, и обусловлено появление защищенного режима.
