Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Организация ЭВМ и систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Следует отметить, что шинный интерфейс инициирует необходимое количе-
ство обращений к памяти для выборки слова автоматически, и поэтому двукратное
обращение к памяти не требует специальных указаний в программе. Особенно важ-
но иметь выровненные слова при операциях со стеком, поскольку в этих операциях
используются только слова. Следовательно, указатель стека SP всегда должен ини-
циализироваться на четном адресе.
Команды всегда выбираются словами, расположенными на четных адресах, за
исключением первой выборки после передачи управления, когда выбирается один
байт. Поток команд делится на байты при заполнении очереди команд внутри мик-
ропроцессора, поэтому выравнивание команд не влияет на производительность и,
следовательно, не применяется.
7.4.2 Сегментация памяти и вычисление адресов представляют собой органи-
зацию пространства памяти емкостью 1 Мбайт в виде набора сегментов, которые
определяются программно. Каждый сегмент состоит из смежных ячеек памяти и
представляет независимую и отдельно адресуемую единицу памяти емкостью 64
Кбайт. Программа назначает каждому сегменту начальный (базовый) адрес, кото-
рый представляет собой адрес первого байта сегмента в пространстве памяти. Четы-
ре из этих сегментов, выбранных в качестве текущих, соответственно записываются
в сегментные регистры CS, DS, SS и ES, что фиксирует текущие сегменты для кода
(программы), данных, стека и дополнительных данных. Для доступа к командам и
данным, находящимся в других сегментах, требуется изменить содержимое сег-
ментных регистров, что позволяет использовать всё пространство памяти емкостью
1 Мбайт. Инициализация сегментных регистров обычно выполняется в начале про-
граммы путем загрузки соответствующих констант. В частных случаях инициализа-
ции сегментных регистров нулями происходит отказ от сегментации памяти, что
схоже с организацией памяти в архитектуре ВМ80.
Сегментный регистр содержит 16 старших битов начального адреса сегмента,
при этом четыре младших бита адреса устанавливаются в ноль и добавляются спра-
ва к содержимому сегментного регистра при вычислении физических адресов ячеек
памяти. Это означает, что начальные адреса сегментов всегда кратны 16. В контек-
111
сте размещения сегментов в памяти не существует других ограничений, и сегменты
могут быть соседними (смежными), неперекрывающимися, частично или полностью
перекрывающимися. Физическая ячейка памяти может быть частью одного или не-
скольких сегментов.
7.4.3 Физический адрес ячейки памяти представляет собой 20-битовое значе-
ние, охватывающее диапазон от 0 до FFFFF, что обеспечивает уникальную иденти-
фикацию положения каждого байта в пространстве памяти емкостью 1 Мбайт. В
начале каждого цикла шины, связанного с обращением к памяти, физический адрес
передается на шину адреса и сопровождается сигналом ALE (Address Latch Enable).
Учитывая, что микропроцессор ВМ86 является 16-битовым, все вычисления физи­ческого адреса выполняются на основе 16-битовых адресных объектов.
7.4.4 Логический адрес ячейки памяти состоит из двух 16-битовых беззнако-
вых значений: начального адреса сегмента, который также называется базой сегмен-
та, и внутрисегментного смещения, определяющего расстояние от начала сегмента
до конкретной ячейки. Для вычисления физического адреса база сегмента смещает-
ся на 4 бита влево и затем складывается со смещением, как показано на рисунке 7.4,
где также указаны возможные источники компонентов логического адреса (эффек-
тивный адрес, вычисляемый в соответствии с заданным методом адресации).
Рисунок 7.4 – Вычисление физического адреса
112
При этом происходящий перенос из старшего бита, который может возник-
Тип обращения
к памяти
Сегмент
(по умолчанию)
Вариант
Смещение
Выборка команды
CS
Нет
IP
Стековая операция
SS
Нет
SP
Переменная
DS
CS, SS, ES
EA
Цепочка – источник
DS
CS, SS, ES
SI
Цепочка – приемник
ES
Нет
DI
BP как базовый регистр
ES
CS, SS, DS
EA
нуть в результате суммирования, игнорируется. Это приводит к организации памяти
в виде кольца, где ячейка с максимальным адресом FFFFF следует за ячейкой с ад­ресом 0. Аналогично, каждый сегмент организован как кольцо.
В таблице 7.2 представлены различные источники логического адреса для раз-
личных типов обращения к памяти. Команды всегда выбираются из текущего сег-
мента кода в соответствии с логическим адресом CS: IP. Стековые команды всегда
обращаются к текущему сегменту стека по адресу SS: SP. Если при вычислении ад-
реса Эффективного Адреса (ЕА) используется регистр ВР, то обращение также вы-
полняется к сегменту стека. В этом случае принцип стека "первый пришел - послед-
ний вышел" игнорируется, и ячейки стекового сегмента рассматриваются как об-
ласть памяти с произвольным доступом, что обеспечивает большую гибкость в ис-
пользовании этих ячеек.
Таблица 7.2 – Источники логического адреса для различных типов обращения к памяти
Обычно операнды размещаются в текущем сегменте данных, и обращение к
ним организуется по адресу DS:EA. Однако программист может указать МП обра-
титься к переменной, находящейся в другом текущем сегменте. Предполагается, что
цепочка-источник находится в текущем сегменте данных, а ее смещение определя­ется регистром SI. Цепочка-получатель обязательно располагается в текущем до-
полнительном сегменте, а смещение берется из регистра DI. Команды обработки це-
113
почек автоматически модифицируют содержимое индексных регистров SI и DI по
мере передвижения по цепочке в направлении, определенном флагом DF.
Смена сегментного регистра в соответствии с вариантами, указанными в таб-
лице 7.2, осуществляется путем применения однобайтового префикса замены сег-
мента, обозначаемого как «001SR110». Этот префикс размещается перед первым
байтом команды. Двухбитовое поле SR содержит код сегментного регистра, кото-
рый будет использован для вычисления физического адреса в данной команде: 00 – регистр ES; 01 – CS; 10 – SS; 11 – DS. В мнемонических обозначениях команд сме-
ны сегмента выглядят следующим образом: например, «MOV AX, CS:[BX]» означа-
ет пересылку слова из кодового сегмента с использованием смещения, указанного в
регистре BX, и размещение его в регистре AX. А «ADD ES:[ROW|DI], BL» означает
сложение байта из дополнительного сегмента (со смещением |ROW) с содержимым
регистра BL и запись результата обратно в память в место первого слагаемого.
Сегментная структура памяти предоставляет возможность создания позицион-
но независимых или динамически перемещаемых программ. Это особенно важно в
мультипрограммной среде, где эффективное использование оперативной памяти
требует возможности перемещения программ в адресном пространстве. Для обеспе-
чения позиционной независимости все смещения в программе должны задаваться
относительно фиксированных значений, хранящихся в сегментных регистрах. Это
позволяет изменять положение программы в памяти, не изменяя ее внутренней
структуры, а обновлять только содержимое сегментных регистров.
7.4.5 Стековый сегмент, как правило, располагается в оперативной памяти
(ОЗУ), и его местоположение определяется значениями сегментного регистра SS (Segment Selector) и регистра SP (Stack Pointer). Регистр SS хранит базовый адрес
текущего сегмента стека, а регистр SP указывает на вершину стека, содержа смеще-
ние вершины стека относительно начала сегмента. При каждом обращении к стеку
(как при записи, так и при чтении данных) происходит автоматическая модификация
значения регистра SP: при записи в стек значение SP уменьшается на два (или дру-
гую подходящую величину, зависящую от размера записываемых данных), а при
чтении данных из стека значение SP увеличивается на два (или соответствующую
114
величину). Это обеспечивает правильное перемещение между стековыми элемента-
ми и предотвращает перезапись данных.
Несмотря на преимущества организации памяти в BM86, следует отметить не-
который недостаток, связанный с усложнением программной обработки физических
адресов, когда такая манипуляция становится необходимой.
7.5 Организация ввода-вывода
Ввод и вывод информации в вычислительной системе может осуществляться
двумя способами (рисунок 7.5):
с использованием изолированного адресного пространства ввода-вывода;
с использованием общего с основной памятью адресного пространства, то
есть отображением на память.
Рисунок 7.5 – Организация адресного пространства ввода-вывода
115
Микропроцессор Intel 86 располагает адресным пространством ввода-вывода,
содержащим до 65536 портов, каждый из которых имеет ширину в 8 бит, образуя в
общей сложности 64 Кбайта адресуемой памяти. Это пространство ввода-вывода
полностью изолировано от адресного пространства оперативной памяти компьюте-
ра. Для взаимодействия с этим адресным пространством используются команды IN
(для ввода данных) и OUT (для вывода данных), которые позволяют передавать ин-
формацию между аккумулятором AL (для байтовых данных) или регистром AX (для
слов) и выбранными портами ввода-вывода.
Пространство ввода-вывода не подвергается сегментации, и для обращения к портам ввода-вывода шинный интерфейс просто размещает 16-битный адрес порта
на младших 16 линиях шины адреса/данных. Существуют различные виды команд
ввода-вывода, позволяющие указать адрес порта либо как фиксированное 8-битное
значение, непосредственно внесенное в команду, либо как переменную, адрес кото-
рой находится в регистре DI с использованием метода косвенной адресации.
8 ячеек F8 - FF в пространстве ввода-вывода зарезервированы для системных целей и использовать их в прикладных программах не рекомендуется.
МП может передавать по шине байт или слов в (из) УВВ, адрес которого
находится в пространстве в/вывода. Чтобы слово передавалось за один цикл шины,
адрес должен быть четным. Адрес байтного устройства может быть четным или не-
четным.
Существует также возможность размещать адреса портов ввода-вывода в ад-
ресном пространстве оперативной памяти, что называется отображенным на память
вводом-выводом. В этом случае, любая команда, которая обращается к адресу в па­мяти, может быть преобразована в команду ввода-вывода, позволяя обмениваться данными между общими регистрами и портами ввода-вывода. Это означает, что ло-
гические команды, такие как AND (логическое умножение), OR (логическое сложе-
ние) и XOR (логическое сложение по модулю 2), могут быть использованы для ма-
нипуляции битами в регистрах периферийных устройств. В таких командах можно
использовать различные режимы адресации, включая косвенную адресацию и дру-
гие методы. Недостатки этого режима:
116
усложняется дешифрация 20 битного физического адреса памяти;
команды с обращением к памяти имеют больший формат, чем простые ко-
манды IN и OUT и выполняются несколько дольше;
сокращается число доступных адресов памяти.
7.5.1 Рассмотрим адресацию портов ввода-вывода. Если порты ввода-вывода
отображены в адресном пространстве памяти, то при доступе к ним можно исполь-
зовать любые режимы адресации операндов, которые обычно применяются к опе-
рандам, находящимся в памяти. В этой ситуации также возможно использование це-
почечных команд, при условии наличия соответствующего аппаратного интерфейса.
Для доступа к портам, находящимся в адресном пространстве ввода-вывода, используются два основных режима адресации, представленные на рисунке 7.6.
Рисунок 7.6 – Адресация портов ввода-вывода
В прямой адресации номер порта представляет собой 8-битный непосред-
ственный операнд, находящийся во втором байте команды, что обеспечивает обра-
щение к фиксированным портам 0-225. Косвенная адресация портов ввода-вывода
аналогична регистровой косвенной адресации операндов в памяти: номер порта
находится в регистре DX и имеет диапазон 0-65535. С помощью предварительной
инициализации регистра DX одна и та же команда может обращаться к любому пор-
117
ту в адресном пространстве ввода-вывода. К группе соседних портов возможно об-
ращаться с помощью простого программного цикла, который модифицирует содер-
жимое регистра DX.
Примеры использования команд ввода-вывода в ассемблерных программах приведены ниже:
IN AL, 40H ; Ввод байта из фиксированного порта MOV DX, 320h ; Ввод в DX адреса порта OUT DX, AX ; Вывод слова по адресу, хранимому в DX
IN AX, DX ; Ввод слова из устройства, адрес которого хранится в DX.
7.6 Организация прерываний
При работе микропроцессорных систем (МПС) могут возникать ситуации, при
которых МП должен временно прекратить выполнение текущей программы. В таких
случаях программа приостанавливается, и в стеке сохраняются параметры точки
останова, включая адрес возврата (CS и IP), состояние регистра F, а также значения
определенных регистров МП, если это необходимо. Затем система переходит к вы-
полнению программы обработки возникшей ситуации. По завершении обработки
прерывания система восстанавливает параметры точки остановки и возвращается к
выполнению основной программы. Этот процесс называется прерыванием, а про-
грамма обработки ситуации – программой прерывания.
Микропроцессор Intel 8086 (и схожие с ним) имеет простую, но весьма уни-
версальную систему прерываний. Каждому типу прерывания соответствует уни-
кальный код, который идентифицирует причину прерывания для МП.
Кроме того, микропроцессор К1810 позволяет распознавать 256 различных
типов прерываний. Программа прерывания вызывается при выполнении команды
INT type, которая является частью командного набора МП К1810. Здесь type обозна-
чает код типа прерывания и может принимать значения в диапазоне от 0 до 255.
118
Все прерывания можно классифицировать как внешние, внутренние и про-
граммные. Внешние прерывания вызываются внешними устройствами, такими как
периферийные устройства, а также сигналами от окружающей среды. Внутренние
прерывания происходят из-за состояний или событий, вызванных МП, например,
деления на ноль или переполнения. Программные прерывания инициируются про-
граммой и позволяют программисту вызывать прерывания по своему усмотрению.
Источники прерываний указаны на рисунке 7.7.
Рисунок 7.7 – Возможные источники прерываний
7.6.1 Внешние прерывания инициируются внешними устройствами (ВУ) пу-
тем отправки сигнала «Запрос на прерывание». Запросы на выполнение программы
для внешних прерываний могут поступать в микропроцессор (МП) через два входа:
INTR (Interrupt Request) или NMI (Non-Maskable Interrupt). В зависимости от этого
различают между собой прерывания на маскируемые и немаскируемые внешние
прерывания.
Для маскирования внешних маскируемых прерываний используется флаг IF
(Interrupt Flag). Если IF установлен в 0, то запрос на прерывание от внешнего
устройства игнорируется, и микропроцессор не реагирует на него. Если IF равен 1,
119
то процессор воспринимает и обрабатывает запрос на прерывание. Установку и
сброс флага IF можно выполнить с помощью команд CLI (Clear Interrupt Flag - за­прет прерываний) и STI (Set Interrupt Flag - разрешение прерываний).
Для организации внешних маскируемых прерываний в микропроцессорной
системе (МПС) обычно используется специальный блок, называемый «узел преры-
ваний», который принимает запросы от внешних устройств, подключенных к МПС.
При запуске МПС происходит программирование узла прерываний, определяющее
порядок и приоритет обработки различных прерываний. Основными параметрами
программирования являются:
присвоение каждому входу запроса от ВУ типа прерывания, т.е. параметра «type»;
присвоение каждому входу запроса приоритета обслуживания.
Для управления очередностью обслуживания нескольких одновременных за-
просов, которые могут поступить одновременно, в системе прерываний использует-
ся система приоритетов. По данной системе, прерывание с более высоким приорите-
том будет обслуживаться в первую очередь, и оно может прервать выполнение про-
граммы обслуживания ВУ с более низким приоритетом.
Когда внешнее устройство требует важной или срочной связи с микропроцес-
сором, оно отправляет запрос в узел прерываний. Узел прерываний уведомляет мик-
ропроцессор о возникшей ситуации через вход INTR (Interrupt Request). Если пре-
рывания разрешены (флаг IF установлен в 1), микропроцессор приостанавливает
выполнение текущей программы и готов к переходу к выполнению программы пре-
рывания. Узел прерываний передает в микропроцессор параметр «type» (тип преры-
вания) через шину данных, который соответствует программе обработки запроса от
данного внешнего устройства. Этот параметр определяет вектор прерывания, кото-
рый используется для вычисления начального адреса программы обработки данного
запроса. После обслуживания прерывания микропроцессор выдает второй сигнал,
сигнализирующий об окончании обработки прерывания.
7.6.2 Внешнее немаскируемое прерывание имеет фиксированный тип, равный
2, и оно формируется автоматически внутри микропроцессора. Такое прерывание
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]