
- •Организация эвм и систем
- •Глава 1 эвм общего назначения
- •Структура эвм общего назначения.
- •Арифметико-логические устройства.
- •Устройства управления.
- •Risc и cisc процессоры.
- •1.5 Форматы машинных команд.
- •Inc byte ptr [40h] – одноадресная
- •Способы адресации.
- •Стековая адресация. Виды стеков.
- •Глава 2
- •2.1 Микропроцессор к1810вм86.
- •2.2 Назначение входов/выходов вм86 в минимальном режиме.
- •2.3 Назначение входов/выходов вм86 в максимальном режиме.
- •Внутренняя архитектура мп вм86.
- •Сегментация памяти.
- •2.6 Программная модель мп вм86.
- •2.7 Организация оперативной памяти.
- •2.8 Организация адресного пространства портов ву.
- •2.9 Методы обмена информацией между мп и портами ву.
- •2.10 Параллельный программируемый адаптер к1810вв55 (i8255).
- •Пример использования и программирования адаптера
- •2.12 Программируемый таймер к1810ви54 (i8254).
- •2.13 Пример использования таймера.
- •2.14 Обработка прерываний.
- •2.15 Система прерываний вм86.
- •2.16 Контроллер прерываний к1810вн59 (i8259).
- •Дополнительная информация о настройке вн59.
- •Прямой доступ к памяти.
- •Программирование кпдп вт37
- •2.21 Организация процессорного модуля вм86.
- •2.20. Организация шинного интерфейса в максимальном режиме
- •2.23. Слабо связанные конфигурации.
- •2.24. Арбитр шин к1810вб89 (i8289).
- •2.25 Сильно связанные конфигурации на примере совместной работы мп86 и арифметического сопроцессора вм87.
- •2.26. Формат машинной команды вм86.
Внутренняя архитектура мп вм86.
МП ВМ86 состоит из двух основных блоков:
операционного устройства (ОУ);
устройства шинного интерфейса (ШИ).
ОУ включает в себя восемь регистров общего назначения, регистр флагов, шестнадцатиразрядное АЛУ и микропрограммное УУ. Задачей ОУ является выполнение заданных в команде операций. ШИ содержит блок сегментных регистров, указатель команд (программный счетчик), сумматор адресов, очередь команд и буферы, обеспечивающие связь с шиной. ШИ обеспечивает обмен информацией между МП и ОП или портами ВУ. То есть ШИ выполняет циклы шины.
Оба этих устройства могут работать параллельно. Такая структура МП позволяет организовать, так называемый, конвейер команд. В процессе выполнения любой команды всегда имеется промежуток времени, когда системная шина оказывается свободна. Длительность этого промежутка зависит от сложности команды. Обычно, чем сложнее команда, тем длиннее данный промежуток. ШИ использует эти промежутки для опережающей выборки команд из памяти. То есть пока одна команда выполняется, другие команды считываются из памяти, поэтому к моменту начала выполнения команды она, как правило, уже находится внутри МП и не надо тратить время на ее выборку из ОП. Таким образом, конвейер команд позволяет повысить общее быстродействие системы. Отметим, что в МП ВМ86 реализован самый простой двухступенчатый конвейер. В современных МП число ступеней конвейера значительно больше (одна команда выполняется, другая выбирается из ОП, третья дешифрируется, для четвертой формируется адрес операнда и. т. д.).
Выбранные с опережением из ОП команды надо где-то внутри МП хранить. С этой целью в состав ШИ введена очередь команд, представляющая из себя стек, реализующий процедуру FIFO и имеющий глубину шесть байт. Машинные команды МП ВМ86 занимают от одного до шести байт (без учета префиксов). Таким образом, в очереди может одновременно находиться от одной до шести команд. Очередь хорошо заполняется, когда МП выполняет сложные команды (умножение, деление) и может оставаться наполовину пустой при выполнении последовательности простых команд.
Если процессор выполняет команду перехода (jmp, call и.т.д.), информация в очереди оказывается ненужной. Поэтому в этом случае МП автоматически очищает очередь команд и начинает заполнять ее заново.
Сегментация памяти.
Как уже отмечалось выше, МП 8086 имеет 20 адресных линий, то есть может адресовать ОП объемом 1 Мбайт. Эта память логическим образом разбивается на сегменты, объемом 64 Кбайт каждый, которые могут располагаться практически в любом месте памяти. Одновременно МП может работать с четырьмя такими сегментами. Они называются:
сегмент кода, в нем располагается программа, которую выполняет МП;
сегмент стека, в нем организуется стек;
сегмент данных, в нем располагаются данные;
дополнительный сегмент, обычно используется как дополнительный сегмент данных.
Каждому из этих сегментов ставится в соответствие находящийся внутри МП 16 разрядный сегментный регистр. Сегментный регистр cs соответствует сегменту кода, ss – стека, ds –данных и es – дополнительному сегменту.
Содержимое сегментного регистра задает начальный (базовый) адрес соответствующего сегмента в ОП. Однако сегментный регистр 16 разрядный, а адрес ОП должен быть 20 разрядным. Чтобы из шестнадцати разрядов получить двадцать, содержимое сегментного регистра при формировании адреса ОП сдвигают на 4 разряда влево (умножают на 16). Например, пусть cs=2231h, тогда начальный адрес сегмента кода равен 22310h. Отсюда можно сделать вывод, что начальный адрес любого сегмента всегда кратен шестнадцати. Это единственное ограничение на расположение сегментов в памяти. Других ограничений не существует, то есть сегменты могут быть полностью независимы друг от друга, а могут частично и даже полностью перекрываться.
При выполнении команды, если в ней требуется обращение к памяти, МП формирует по адресному коду, заданному в команде, так называемый эффективный адрес (Аэф).
Например, пусть
ds=2200h, bx=1000h, si=0770h
и выполняется команда
mov ax,[bx+si+2]
тогда
Аэф=(bx)+(si)+2=1000h+0770h+2=1772h
Сформированный Аэф рассматривается как внутрисегментное смещение, поэтому далее МП формирует физический адрес (Аф) по следующей формуле:
Аф = (сегментный регистр)×16 + Аэф.
Аф и является адресом ячейки ОП, к которой обращается МП. Для нашего примера (по умолчанию здесь в качестве сегментного регистра берется сегментный регистр ds):
Аф = (ds)×16 + Аэф = 22000h + 1772h = 23772h.
В процессе формирования Аэф возможно возникновение переноса из старшего разряда. При этом данный перенос попросту отбрасывается. Таким образом, после Аэф = ffffh идет Аэф = 0000h. Иначе говоря, достигнув конца сегмента мы автоматически переходим на его начало. Это так называемая кольцевая организация сегмента. Таким образом, существует только один способ выйти за пределы текущего сегмента – сменить содержимое соответствующего сегментного регистра.
В процессе формирования Аф также возможно возникновение переноса из старшего разряда. Как и в предыдущем случае, этот перенос попросту отбрасывается, Получается кольцевая организация памяти. Иначе говоря, никаким способом мы не можем сформировать адрес за пределами 1 Мбайта.