E.0.2. Особенности сегментации памяти в микропроцессоре i8086 (итоги).
1. Сегменты памяти определяются только сегментными регистрами.
2. Начальный адрес сегмента связан с физическим адресом параграфа.
3. Никаких средств правильности использования сегментов нет.
4. Размещение сегментов в памяти достаточно произвольно. Ограничение - только выравнивание на границе параграфа.
5. Сегменты могут частично или полностью перекрываться, или не иметь общих частей.
6. Программа может обращаться к любому сегменту как для считывания, так и для записи данных и команд.
7. Для защиты памяти от несанкционированного доступа других программ требуются специальные "внешние" схемы.
8. Система не делает различий между сегментами данных, кода и стека.
9. Нет никаких препятсятвий для обращения к физически не существующей памяти.
10. При обращении к несуществующей памяти результат непредсказуем (все зависит от разработчика материнской платы и другого аппаратного обеспечения компьютера.)
11. Длина сегмента равна целому числу параграфов.
РЕГИСТРЫ.
Основу большинства ЦП образуют рабочие регистры. Регистры представляют собой сверхоперативное ЗУ небольшой емкости. Регистры состоят из триггеров и адресуются подобно ячейкам памяти. Как правило разрядность регистров совпадает с разрядностью процессора. Число регистров, однако, очень невелико. Данные могут храниться в регистре до тех пор, пока шина или некоторый блок не будут готовы принять их или пока они не потребуются по программе. Использование в программе рабочих регистров выгодно, так как ЦП может получить содержащиеся в них данные, не обращаясь к памяти. Регистры, содержимое которых не изменяется под воздействием программы, позволяют сохранить данные для последующего использования.
С помощью внутренних шин регистры связаны друг с другом. С другими блоками системы связь осуществляется под управлением программы.
Если ЦП имеет большое число регистров, программе не потребуется большого числа пересылок данных в память и из памяти. Благодаря этому уменьшается число операций обращения к памяти и формат команд. Наличие большого числа внутрипроцессорных регистров приводит к расширению возможностей дешифрирования и адресации команд и данных, и эта тенденция имеет будущее.
На рис.1.3 показан типовой набор регистров ЦП. Регистры могут иметь много различных назначений; некоторые ЭВМ даже позволяют программисту присваивать регистрам разнообразные частные функции. Большинство ЭВМ, однако, содержит несколько основных регистров: счетчик команд, регистр команд, регистр адреса памяти, аккумулятор, регистры общего назначения. индексные регистры, регистр условий, указатель стека.
Счетчик команд (СК) содержит адрес ячейки памяти, в которой находится очередная команда. Цикл выполнения команды начинается с того, что ЦП посылает содержимое счетчика команд в шину адреса; таким образом ЦП извлекает из памяти первое слово команды. При этом увеличивается на единицу содержимое счетчика команд и, таким образом, в следующем цикле команды из памяти будет извлечена следующая из последовательности команд. Если команда многобайтная, то ЦП увеличивает на 1 содержимое счетчика команд (инкрементирует) столько раз, сколько это нужно. Таким образом, ЦП извлекает из памяти и реализует команды последовательно, если только команда передача управления или условный переход не изменит содержимое счетчика команд.
Регистр команд сохраняет код команды до тех пор, пока она не будет дешифрирована.
Регистр адреса памяти содержит адрес данных в памяти. Адреса могут представлять собой часть команд или данные. Многие ЭВМ имеют по несколько регистров.
Аккумуляторы - это регистры временного хранения, которые используются в процессе вычисления. В большинстве ЭВМ, таких как калькуляторы, в аккумуляторе всегда содержится один из операндов арифметических операций. Электронно-вычислительная машина может также использовать аккумуляторы при выполнении логических операций. Таким образом, аккумуляторы ЭВМ - это в основном наиболее часто используемые регистры. Многие из широко используемых ЭВМ имеют по одному аккумулятору; программы для таких ЭВМ затрачивают много команд и времени на пересылку данных в аккумулятор и из него. Большинство более совершенных ЭВМ имеет по несколько аккумуляторов; поэтому у программы нет необходимости многократно пересылать данные.
Регистры общего назначения выполняют различные функции. Они могут служить в качестве регистров временного хранения данных или адресов. Программисту предоставляется возможность определять их как аккумуляторы или как счетчики команд.
Индексные регистры используются для адресации данных. Содержимое индексного регистра складывается с адресом ячейки памяти, который содержится в команде. Затем сумма образует действительный адрес данных и исполнительный адрес. Если содержимое индексного регистра изменяется, одна и та же команда может быть использована для обработки данных из ячеек памяти с различными адресами. Можно пересылать данные из одной области памяти в другую подобно тому, как если бы использовались индексные регистры. Некоторые ЭВМ имеют автоиндексацию, при помощи которой индексный регистр каждый раз, когда используется, автоматически увеличивает (автоинкрементация) или уменьшает (автодекрементация) содержимое на 1. Каждая команда в ЭВМ с индексными регистрами должна содержать признаки, указывающие используется ли в данной команде индексация. Если ЭВМ имеет более чем один регистр, команда должна также содержать указание, какой из регистров в данной команде используется.
Регистр кода условий или регистр состояния содержит набор одноразрядных признаков, которые отображают состояние ЦП или нескольких внешних входов или выходов. Эти признаки - основа для работы ЭВМ, принимающей решение. Различные ЭВМ имеют различное число и назначение признаков. Большинство устаревших ЭВМ имеет один или два признака, так как это связано, прежде всего, со стоимостью аппаратных средств. Новейшие ЭВМ имеют по несколько признаков. ЦП может иметь признаки, которые могут быть изменены или сохранены извне при операциях ввода или вывода.
СОСТОЯНИЕ ПРЕРЫВАНИЯ.
В микропроцессоре предусмотрена возможность по запросам внешних устройств прерывать выполнение текущей программы и переходить на выполнение новой программы, так называемой прерывающей программы (или программы обслуживания прерывания). После окончания выполнения прерывающей программы микропроцессор возвращается к выполнению основной программы с команды, на которой произошло прерывание.
Если на некотором участке программы допускается ее прерывание, то при составлении программы в начале этого участка предусматривается команда inte, по которой триггер разрешения прерывания в управляющем устройстве микропроцессора устанавливается в состояние логической единицы, а в конце участка - команда intr, при выполнении которой триггер сбрасывается в состояние логического нуля. Состояние триггера выдается на выход Разрешение прерывания.
Процесс прерывания связан со следующими действиями. От внешнего устройства поступает сигнал уровня логической единицы на вход Запрос прерывания. Если прерывание разрешено (т. е. на выходе Разрешение прерывания имеется уровень логической единицы), то после окончания выполнения текущей команды триггер разрешения прерывания сбрасывается в состояние логического нуля, а в информации о состоянии микропроцессора, выдаваемой на шину данных, появляются сигналы Подтверждение прерывания (в разряде D0), Ввод (в разряде D1) и сигнал о том, что в данном цикле производится прием первого байта команды (в разряде D5). Cигнал Подтверждение прерывания используется в качестве строба для выдачи внешним устройством на шину данных команды RST (команды Рестарт).
При выполнении команды RST содержимое счетчика команд PC запоминается в стеке, а в счетчик команд PC записывается адрес первой команды прерывающей программы. Этот адрес задается следующим образом. Команда RST имеет структуру 11 АAА 111 и в счетчик команд заносится значение 00 000 000 00 ААА 000, которое и служит адресом первой команды прерывающей программы. Задавая определенную трехразрядную кодовую комбинацию ААА, внешнее устройство может задать адрес первой команды одной из восьми прерывающих программ.
После окончания выполнения прерывающей программы возврат в основную программу происходит следующим образом. Прерывающая программа заканчивается командой RET (Возврат из подпрограммы). В процессе выполнения этой команды адрес команды основной программы, перед которой произошло прерывание, выбирается из стека и передается в регистр адреса, а увеличенное на единицу значение заносится в счетчик команд.
В 1978 г. рынок 8-битных микропроцессоров был переполнен, и вместо того, чтобы продолжать борьбу на нём, фирма Intel сделала качественный шаг вперёд и выпустила первый в мире 16-битный микропроцессор. 16-битный микропроцессор Intel 8086, выпущенный 8 июня 1978 г., содержал на кристалле размером 5,5x5,5 мм около 29000 транзисторов и производился по высококачественной nМОП-технологии. Производительность процессора 8086 значительно превышает производительность его 8-битного предшественника – микропроцессора 8080 – и составляет от 330 до 750 тыс. операций в секунду. Хотя и имеется определённая совместимость микропроцессора 8086 с архитектурой ЦП 8080, разработчики не ставили перед собой цели достичь её полностью. Число линий адреса увеличено с 16 до 20, что позволяет адресовать память 1 Мбайт вместо 64 Кбайт. Увеличение ёмкости памяти упрощает переход к мультипрограммированию, поэтому в микропроцессоре 8086 предусмотрено несколько мультипрограммных возможностей. Кроме того, в микропроцессор 8086 встроены некоторые средства, упрощающие реализацию мультипроцессорных систем, что позволяет применять его с другими процессорами, например с процессором числовых данных 8087. То обстоятельство, что 16 из линий адреса микропроцессора используются и как линии данных, приводит к тому, что на системную шину нельзя одновременно выдавать адреса и данные. Мультиплексирование адресов и данных во времени сокращает число контактов корпуса до 40, но и замедляет скорость передачи данных. Однако благодаря тщательно разработанной временной диаграмме работы скорость передачи уменьшается не столь значительно, как этого следовало бы ожидать. Микропроцессор имеет 16 линий управления, предназначенных для сигналов квитирования во время передач данных и внешнего управления ЦП. Он рассчитан на одно напряжение питания +5 В и однофазную синхронизацию, частота которой достигает 5 МГц. (Модель 8086-2 имеет частоту синхронизации до 8 МГц, а модель 8086-1 – до 10 МГц.) Потребляемая процессором 8086 мощность составляет 1,75 Вт. Хотя микропроцессор 8086 может обращаться к слову по любому адресу, при нечётном адресе требуются два обращения к памяти: для младшего и для старшего байтов. Следовательно, возможна некоторая экономия времени, если хранить слова только по чётным адресам. Внутри микропроцессора имеются следующие регистры: регистр команд, которым фактически служит 6-байтная очередь; 4 регистра данных,38 представляющих собой, по существу, набор арифметических регистров; группа указательных регистров,39 содержащая базовый и два индексных регистра, а также программный счётчик и указатель стека; группа из четырёх сегментных регистров;40 16-битное слово состояния процессора (регистр флажков). Все регистры имеют длину 16 бит. Регистры данных допускают адресацию не только целых регистров, но и их младшей и старшей половин.41 Из 16 бит слова состояния процессора семь не используются, а остальные делятся на флажки условий (флажки знака, нуля, чётности, переноса, вспомогательного переноса и переполнения),42 отражающие результат предыдущей операции, и флажки управления (флажки направления, прерываний и трассировки),43 от которых зависит выполнение специальных функций. Все флажки условий, кроме флажка переполнения, размещены в младшем байте регистра. Как говорилось ранее, участвующие в формировании адреса указательные регистры имеют длину всего 16 бит, поэтому эффективный адрес (сумма базового и индексного адресов и смещения) имеет такую же длину. Но, с другой стороны, выдаваемый на шину адреса физический адрес должен содержать 20 бит. Дополнительные 4 бита образуются при сложении эффективного адреса с содержимым одного из сегментных регистров, умноженным на 16. Если результат сложения превосходит 220 – 1, 21-й бит отбрасывается; это называется «заворачиванием»44 адреса, потому что за максимальным адресом как бы следует нулевой. Применение сегментных регистров, по существу, разделяет пространство памяти на перекрывающиеся сегменты, каждый из которых имеет размер 64 Кбайт и начинается на 16-байтной границе (называемой границей параграфа), т.е. начинается с адреса, кратного 16. 16 сегментов, начинающихся с адресов, кратных 64К, называют страницами памяти, а такие адреса – границами страниц. Как нетрудно увидеть, страницы не пересекаются между собой и покрывают всю доступную память. Обычно деление на страницы используется для совместного функционирования устройств, интерфейсы которых отображены на адресное пространство памяти; тогда каждое такое устройство использует одну страницу памяти, и адрес ячейки в адресном пространстве устройства будет совпадать с её адресом в сегменте, начинающемся там же, где и эта страница памяти. Также страничное деление упрощает разработку устройств, совместимых друг с другом, поскольку оно допускает лишь 16 типов устройств, отображающих свои интерфейсы на память. Так, в компьютере IBM PC страницы памяти с A по E используются как «видеопамять» (адресное пространство видеоадаптера), а страница F занята БСВВ, размещённой в ПЗУ45. Это ограничивает память, доступную пользователю, до 640 Кбайт. В защищённом режиме при использовании виртуальной памяти понятию «страница памяти» придаётся совершенно иное значение. Об этом будет рассказано в дальнейшем. Наличие сегментных регистров обеспечивает следующие преимущества: ёмкость памяти может доходить до 1 Мбайт, хотя команды оперируют 16-битными адресами; секции кода, данных и стека могут иметь длину более 64 Кбайт благодаря использованию нескольких сегментов кода, данных или стека; упрощается использование отдельных областей памяти для программы, её данных и стека; при каждом выполнении программы она сама и (или) её данные могут размещаться в разных областях памяти. (Это связано также с мультипрограммированием, поскольку позволяет динамически перемещать программы между различными областями памяти.) Сигнал сброса процессора обнуляет все его регистры, кроме регистра сегмента кода, в который загружается шестнадцатеричное значение FFFF. Таким образом, при перезагрузке процессора управление передаётся по физическому адресу FFFF0 (шестнадцатеричное значение). Обычно блок памяти, адресуемый этим значением, располагается в ПЗУ и содержит инструкции инициализации компьютера. Очередь команд микропроцессора непрерывно заполняется, когда системная шина не требуется для других операций. Такое «опережение»46 значительно увеличивает пропускную способность ЦП, так как к моменту завершения текущей команды следующая команда чаще всего уже находится в ЦП, и нет необходимости дополнительно считывать её из памяти. В случае перехода очередь сбрасывается и заполняется заново, что не даёт экономии времени, но в среднем это происходит нечасто. Длина команд микропроцессора 8086 составляет от одного до шести байт, но организация очереди позволяет считывать команды только словами по чётным адресам. Имеется только одно исключение, связанное с переходом по нечётному адресу. В этом случае ЦП считывает сначала один байт, а затем продолжает считывать слова по чётным адресам. Система команд микропроцессора 8086 состоит из 98 команд: 19 команд передачи данных, 38 команд их обработки, 24 команд перехода и 17 команд управления процессором. Каждая команда состоит из кода операции (КОП, или опкод47), идентифицирующего её, и операндов, несущих требуемую для операции информацию. Команды могут содержать несколько операндов, но чем больше операндов и чем они длиннее, тем больше места занимает команда в памяти и тем больше времени требуется для передачи её в ЦП. КОП и операнды могут иметь произвольную длину и не обязаны быть непрерывными; в то же время общая длина команды должна выражаться целым числом байт. Часто КОП занимает первый байт команды и три средних бита второго байта (это 3-битовое поле часто называют mod). КОП других команд занимает часть первого байта команды, а остальные биты этого байта занимает(ют) операнд(ы). Команды, добавленные к системе команд процессора 8086 в более совершенных процессорах (главным образом, в процессорах 80186 и 80386), содержат КОП в первых двух байтах и операнд(ы) – в остальных. Всего же в системе команд процессора 8086 насчитывается более 3800 команд вместе со всеми их вариантами. Чтобы минимизировать общее число бит в команде, большинство команд процессора 8086 имеют не более двух операндов, причём минимум одним из операндов в двухоперандной команде является регистр, так как адреса памяти и ввода-вывода требуют сравнительно много бит (8…20), а из-за ограниченного числа регистров для определения регистра требуется всего несколько бит. Ограничение двумя операндами, конечно, уменьшает гибкость многих операций, но в действительности излишняя гибкость и не нужна. Например, команда сложения, в которой необходимо указывать два слагаемых и результат, приводится к двум операндам посредством загрузки суммы на место одного из слагаемых. При этом оно теряется, но обычно это не играет роли. Если же слагаемое потребуется в дальнейшем, его приходится дублировать (запоминать где-то ещё) до выполнения сложения. Для микропроцессора 8086 фирмой Digital Research была разработана операционная система CP/M-86, совместимая с её предыдущей версией CP/M-80 для 8-битных процессоров, а затем и её многопользовательская однозадачная версия MP/M-86 и мультизадачная версия Concurrent CP/M. Однако эти ОС не применялись в персональных компьютерах и потому не получили большого распространения. В персональных компьютерах микропроцессор 8086 практически не использовался, т.к. до 1980 г. 16-битные микросхемы поддержки для него были весьма дороги и дефицитны, а в 1979 г. уже был выпущен микропроцессор 8088, системы на базе которого дешевле в производстве. Однако в компьютерах Compaq DeskPro использовался именно этот процессор, что повышало производительность таких ПК по сравнению с IBM PC,
Дата добавления: 2016-02-20; просмотров: 4226;