Режимы адресации памяти микро-ЭВМ «Электроника-60», основанные на использовании регистра с номером 7 как счетчика команд
При выполнении операции, указанной в текущей команде, счетчик команд содержит адрес следующей команды. Применительно к фазе выборки операндов это утверждение в общем случае несправедливо, так как, например, в двухсловных и трехсловных командах счетчик команд последовательно адресует сначала первое слово, затем второе и третье и только после этого в нем формируется адрес следующей команды. Используя счетчик команд, как и всякий регистр общего назначения, и учитывая его функцию, можно реализовать дополнительные режимы адресации. Хотя формально при этом существует восемь таких режимов, полезны из них только четыре:
2 Непосредственный # n
3 Абсолютный * # n
6 Относительный А
7 Относительный косвенный * А
Непосредственный режимпозволяет задавать константу в качестве одного из операндов. Значение константы запоминается в слове, следующем за первым (основным) словом команды. Следовательно, в целом команда становится двухсловной.
Таким образом, символическое обозначение непосредственного режима — это сокращенная запись, в которой использование регистра 7 предполагается по принципу умолчания.
Абсолютный режимимеет уровень косвенной адресации, равный 1.
Константа, запоминаемая в памяти вслед за словом команды, используется для адресации операнда. Этот режим чаще всего применяется для доступа к операндам, хранящимся по заранее известным адресам памяти.
При относительном режимеадресация операнда осуществляется относительно текущего значения счетчика команд, трактуемого в этом случае как индексный регистр. Например, команда
MOV 76(PC), R2,
имеющая адрес 1500, осуществляет загрузку в регистр R2 содержимого слова памяти, имеющего адрес 1602 (все адреса и данные считаются восьмеричными числами). Записанное в команде число 76 представляет собой положительное смещение, которое надо прибавить к текущему содержимому счетчика команд для получения эффективного адреса первого операнда. Значение смещения хранится в слове, следующем за первым (основным) словом команды. Следовательно, при выборке содержимого второго слова счетчик команд будет хранить адрес 1504. При этом 1504 -(- 76=1602 в восьмеричной системе счисления, а это и есть адрес первого операнда. В приведенном примере команды смещение записано в явном виде. Однако в действительности оно не всегда заранее известно. Другое неудобство записи смещения в явном виде состоит в том, что при отладке и изменении текста программы значение смещения может измениться. Чтобы избавить программиста от необходимости всякий раз подсчитывать и записывать смещение в команде, относительный режим адресации предусматривает использование символических имен операндов. В этом случае смещение подсчитывает ассемблер на этапе трансляции программы. Относительный косвенный режим характеризуется уровнем косвенной адресации, равным двум. В этом случае, как и в относительном режиме, в команде используется символическое имя, которому должен предшествовать признаку. Слово памяти, которому присвоено записанное в команде имя, содержит адрес операнда. Режим адресации памяти, использующий регистр с номером 6 для хранения указателя стека.Как отмечалось выше, автоинкрементный и автодекрементный косвенные режимы удобны для выполнения операций над особой структурой данных – стеком. В микро-ЭВМ «Электроника-60» стек организуется в оперативной памяти. Для этой цели чаще выбирают адреса слов 400—476. Выполнение основных операций над стеком (включение элемента в стек и исключение элемента из него) осуществляется с помощью указателя стека, представляющего собой адрес «верхнего» доступного элемента в стеке. Обычно для хранения указателя стека используется регистр 6, которому присваивается имя SP.
Перед началом работы ЭВМ стек пуст, а указателю стека присваивается значение наибольшего адреса слова в той области памяти, которая отведена для стека (чаще начальное значение указателя стека равно 500). При включении элемента (слова) в стек значение указателя сначала уменьшается на два, а затем по адресу, равному значению указателя, записывается нужный элемент. При включении элемента из стека значение исключаемого элемента считывается по адресу, равному текущему значению указателя стека, после чего осуществляется увеличение значения указателя на два.
Используя любой из регистров (R0—R5), можно организовать стек, элементами которого могут быть не слова, а байты. Структуры пословного (а) и байтного (б) стеков показаны на рис. 9. На рисунке заштрихованы занятые элементы стеков.
Рис. 9. Структура пословного (а) и байтного (б) стеков.
Литература:
1. Л.Н. Преснухин «Микропроцессоры» ч. 1, стр.: 357-379.
2. В.В. Стрыгин «Основы вычислительной, микропроцессорной техники и программирования», стр.: 139-141.
3. Б.Я. Лихтциндер «Микропроцессоры и вычислительные устройства в радиотехнике», стр.: 134-150.
ЗАНЯТИЕ 3.3.2. Языки программирования.
ВОПРОСЫ ЗАНЯТИЯ:
1. Языки программирования.
2. Средства программирования.
ПЕРВЫЙ ВОПРОС
Языки программирования для микроЭВМ можно разделить на три основных уровня: машинные, алгоритмические высокого уровня и ассемблера.
Машинные языки находятся на самом нижнем уровне иерархии языков программирования и им свойствен следующий недостаток. Будучи языками цифр, они неудобны для описания вычислительных процессов, требуют от программистов больших усилий при написании и отладке программ. Достоинство машинного языка - для программирования на нем требуется лишь знание системы команд ЭВМ, а для выполнения составленных таким образом программ вычислительная машина не нуждается ни в каком трансляторе. Кроме того, при использовании машинного языка можно достигнуть максимальной гибкости в реализации технических возможностей ЭВМ.
Алгоритмические языки высокого уровня (например, ФОРТРАН, БЕЙСИК, ПЛ/М, ПАСКАЛЬ, АДА и др.) занимают верхнее положение в иерархии языков программирования. Будучи приближенными к привычной математической нотации и в ряде случаев обеспечивая естественную форму описания вычислительных процессов, они достаточно просты и удобны в программировании, но не всегда позволяют в полной мере реализовать технические возможности ЭВМ, а результирующие машинные программы, получаемые после трансляции программ с алгоритмических языков, обычно неэффективны с точки зрения объема или быстродействия. Недостаток таких языков заключается в том, что их применение предполагает наличие транслятора, представляющего собой сложный программный комплекс и требующего для своей разработки большого труда. Тем не менее, вследствие своих неоспоримых достоинств алгоритмические языки высокого уровня широко применяются в программировании для различных классов микроЭВМ.
Языки ассемблера, занимая промежуточное положение между машинными языками и языками высокого уровня (будучи при этом гораздо ближе к машинным языкам), объединяют в себе некоторые достоинства самого нижнего и самого верхнего уровней языков программирования. Свое название языки ассемблера получили от имени программы, преобразующей программу на таком языке, в машинные коды.
Язык Ассемблер, обеспечивая возможность использования символических имен в программе и избавляя программиста от утомительной работы по распределению памяти ЭВМ для переменных и констант, существенно облегчает труд программиста, повышает производительность по сравнению с программированием на машинном языке. Язык Ассемблер позволяет гибко и полно реализовать технические возможности ЭВМ, как и машинный язык. Транслятор программ с языка Ассемблера гораздо проще и компактней транслятора программ, требующегося для алгоритмического языка высокого уровня, а результирующая машинная программа на выходе ассемблера может быть столь же эффективной, как и программа, которую сразу написали на машинном языке.
Каждый язык ассемблера является машинно-зависимым и отражает аппаратурные особенности (в частности, состав программно-доступных регистров) той микроЭВМ, для которой он создан.
Программа, написанная на языке Ассемблер, состоит из последовательности предложений, или операторов, и называется исходной программой или исходным модулем.
Одна из тенденций развития языков программирования – более широкое использование непроцедурных или описательных языков. Описательная программа констатирует, какой результат желателен, не указывая, как этого достичь. В программе формулируются соотношения, а не последовательность вычислений, и, таким образом, программист освобождается от обязанности разрабатывать шаги алгоритма и определять их порядок. Наиболее известные непроцедурные языки: Визикальк, Мультиплан, Пролог.
Другое направление, по которому развиваются языки программирования, использование параллельных вычислений в мультипроцессорных системах. Казалось бы, что 100 процессоров должны решить задачу в 100 раз быстрее, чем один. Но такого ускорения можно достичь только тогда, когда программное обеспечение способно разбить задачу на много частей, которые могут решаться одновременно.
В некоторых языках предусмотрены явные способы указания заданий, которые могли бы выполняться параллельно. В других языках предполагается, что компилятор будет анализировать и выявлять то, что поддается распараллеливанию. Одним из таких языков является язык Компел.
Среди огромного разнообразия языков программирования не существует самого лучшего или самого худшего. Выбор языка программирования в каждом конкретном случае определяется целями его предполагаемого применения.
ВТОРОЙ ВОПРОС
Имеется пять классов средств программирования:
- редактирующие программы,
- транслирующие программы,
- программы-загрузчики,
- моделирующие программы,
- отладочные программы.
Каждый из этих классов облегчает выполнение некоторого этапа разработки программ. Редактирующие программы облегчают создание исходной программы. С помощью транслирующих программ из исходной получают объектную программу, т. е. программу на машинном языке. Загрузчики переносят объектную программу из внешней памяти, например перфоленты, в память микроЭВМ. Моделирующие программы позволяют проверить значительную часть объектной программы при отсутствии микроЭВМ. Отладочные программы облегчают отладку объектной программы на микроЭВМ.
Все эти средства программирования делятся на кросс-средства и резидентные. Кросс-средства — это программы, которые выполняются не на микроЭВМ, для которой разрабатывается программное обеспечение, а на какой-либо другой машине. Резидентные средства — это программы, которые выполняются на микропроцессоре, для которого разрабатывается программное обеспечение.
Рассмотрим подробнее перечисленные классы средств программирования.
Редактирующие программы –это программы, облегчающие создание исходных программ. Редактирующая программа принимает исходную программу, обычно вводимую в ЭВМ с клавиатуры (иногда с перфоленты), и записывает часть этой программы во внешнюю память ЭВМ, например на диск или магнитную ленту.
Редактирующая программа выполняет также специальные команды пользователя по добавлению, исключению или замене частей исходно программы, хранимой во внешней памяти. Редактирующие программы оперируют с исходной программой как с текстом, совершенно не учитывая те синтаксические правила, которым должна удовлетворять программа.
Редактирующие программы различаются возможностями, которые они предоставляют для выполнения изменений в программе. Например, некоторые редактирующие программы могут оперировать только с целыми строками программы, другие — могут добавлять, исключать или заменять в программе произвольные последовательности символов.
Транслирующие программы обеспечивают получение объектной программы из программы, написанной на языке высокого уровня.
Важно различать язык программирования и реализацию языка. Язык программирования — это система записи, набор правил, определяющих синтаксис правильной программы. Реализация языка — это программа, которая преобразует запись высокого уровня: в последовательность машинных команд.
Имеются два основных вида средств реализации языка (транслирующих программ): компиляторы и интерпретаторы.
Компиляторы транслируют вес текст программы, написанной на языке высокой уровня, в машинный код в ходе одного непрерывного процесса. При этом создается полная программа в машинных кодах, которую затем можно выполнить безучастия компилятора. Обычно работа с компилируемым языком состоит из трех этапов: сначала текс программы создается при помощи редактора текст или какой-либо другой программы текстовой обработки, затем текст компилируется, и наконец, скомпилированная программа выполняется.
Интерпретатор — это программа, осуществляющая пошаговую трансляцию входной программы с последующим исполнением машинной программы, полученной на каждом шаге трансляции. Разница между компилятором и интерпретатором подобна разнице между переводчиком литературы и переводчиком устной речи. Переводчик литературы берет всю книгу и создает новый текст на другом языке. Переводчик устной речи переводит каждую фразу, как только она произнесена.
Для выполнения интерпретируемой программы интерпретатор должен находиться в основной памяти, в то время как для скомпилированной программы компилятор уже не нужен.
В принципе любой язык программирования может быть как интерпретируемым, так и компилируемым, но в большинстве случаев по традиции у каждого языка есть свой предпочтительный способ реализации.
Основное преимущество компиляции – высокая скорость выполнения готовой программы, поскольку интерпретатор должен строить соответствующую последовательность команд в момент, когда инструкция выполняется.
Интерпретируемый язык неизбежно медленнее компилируемого. В то же время интерпретируемый язык часто более удобен для программиста. Он хорошо подходит для диалогового стиля разработки программы. Отдельные части программы можно написать, проверить и выполнить, не выходя из интерпретатора, а когда найдена ошибка, ее можно исправить немедленно, и при этом нет необходимости возвращаться к программе редактирования текста и затем компилировать программу снова.
Программы-загрузчики –это программы, которые переносят объектную программу с внешнего носителя информации, например перфоленты или линии связи, в оперативную память микроЭВМ.
Эта функция загрузчика должна выполняться на микроЭВМ, для которой разработано программное обеспечение. На загрузчик могут быть также возложены функции преобразования перемещаемого варианта объектной программы в программу в абсолютных адресах и установления связей между объектными программами с помощью взаимных ссылок. Последний процесс называется редактированием внешних связей. В обоих случаях загрузчик изменяет объектную программу на основе управляющей информации, получаемой загрузчиком как от языкового транслятора, так и непосредственно от программиста. Части программы-загрузчика, реализующие функции перемещаемости и редактирования внешних связей, могут быть межмашинными или резидентными программами. Загрузчики резидентного типа обычно поставляются на перфолентах или в виде программируемого ПЗУ.
Моделирующие программы -это межмашинные программы, позволяющие пользователю отлаживать объектную программу без микроЭВМ. Кроме того, моделирующие программы часто предоставляют некоторые виды диагностической информации, недоступной при использовании отладочной программы на микроЭВМ, такие, как указание о переполнении стека или указание о попытке программы записать информацию в ПЗУ. Моделирующая программа под управлением пользователя моделирует выполнение объектной программы на микроЭВМ. Моделирующие программы позволяют: оперировать и выводить на дисплей содержимое памяти моделируемой микроЭВМ и регистров микропроцессора; устанавливать контрольные точки в программе, в которых программа может быть приостановлена при достижении некоторого адреса в программе или при чтении или записи в некоторую ячейку памяти; задавать листинг с печатью каждой команды, принадлежащей области адресов, указанной при задании режима листинга по мере ее выполнения. Моделирующие программы часто предоставляют информацию о времени выполнения программы, например число команд и (или) машинных тактов, выполненных от начала работы программы до ее останова. Моделирующие программы различных производителей отличаются по своим возможностям, однако независимо от того, насколько хороша моделирующая программа, она никогда не может заменить полностью отладку программы на микроЭВМ. Это объясняется тем, что специфические временные соотношения и условия внешнего окружения аппаратуры микроЭВМ невозможно смоделировать полностью.
Отладочные программы являются резидентными, облегчающими отладку объектной программы на микроЭВМ. Обычно они принимают от пользователя команды на выполнение следующих функций: вывод на дисплей (на печать) содержимого постоянной памяти или памяти с произвольным доступом микроЭВМ, а также содержимого регистров центрального процессора; изменение содержимого оперативной памяти; выполнение программы с указанного адреса; приостановка выполнения программы с указанного адреса; приостановка выполнения программы по достижении команды, находящейся в определенной ячейке памяти, или при выполнении заданного условия.
Отладочная программа может приостановить выполнение программы в любом месте, где встречается ссылка на обозначенный идентификатор или переменную; где происходит изменение значения переменной; если переменная принимает любое значение между заданными границами; если переменная или число исполнений оператора становятся равными заданному значению, Кроме этого, возможно выделение специальных регистров слежения, контролирующих состояние шины управления микропроцессора.
Отладочные программы в сочетании с моделирующими программами позволяют значительно уменьшить вероятность появления ошибок в объектных программах.
Литература:
1. М.В. Напрасник «Микропроцессоры и микроЭВМ», стр.:137-143.
ТЕМА 3.4Структура команд микроЭВМ.
ЗАНЯТИЕ 3.4.1. Требования, предъявляемые к системам команд, методам
адресации данных и управлению адресами и операциями.
ВОПРОСЫ ЗАНЯТИЕ:
1. Общие требования к системе команд и методам адресации.
2. Особенности построения и функционирования логических блоков прерывания работы микропроцессоров.
3. Методы и средства управления вводом — выводом данных.
ПЕРВЫЙ ВОПРОС
Системы команд и методы адресации данных.Автоматизация обработки информации и управления МП обеспечивается цифровым программным управлением. Программа вычислений записывается в памяти системы в виде последовательности команд. Каждая команда программы должна: определять вид операции, исполняемой в данном цикле работы; задавать адреса (адрес) двух (или одного) операндов, участвующих в операции; определять место засылки результата операции; указывать адрес расположения следующей команды.
Вследствие малой разрядности микропроцессора очень трудно столь обширную информацию указать с помощью только одного машинного слова. Поэтому проблема выбора формата команд и кодирования полей команд микропроцессора имеет особое значение.
Разрядность команды микропроцессора имеет очень большое значение, поскольку МП отличаются друг от друга именно построением и интерпретацией команд. Гибкость микро-ЭВМ и ее эффективность определяются логической мощностью команд, полнотой системы команд, средствами и способами адресации, а также возможностями организации разветвленных вычислительных процессов. Поэтому большая разрядность команды обеспечивает более широкие возможности микропроцессоров.
Рассмотрим гипотетический формат команд, обращая внимание на необходимость жесткой экономии их разрядности. Код операции должен занимать более трех разрядов, иначе «бедность» выполняемых микропроцессором операций породит проблему «длинных» программ даже для простых задач. Кроме арифметических и логических операций необходимо предусмотреть операции пересылок информации в регистрах микропроцессоров, операции ветвления в зависимости от различных условий, операции ввода — вывода. В системе команд микропроцессора желательно предусмотреть механизм работы со стандартными подпрограммами, поскольку из-за существенных аппаратурных ограничений многие сложные функции в нем выполняются программным способом.
Несмотря на то что при проектировании микропроцессоров может быть использовано большое количество вариантов выделения полей команд, ограниченная разрядность команды создает существенные трудности при размещении в команде достаточной информации о коде операции и методах адресации данных. Возможным решением проблемы является введение в систему команд операций с удвоенной разрядностью и команд с переменной разрядностью. При применении команд с удвоенной разрядностью первое слово команды содержит информацию о кодах операций, способах адресации, признаке одиночной или двойной команды и информацию о старших разрядах адреса операнда. Второе слово двухсловной команды несет информацию о младших адресах операнда. Полный адрес определяется кодом второго слова и кодом старших разрядов адреса, записываемых в первом слове команды. Естественно, что использование двухсловных команд требует двух обращений в ОЗУ за командой и специальных средств микропроцессоров для правильной интерпретации обоих слов команды (эти средства применяются и для анализа типа команды, усложняясь по мере увеличения количества слов в команде).
Чтобы определить М слов информации в памяти, необходимо иметь па = log2M разрядов для прямого указания кода адреса. При М = 65К слов па = 16. Байтовый формат поля адреса позволяет прямо адресовать лишь 28 = 256 слов (ячеек) памяти. В одной команде желательно иметь двухадресный формат, т. е. желательно одновременно задавать адреса хотя бы одного исходного операнда и результата. Вследствие малой разрядности команды микро-ЭВМ прямой двухадресный формат можно задать лишь при обращении к внутреннему регистровому файлу небольшой информационной емкости.
Кроме поля кода операции и кода адреса (адресов) команда должна содержать поле признаков, указывающее на особенности адресации. Методы адресации определяют механизм формирования исполнительного (прямого) адреса в памяти, исходя из значений адресного поля и поля признаков адресации команды. Используется большое количество методов адресации в микропроцессорах, позволяющих расширить адресуемое пространство информации и связать между собой различные части вычислительных процессов. Гибкость системы команд в большей степени определяется разнообразием методов адресации.
Адрес следующей команды в микропроцессоре задается с помощью счетчика команд. При обычном ходе выполнения программы переход к очередной команде требует операции прибавления единицы в счетчик команд. При операциях условного или безусловного перехода в счетчик команд засылается новое значение кода адреса команды, определяющего новую ветвь вычислительного процесса. Движение по ней идет также в соответствии с операцией прибавления единицы в счетчик команд. Введение специального индексного регистра существенно расширяет возможности микропроцессора за счет индексной адресации.
Управление адресами.Команды микропроцессора записывают в виде системы цифровых кодов, поэтому над ними могут выполняться различные арифметические и логические операции, как над обычными двоичными числами.
В результате автоматического преобразования команд происходит их модификация в соответствии с заданными признаками адресации. Чтобы не загружать операционный блок операциями модификации адресов, в состав микропроцессора вводится индексный блок (блок индексной арифметики, или инкремента — декремента).
Управление операциями.Коды операции команд программы, воспринимаемые управляющей частью микропроцессора, расшифрованные и преобразованные в ней, дают информацию о том, какие операции надо выполнить, где в памяти расположены данные, куда надо направить результат и где расположена следующая за выполняемой команда.
Управляющее устройство имеет достаточно средств для того, чтобы после восприятия и интерпретации информации, получаемой в команде, обеспечить переключение (срабатывание) всех требуемых функциональных частей машины, а также для того, чтобы подвести к ним данные и воспринять полученные результаты.
Именно срабатывание, т. е. изменение состояния двоичных логических элементов на противоположное, позволяет посредством коммутации вентилей выполнять элементарные логические и арифметические действия, а также передавать требуемые операнды в функциональные части микро-ЭВМ.
Устройство управления в строгой последовательности в рамках тактовых и цикловых временных интервалов работы микропроцессора (такт — минимальный рабочий интервал, в течение которого совершается одно элементарное действие; цикл — интервал времени, в течение которого выполняется одна машинная операция) осуществляет: выборку команды; интерпретацию ее с целью анализа формата, служебных признаков и вычисления адреса операнда (операндов); установление номенклатуры и временной последовательности всех функциональных управляющих сигналов; генерацию управляющих импульсов и передачу их на управляющие шины функциональных частей микро-ЭВМ и вентили между ними; анализ результата операции и изменение своего состояния так, чтобы определить месторасположение (адрес) следующей команды.
Особенности программного и микропрограммного управления операциями.Вмикропроцессорах используют два метода выработки совокупности функциональных управляющих сигналов: программный и микропрограммный.
Выполнение операций в машине сводится к элементарным преобразованиям информации (передача информации между узлами в блоках, сдвиг информации в узлах, логические поразрядные операции, проверка условий и т.д.) в логических элементах, узлах и блоках под воздействием функциональных управляющих сигналов блоков (устройств) управления. Элементарные преобразования, не разложимые на более простые, выполняются в течение одного такта сигналов синхронизации и называются микрооперациями.
В аппаратурных (схемных) устройствах управления каждой операции соответствует свой набор логических схем, вырабатывающих определенные функциональные сигналы для выполнения микроопераций в определенные моменты времени. При этом способе построения устройства управления реализация микроопераций достигается за счет однажды соединенных между собой логических схем, поэтому ЭВМ с аппаратурным устройством управления называют ЭВМ с жесткой логикой управления. Это понятие относится к фиксации системы команд в структуре связей ЭВМ и означает практическую невозможность каких-либо изменений в системе команд ЭВМ после ее изготовления.
При микропрограммной реализации устройства управления в состав последнего вводится ЗУ, каждый разряд выходного кода которого определяет появление определенного функционального сигнала управления. Поэтому каждой микрооперации ставится в соответствие свой информационный код — микрокоманда. Набор микрокоманд и последовательность их реализации обеспечивают выполнение любой сложной операции. Набор микроопераций называют микропрограммами. Способ управления операциями путем последовательного считывания и интерпретации микрокоманд из ЗУ (наиболее часто в виде микропрограммного ЗУ используют быстродействующие программируемые логические матрицы), а также использования кодов микрокоманд для генерации функциональных управляющих сигналов называют микропрограммным, а микро-ЭВМ с таким способом управления — микропрограммными или с хранимой (гибкой) логикой управления.
К микропрограммам предъявляют требования функциональной полноты и минимальности. Первое требование необходимо для обеспечения возможности разработки микропрограмм любых машинных операций, а второе —
связано с желанием уменьшить объем используемого оборудования. Учет фактора быстродействия ведет к расширению микропрограмм, поскольку усложнение последних позволяет сократить время выполнения команд программы.
Преобразование информации выполняется в универсальном арифметическо-логическом блоке микропроцессора. Он обычно строится на основе комбинационных логических схем.
Для ускорения выполнения определенных операций вводятся дополнительно специальные операционные узлы (например, циклические сдвигатели). Кроме того, в состав МПК БИС вводятся специализированные оперативные блоки арифметических расширителей.
Операционные возможности микропроцессора можно расширить за счет увеличения числа регистров. Если в регистровом буфере закрепление функций регистров отсутствует, то их можно использовать как для хранения данных, так и для хранения адресов. Подобные регистры микропроцессора называются регистрами общего назначения. По мере развития технологии реально осуществлено изготовление в микропроцессоре 16, 32 регистров и более.
ВТОРОЙ ВОПРОС
Процесс прерывания работы микропроцессоров сигналами запроса внешних устройств устраняет необходимость выполнения микропроцессором неэффективных операций по проверке готовности внешних устройств к обмену и снижает затраты времени на ожидание их готовности. Реализация механизма прерываний имеет наибольшую важность в случае необходимости обмена данными с большим числом асинхронно работающих внешних устройств. Использование обмена по методу программируемого безусловного перехода, который может быть успешно реализован в синхронной системе, где моменты готовности к работе внешних устройств определяются достаточно точно, здесь неэффективно.
Для определения требований к построению системных блоков прерывания работы микропроцессоров рассмотрим особенности построения и функционирования внутренних схем прерывания микропроцессоров, реализуемых на кристалле БИС.
Практически все микропроцессоры имеют отдельные выводы на корпусе для ввода и вывода сигналов, определяющих запросы и удовлетворение запросов на прерывания. Сложность связанных с ними электронных схем определяет возможности системы прерываний.
Момент возникновения запроса прерывания микропроцессора не связан с его работой по основной программе или какой-либо подпрограмме. Сигналы запроса прерывания текущей программы асинхронны относительно циклов работы микропроцессора. Поэтому, получив сигнал запроса на прерывание работы, микропроцессор должен закончить выполнение текущей микрооперации или операции и только после этого приступить к удовлетворению запроса. Такой порядок дает возможность получить промежуточные результаты, являющиеся итогом работы микропроцессора по программе (подпрограмме), зафиксировать их в его регистрах и заслать на хранение в память. Процесс сбора и пересылки содержимого внутренних регистров микропроцессора в память часто называется контекстным переключением, так как содержимое регистров имеет определенный смысл только в контексте данной выполняемой программы. Процесс считывания из памяти и распределения данных по определенным регистрам микропроцессора позволяет восстановить контекст, т. е. состояние прерванной программы, после окончания удовлетворения запроса прерывания. Именно такой порядок осуществления процесса прерывания дает возможность перехода от программы к подпрограмме и обратно к последовательности вложенных подпрограмм без потери промежуточной информации и правильного счета по запрограммированным алгоритмам. Однако, контекстное переключение должно гарантировать правильность продолжения работы микропроцессора после прерывания программы (подпрограммы), т. е. не должно вносить никаких последствий в процесс работы микропроцессора, кроме временных перерывов.
Чтобы охарактеризовать важное качество микропроцессора и электронных систем на его основе по возможности прерывания прерывающих программ, вводят понятие «уровень программного прерывания микропроцессора». Если нельзя прервать прерывающую программу, то считается, что электронная система спроектирована с нулевым уровнем прерывания. Чтобы избежать подобных ограничений, большинство МП имеет средства для обеспечения практически произвольного количества уровней прерывания. Это означает, что имеется возможность многократного прерывания прерываний и образования прерываний внутри прерываний, т. е. вложенных прерываний, ведущих к появлению последовательностей вложенных подпрограмм.
Стек — эффективное программно-аппаратурное средство для сохранения и возврата данных при контекстном переключении и осуществления вложенных прерываний. Стек (магазинная память) представляет собой совокупность ячеек памяти, организованных так, что обращение к некоторой последовательности (списку) слов может происходить в процессе, обратном записи. Это означает, что стек позволяет осуществить принцип работы «последнее из списка последовательно записанных слов считывается первым». В стеке реализуется подразумеваемая адресация, т. е. всегда запись или чтение данных происходит в «верхней» ячейке. Образно стек можно представить в виде бесконечной этажерки, где ячейки соответствуют полкам. «Положить» слово можно только выше последнего положенного (записанного) слова; «взять» можно только то слово, которое «положено» самым последним. Чтобы осуществить именно этот порядок обращения, имеется регистр «Указатель полки», который перемещается по мере добавления новых слов на полках вверх или опускается вниз по мере их взятия. Этот регистр — указатель состояния заполненности стека — физически указывает на регистр СОЗУ на кристалле микропроцессора или на ячейку памяти ОЗУ.
Практически неограниченный по информационной емкости стек получается именно во втором случае, поскольку редко возникает необходимость иметь в системе тысячу (и более) уровней прерывания, а такая глубина прерываний вполне реализуется при использовании ОЗУ с доступной величиной информационной емкости.
При удовлетворении запроса на прерывание текущей программы блок управления (БУ) микропроцессора осуществляет запись контекстного состояния рабочих регистров микропроцессора, в стек автоматически начиная с «верхней» ячейки и добавляет единицу в регистр-указатель ячейки стека после каждой записи. Поэтому достаточно одной команды «Записать состояние в стек», чтобы аппаратурные средства МП считали всю контекстную информацию рабочих регистров и направили ее для хранения в стек. Восстановление контекста также происходит автоматически по команде «Восстановить состояние прерванной программы (подпрограммы)», которая ставится последней в подпрограмме прерывания. В процессе восстановления в счетчик команд заносится адрес возврата из прерываний, указывающих на команду, которая должна выполняться первой.
На рис. 1 приведена диаграмма заполнения и освобождения стека при появлении цепочки вложен