Формат команд процессора Интел Кор 7
Форматы команд этого процессора очень сложны и нерегулярны, изза обратной совместимости.
Есть 6 полей, из которых 5 – не обязательны:
1) Префиксный байт - дополнительный код операции, ставится перед командой, чтобы изменить ее действие.
2) Код операции – сам по себе мало что говорит о команде, его нужно полностью декодировать (это снижает производительность)
Дополнительные биты:
- что вызывается: слово или байт
- является адрес памяти (если он есть) приемником или исходником
3) Байт режима адресации (вся информация об операнде), но первые три бита – для расширения кода операции
4) Для некоторых команд – дополнительный байт, масштаб, индекс, база (Scale, Index, Base - SIB)
5, 6) Некоторые команды имею дополнительные байты для определения:
· Адреса команды (смещения)
· Константы (непосредственный операнд)
24. Ввод-вывод: программный, по прерываниям и ПДП
Для МП-системы разработано три основных режима ввода-вывода:
· программно-управляемый ввод-вывод,
· ввод-вывод по прерываниям,
· режим прямого доступа к памяти (ПДП).
2.6.1. Программный ввод-вывод
Программный ввод-вывод – это наиболее простой способ обмена данными между процессором и внешним устройством. В этом случае всеми действиями по организации обмена управляет процессор, а всем другим элементам системы отводится пассивная роль сигнализации о своей готовности (асинхронный способ обмена). Непроизводительные потери времени МП на ожидание сигнала готовности от УВВ могут оказаться неприемлемыми для систем, работающих в реальном времени.
Известны два типа программно-управляемой передачи данных: синхронная, асинхронная.
1) Синхронная передача данных характерна для периферийных устройств, для которых известны временные соотношения. При этом типе передачи устройство ввода-вывода должно быть готово к приему или передаче данных за время, равное времени выполнения определенной команды процессора. Синхронная передача реализуется при минимальных затратах технических и программных средств.
2) Асинхронная передача данных, иногда называемая обменом посредством “рукопожатия”, широко используется в микроЭВМ. При такой передаче данных ЭВМ перед выполнением операции ввода-вывода проверяет состояние периферийного устройства. Блок-схема алгоритма асинхронного программного обмена (фрагмента некоторой программы) приведена на рис. 16.
Обычно при обмене необходимо:
• проверить состояние устройства (чтение регистра состояния (PC));
• активизировать устройство, если последнее готово к обмену;
• передать данные (чтение регистра данных (РД), запись РД);
• дезактивировать устройство.
Асинхронная передача является идеальной в смысле согласования временных различий между периферийными устройствами и процессором. Недостаток ее в том, что процессор вынужден ожидать, пока периферийное устройство не будет готово к обмену. Это приводит не только к непроизводительным затратам времени МП (при наличии длительных задержек), но и во многих случаях является просто недопустимым.
Например, в процессах управления в этом случае возникает необходимость сохранения уровня сигналов управления на время ожидания передачи. Методом, позволяющим устранить подобные трудности, является передача данных с прерыванием программы.
Рис. 16. Блок-схема алгоритма асинхронного программного обмена
Ввод-вывод по прерываниям
Ввод-вывод по прерываниям подразумевает, что действия по обмену информацией инициируют сами периферийные устройства, генерируя сигнал прерывания.
При восприятии сигнала прерывания микропроцессор приостанавливает выполнение текущей программы, временно запоминает ее состояние (как минимум, запоминается содержание PSW, РС) идентифицирует прерывающее устройство и осуществляет обмен информацией.
После завершения обмена восстанавливается состояние прерванной программы и возобновляется ее выполнение (рис. 17).
В данном режиме на ввод-вывод расходуется гораздо меньше времени микропроцессора, чем в программно-управляемом ВВ, поэтому система может выполнить больше полезной работы или обслужить больше периферийных устройств.
Для повышения производительности системы необходимо освободить процессор от опроса готовности ВУ к обмену. Эту функцию берет на себя контроллер прерываний ВУ. Получив команду ввода-вывода, контроллер передает ее ВУ и следит за временем ее выполнения. По окончании действий в ВУ (печати, перфорации и т. п.) контроллер посылает в процессор сигнал требования прерывания, получает очередную команду ввода-вывода, и действия повторяются. Процессор в этом случае, передав в контроллер очередную команду ввода-вывода, может выполнять другие операции основной программы до получения сигнала требования прерывания. Получив его, он обслуживает это прерывание, то есть формирует и выдает в контроллер очередную команду ввода-вывода, а затем возвращается к выполнению прерванной основной программы.
Ввод-вывод по прерываниям, однако, требует усложнения аппаратных средств – создания системы прерываний.
Структура таблицы векторов прерываний для ип от Intel имеет вид
Обращение к элементам таблицы осуществляется по 8-разрядному коду - типу прерывания
. | |
Тип прерывания | Источник прерывания |
Деление на 0 | |
Пошаговый режим выполнения программы | |
Запрос по входу NMI | |
· · · | |
Запрос по входу IRQ0 (системный таймер) | |
Запрос по входу IRQ1 (контроллер клавиатуры) | |
· · · | |
Отсутствие сегмента в оперативной памяти | |
· · · | |
Пользовательское прерывание |
На уровне электроники внешние прерывания организованы следующим образом. Имеется контроллер прерываний (микросхема i8259А), выполняющий несколько важных функций:
· получение сигналов на прерывания от внешних устройств,
· маскировка (т. е. запрещение обработки) некоторых прерываний,
· арбитраж приоритетов прерываний и
· формирование очереди запросов на прерывание.
Контроллер имеет три 8-разрядных регистра и 8 входов от внешних устройств, называемых IRQ0, IRQ1, ...IRQ7 (Interrupt ReQuest), выход INT на процессор (соединяемый со входом процессора INTR) и вход обратной связи от процессора INTA, по которому процессор подтверждает начало обработки прерывания.
Запрос на прерывание, поступающий на некоторый вход IRQ, устанавливает в 1 соответствующий бит 8-разрядного регистра фиксации запросов прерываний (IRR). Если соответствующее прерывание не замаскировано 8-разрядным регистром маски (IMR может программироваться) и если процессор не занят обработкой прерывания высшего или равного приоритета (что определяется 8-разрядным регистром ISR), запрос на прерывание поступает с выхода INT на вход прерываний процессора INTR, и процессор подтверждает по линии INTA.
Один контроллер прерываний имеет 8 входов (IRQ), чего явно недостаточно для обслуживания внешних устройств современного компьютера (таймер, часы реального времени, клавиатура, гибкий и жесткий диски, мышь, последовательные и параллельные порты и проч.).
Однако несколько контроллеров прерываний могут быть включены последовательно. На современных компьютерах (начиная с 286) один (ведущий) контроллер прерываний подключен непосредственно к процессору, а второй (ведомый) своим выходом INT подключен ко входу IRQ2 ведущего контроллера. Итого получается 15 входов прерываний от IRQ0 до IRQ 15 (IRQ2 не может быть использован).
При подаче сигнала на прерывание от контроллера к процессору по линии INTR-INT, одновременно по линиям данных из контроллера прерываний в процессор поступает номер вектора прерывания, который образуется путем сложения IRQ с некоторым базовым номером, который присваивается ВIOSом контроллеру в процессе загрузки (значения по умолчанию 08h для ведущего контроллера и 70h для ведомого). Таким образом, например, номер вектора прерывания для клавиатуры будет 08+1=9h, для жесткого диска 70h+6=76h.
Контроллер прерываний допускает перепрограммирование для установки различных режимов формирования очереди запросов, изменения приоритетов прерываний, изменения базовых номеров контроллеров. Такое перепрограммирование осуществляется через два байтовых порта 20h и 21h. По умолчанию IRQ отдельного контроллера имеют приоритеты в соответствии с их номерами (IRQ0 – наивысший, IRQ7 – наинизший).
Структура контроллера приоритетных прерываний имеет вид
Пример каскадного включения двух контроллеров прямого доступа к памяти