Введение
Принципиальным достоинством микропроцессора (МП) является его программируемость. Это означает, что, подавая на вход МП команды, можно обеспечить нужную последовательность операций, т.е. реализацию определенного алгоритма. Алгоритм решаемой задачи может быть сколь угодно сложным, необходимо лишь, чтобы он был разбит на шаги в соответствии с системой команд МП. Наличие или отсутствие какой-либо команды или группы команд может существенно повлиять на выбор МП для конкретного применения.
В данной лекции нами будут рассмотрены система команд МП, адресация регистров и ячеек памяти в ПК и система прерываний программ.
1-й учебный вопрос: «Система команд МП»
Алгоритм решения задачи, заданный в виде последовательности команд на языке вычислительной машины (в кодах машины), называется машинной программой.
Команда машинной программы (иначе машинная команда) — это элементарная инструкция машине, выполняемая ею автоматически без каких либо дополнительных указаний и пояснений.
Машинная команда состоит из двух частей: операционной и адресной.
Операционная часть команды (КОП — код операции) — это группа разрядов в команде, предназначенная для представления кода операции машины.
Адресная часть команды (адреса) — это группа разрядов в команде, в которых записываются коды адреса (адресов) ячеек памяти машины, предназначенных для оперативного хранения информации, или иных объектов, задействованных при выполнении команды. Часто эти адреса называются адресами операндов, то есть чисел, участвующих в операции.
По количеству адресов (al, а2, а3, ...), записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные.
Типовая структура трехадресной команды:
а2 и аЗ — адреса ячеек (регистров), где расположены, соответственно, первое и второе числа, участвующие в операции, al — адрес ячейки (регистра), куда следует поместить число, полученное в результате выполнения операции.
Типовая структура двухадресной команды:
al — это обычно адрес ячейки (регистра), где хранится первое из чисел, участвующих в операции, и куда после завершения операции должен быть записан результат операции; а2 — обычно адрес ячейки (регистра), где хранится второе участвующее в операции число.
Типовая структура одноадресной команды:
где al в зависимости от модификации команды может обозначать либо адрес ячейки (регистра), в которой хранится одно из чисел, участвующих в операции, либо адрес ячейки (регистра), куда следует поместить число — результат операции.
Безадресная команда содержит только код операции, а информация для нее должна быть заранее помещена в определенные регистры машины.
Наиболее широкое применение в ПК нашли двухадресные команды.
Пример двухадресной команды, записанной на языке символического кодирования:
Эту команду следует расшифровать так: сложить число, записанное в ячейке 0103 памяти, с числом, записанным в ячейке 5102, а затем результат (то есть сумму) поместить в ячейку 0103.
По числу ячеек памяти, необходимых для размещения одной команды, различают команды длиной в одно, два или три слова. Команды длиной в два и три слова требуют для выборки соответственно два и три цикла обращения к памяти. В принципе возможны команды и большей длины, но они практически не используются.
Во многих случаях, в частности при сравнении МП со сходной архитектурой, оказывается полезной классификация команд в соответствии с архитектурными характеристиками МП.
По этому признаку можно выделить следующие команды:
ü изменения содержимого ячеек памяти;
ü изменения содержимого аккумулятора;
ü изменения содержимого индексного регистра;
ü выполнения операций со стеком; выполнения операций в АЛУ;
ü передачи управления;
ü изменения содержимого регистра состояния (или регистра признаков);
ü ввода — вывода.
С функциональной точки зрения команды разделяются на три большие группы: передачи данных, управления и обработки данных.
Рассмотрим подробнее основные команды, применяемые в МП, пользуясь классификацией по функциональным признакам. Названия команд будем обозначать русскими словами, указывающими на смысл выполняемых операций.
1. Команды передачи данных. Команды этой группы обеспечивают простую пересылку информации без выполнения каких-либо операций обработки. Они подразделяются на команды, связанные с обращением к памяти, команды, связанные с обращением к регистрам, и команды ввода — вывода. Обычно программы решения задач, исходные данные и результаты операций хранятся в оперативной запоминающем устройстве (ОЗУ). Каждому элементу информации в ОЗУ отводится определенное место, которое имеет адрес.
В большинстве ЭВМ минимальной единицей адресуемой информации является байт, в связи с чем объем ОЗУ исчисляется в байтах. Достаточно часто для операндов одного байта мало, поэтому размер ячейки памяти выбирают большим, например четыре байта. Для эффективного использования всего адресуемого пространства ОЗУ МП автоматически выбирает из памяти информацию различного размера: слова (4 байта), двойные слова (8 байт), полуслова (2 байта), 1 байт, а в некоторых случаях даже отдельные биты. Используемый в командах размер информации может задаваться специальным словом в команде или в неявном виде кодом операции. При этом часть младших разрядов адреса определяет номер байта.
К командам, связанным с обращением к памяти, относятся:
ЗАГРУЗИТЬ (ПРОЧИТАТЬ), по которой содержимое одной из ячеек памяти засылается в регистр;
ЗАПОМНИТЬ (ЗАПИСАТЬ), по которой содержимое регистра засылается в ячейку памяти.
В этих командах, связанных с пересылкой байта или слова, должны указываться номер конкретного регистра, адрес ячейки памяти и, если необходимо, номер модуля ЗУ.
Команды, связанные с обращением к регистрам, должны указывать номер источника информации и номер регистра результата. В эту подгруппу команд передачи данных входят команды:
ПЕРЕСЛАТЬ, по которой содержимое одного регистра пересылается в другой;
ЗАГРУЗИТЬ НЕПОСРЕДСТВЕННО, по которой в регистр записывается константа, указанная в коде команды. Эта команда часто используется для сброса регистра в 0 или установки его в 1.
К командам ввода —вывода относятся:
ВВОД, по которой содержимое устройства ввода засылается во внутренний регистр МП;
ВЫВОД, по которой содержимое внутреннего регистра МП (обычно аккумулятора) пересылается в устройство вывода.
Эти команды должны следовать за командами, подготавливающими операции ввода —вывода, например за командой переключения устройства ввода —вывода (УВВ) в режим приема информации.
2. Команды управления. Эти команды, часто называемые командами перехода, позволяют выполнять различные действия в соответствии со значением внешних сигналов или выработанных внутри системы условий. При этом нарушается естественный порядок следования команд, при котором после выполнения очередной команды выбирается команда, расположенная в следующей по порядку ячейке памяти. Все команды управления подразделяются на команды безусловного и условного перехода.
К командам безусловного перехода относятся:
БЕЗУСЛОВНЫЙ ПЕРЕХОД (БП), по которой в счетчик команд записывается содержимое адресного поля команды БП, т. е. обеспечивается переход в программе по адресу, указанному в команде;
ПРОПУСТИТЬ, по которой пропускается следующая команда программы;
БЕЗУСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ (переход к подпрограмме), по которой в программный счетчик записывается новое содержимое (адрес первой команды подпрограммы), но в отличие от команды БП в памяти сохраняется состояние счетчика команд и некоторых других регистров. После выполнения подпрограммы по ее последней команде ВОЗВРАТ восстанавливается содержимое счетчика команд и всех регистров.
Команды условного перехода требуют проверки состояния какого-либо разряда регистра, флагового триггера или другого параметра. От результата проверки зависит, будет выполняться переход или нет. Обычно переход выполняется, если результат проверки соответствует указанному в команде условию. В эту подгруппу команд управления входят следующие команды:
УСЛОВНЫЙ ПЕРЕХОД (УП) по адресу. В коде команды УП обязательно указывается проверяемое условие, в качестве которого в МП используются нулевое или ненулевое значение результата, положительный или отрицательный знак результата, наличие или отсутствие сигналов переноса, переполнения и др. При выполнении условия в программный счетчик записывается содержимое адресного поля команды УП, т.е. обеспечивается переход в программе по адресу, указанному в команде. При невыполнении условия управление передается следующей команде программы;
УСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ, которая отличается от команды БЕЗУСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ тем, что переход к подпрограмме происходит только при выполнении указанного условия; -
УСЛОВНО ПРОПУСТИТЬ, по которой проверяется определенное условие и, если оно выполнено, пропускается следующая команда программы;
ПРОПУСТИТЬ ПО ФЛАГУ, используемая в основном для организации взаимодействия МП и УВВ. По этой команде проверяется состояние флагового триггера;
СРАВНИТЬ И ПРОПУСТИТЬ, по которой сравнивается содержимое двух регистров, в случае равенства пропускается следующая команда;
ЦИКЛ, по которой содержимое определенного регистра или ячейки памяти уменьшается (или увеличивается) на единицу и, если оно станет равным нулю, пропускается следующая команда.
Команды перехода не выполняют операции с операндами и предназначены лишь для изменения порядка следования команд. Поэтому вместо сведений о местоположении операндов и результата в них содержатся сведения о местоположении очередной команды.
Обычно в систему команд МП включается еще несколько вспомогательных команд, которые позволяют управлять состоянием регистров или триггеров, влияющих на выполнение условных переходов. К этим командам относятся: УСТАНОВИТЬ ФЛАГ; СБРОСИТЬ ФЛАГ; УСТАНОВИТЬ СТАРШИЙ РАЗРЯД АККУМУЛЯТОРА; СБРОСИТЬ СТАРШИЙ РАЗРЯД АККУМУЛЯТОРА и др.
3. Команды обработки данных. Данные команды подразделяются на арифметические и логические.
К арифметическим командам относятся:
СЛОЖИТЬ содержимое двух регистров или регистра и ячейки памяти;
ВЫЧЕСТЬ из содержимого ячейки памяти или регистра содержимое регистра;
УВЕЛИЧИТЬ НА 1 (или ИНКРЕМЕНТ) содержимое ячейки памяти или регистра, в частности, указателя стека, индексного регистра, аккумулятора;
УМЕНЬШИТЬ НА 1 (или ДЕКРЕМЕНТ) содержимое ячейки памяти или регистра;
СЛОЖИТЬ С УЧЕТОМ ПЕРЕНОСА, по которой выполняется сложение с учетом состояния триггера переноса, что позволяет легко организовывать обработку чисел большой длины;
ВЫЧЕСТЬ С УЧЕТОМ ЗАЕМА;
СДВИГ содержимого ячейки памяти или регистра (обычно на один разряд).
В подгруппу логических команд входят команды:
И (или ЛОГИЧЕСКИ УМНОЖИТЬ), по которой выполняется операция конъюнкции между содержимым двух регистров или ячейки памяти и регистра;
ИЛИ (или ЛОГИЧЕСКИ СЛОЖИТЬ), по которой выполняется операция дизъюнкции между содержимым двух регистров или ячейки памяти и регистра;
НЕРАВНОЗНАЧНОСТЬ, по которой производится поразрядное сравнение содержимого двух регистров или ячейки памяти и регистра;
ИНВЕРСИЯ содержимого ячейки памяти или регистра.
Команда МП состоит в общем случае из набора сведений о коде операции, адресов операндов и регистров, участвующих в операции, способов адресации. Для размещения этих сведений выделяется несколько полей, т.е. регистров, состоящих из определенного числа разрядов. Структура таких регистров и правила размещения в них команды называется форматом команды. Команды различных типов могут иметь разный формат. Каждый формат определяется кодом операции (КОП), который размещается в первом по порядку поле.
В группу команд изменения состояния регистра входят команды: УВЕЛИЧИТЬ НА 1; УМЕНЬШИТЬ НА 1; ИНВЕРСИЯ; СБРОСИТЬ В 0; УСТАНОВИТЬ В 1; СДВИГ и некоторые другие. Формат команд этой группы кроме поля КОП предусматривает поле, в котором указывается номер регистра (рис. а).
В командах выполнения операций над содержимым регистров должны указываться (явно или неявно) номера трех регистров: двух регистров, содержащих операнды, и регистра результата. В МП наиболее распространен формат команд, включающий в себя номера только двух регистров, которые можно обозначить Рг1 и Рг2. Один из этих регистров используется для хранения одного из операндов и результата операции. В указанную группу входят следующие команды: ПЕРЕСЛАТЬ содержимое Рг1 и Рг2; СЛОЖИТЬ содержимое регистров Рг1 и Рг2; ВЫЧЕСТЬ содержимое Рг1 из Рг2; СРАВНИТЬ содержимое Рг1 и Рг2 и некоторые другие. Формат команд этой группы должен предусматривать три поля: КОП и номера двух регистров (рис. б).
В группу команд, связанных с обращением к памяти, входят команды ЗАГРУЗИТЬ, ЗАПОМНИТЬ и некоторые другие. Для этих команд необходимы поля: КОП, вид адресации, номер регистра, адрес ячейки памяти (рис. в).
Команды с непосредственной адресацией содержат константу, которая может размещаться в регистре или использоваться в качестве операнда. Для команд этой группы предусмотрены три поля: КОП, номер регистра, константа (рис. г).
Число разрядов в регистрах, выделяемых под каждое поле, зависит от конкретного МП, т.е. от его числа регистров общего назначения и их разрядности. Аппаратные ограничения по числу разрядов можно преодолеть формированием двойных и даже тройных слов, что расширяет размеры полей.
2 учебный вопрос: «Адресация операндов и ячеек памяти в ПК»
Опера́нд (англ. operand) в языках программирования ― аргумент операции; данные, которые обрабатываются командой.
Адресация операндов в командах программы может быть:
ü непосредственной;
ü прямой;
ü косвенной;
ü ассоциативной;
ü неявной.
Непосредственная адресация заключается в указании в команде самого значения операнда, а не его адреса.
Прямая адресация состоит в указании в команде непосредственно абсолютного или исполнительного адреса операнда.
Косвенная адресация подразумевает указание в команде регистра(ов) или ячейки памяти, в которых находятся абсолютный, исполнительный адрес операнда или их составляющие.
Ассоциативная адресация — указание в команде не адреса, а идентифицирующего содержательного признака операнда, подлежащего выборке (применяется в ассоциативных запоминающих устройствах).
Неявная адресация — адрес операнда в команде не указан, но он подразумевается кодом операции.
Адресация ячеек основной памяти ПК имеет две разновидности:
ü относительную;
ü стековую.
Относительная адресация
Стековая адресация
3 учебный вопрос: «Система прерываний программ»
Важнейшая роль в реализации сложных режимов работы отводится системе прерывания программ.
Прерывание — это приостановка выполнения в процессоре программы с целью выполнения какой-то более важной или нужной в данный момент другой программы или процедуры, после завершения которой продолжается выполнение прерванной программы с момента ее прерывания.
Прерывание позволяет компьютеру приостановить любое свое действие и временно переключиться на другое, как заранее запланированное, так и неожиданное, вызванное непредсказуемой ситуацией в работе машины или ее компонента. Каждое прерывание влечет за собой загрузку определенной программы, предназначенной для обработки возникшей ситуации — программы обработки прерывания.
Организация и управление прерываниями функционально во многом смыкается с управлением задачами — одной из базовых функций операционных систем. Основой для управления процессом одновременного решения нескольких задач (равно как и управления прерываниями) являются процедуры:
ü выбора очередной задачи или определения приоритета задачи;
ü сохранения информации о статусе задачи при ее прерывании (формирование слова состояния программы);
ü упреждения и устранения конфликтов между задачами (координации и синхронизации выполнения задач).
Последовательность действий процессора при реализации прерывания такова. При появлении запроса на прерывание, запланированное заранее или неожиданное, процессор, как правило, после завершения выполнения текущей команды программы анализирует допустимость (разрешенность и приоритетность) данного вида прерывания. Если оно разрешено, процессор производит следующие действия:
ü запоминает в стековой памяти текущее состояние прерываемой программы (состояние некоторых регистров МПП, в частности, регистров FL, CS, IP, а в микропроцессорах МП80286 и выше — и слова состояния программы, хранящегося в другом регистре МПП);
ü посылает источнику запроса на прерывание запрос о причине (коде) прерывания;
ü анализирует код запрошенного прерывания (номер прерывания — Ni и формирует адрес ячейки (АV), хранящей вектор прерывания (вектор-адрес программы обработки прерывания) по формуле АV = 4*Ni) (векторы прерываний занимают начальную 1024-байтовую область ОП с адресами ячеек от 00000 до 00400h (шестнадцатеричный код) так, что адрес вектора вычисляется простым умножением номера прерывания на четыре, так как CS и IP (универсальные регистры и регистры смещения) занимают по два байта каждый);
ü считывает из ОП и записывает в регистры МПП (в регистры FL, CS, IP и т. д.) вектор прерывания и его атрибуты;
ü сбрасывает (устанавливает в 0) флаги прерывания (IF) и трассировки (TF);
ü выполняет программу обработки прерывания (которую иногда называют драйвером прерывания);
ü после выполнения программы обработки прерывания возвращает из стековой памяти параметры прерванной программы в регистры МПП и восстанавливает процесс выполнения прерванной программы.
Видов (номеров) прерывания может быть всего 256, и, соответственно, векторов прерывания (адресов CS:IP программ обработки прерываний) в ОП насчитывается до 256. Классификация видов прерываний показана на рис.
Прикладные прерывания временно устанавливаются пользователем при многопрограммной работе МП для указания приоритета выполнения прикладных программ (при появлении необходимости выполнения более приоритетной программы текущая менее приоритетная программа прерывается).
Рис. Классификация видов прерываний в МП
Псевдопрерывания служат для запоминания важных фиксированных адресов, которые могут быть использованы в программах, в частности, при условных и безусловных передачах управления (запоминание адресов передачи управления как векторов прерывания возможно благодаря аналогии выполнения прерывания и обращения к процедурам).
Аппаратные прерывания инициируются при обращениях к МП со стороны внешних устройств (таймера, клавиатуры, дисководов, принтера и т. д.) с требованием уделить им внимание и выполнить совместно с ними те или иные процедуры. Прерывания от таймера, например, повторяются 18 раз в секунду, от клавиатуры — при каждом программно не запланированном нажатии некоторых клавиш и т. п. Аппаратные прерывания не координируются с работой программы и могут быть весьма разнообразны. Для их систематизации и определения очередности выполнения при одновременном возникновении нескольких из них обычно используется контроллер прерываний.
Программные прерывания — это обычные процедуры, которые вызывает текущая программа для выполнения предусмотренных в ней стандартных подпрограмм, чаще всего подпрограмм — служебных функций работы с внешними устройствами, то есть, фактически, программные прерывания ничего не прерывают. Они делятся на две большие группы, вызывающие служебные функции:
ü базовой системы ввода-вывода — прерывания BIOS;
ü операционной системы — прерывания DOS.
Программы обработки прерываний DOS, в отличие от программ обработки прерываний BIOS, не встроены в ПЗУ и для разных операционных систем могут быть разными. К программным прерываниям можно отнести также прерывания при пошаговом исполнении программы, при работе с контрольным остановом и т. д.
Технические прерывания (или, иначе, прерывания от схем контроля) возникают при появлении отказов и сбоев в работе технических средств (аппаратуре) ПК. Большинство технических прерываний не маскируются, то есть они разрешаются всегда, а некоторые из них относятся к категории «аварийных» (например, отключение питания), и при их возникновении даже не запрашивается причина прерывания, а просто по возможности спасаются важные промежуточные результаты — записываются в безопасное место, в НЖМД, например.
Логические прерывания возникают при появлении ошибок в выполняемых программах (деление на 0, потеря точности мантиссы, нарушение защиты памяти и т. п.). Многие из логических прерываний также относятся к категории немаскируемых.
Прерывания обслуживаются базовой системой ввода-вывода — модулем расширения BIOS и модулем обработки прерываний DOS. BIOS и блок расширения BIOS имеют дело в основном с непланнруемыми техническими и логическими прерываниями, пользовательскими прикладными прерываниями, а также со многими планируемыми прерываниями, обслуживающими систему ввода-вывода, детализированными и не очень детализированными (прерывания, обслуживаемые BIOS, часто называют прерываниями нижнего уровня).
Модуль обработки прерываний DOS обслуживает в большинстве планируемые прерывания, в том числе и прерывания системы ввода-вывода. Прерывания DOS часто называют прерываниями верхнего уровня, так как, с одной стороны, в этих прерываниях меньше учитываются технические особенности элементов ПК, с другой стороны, при обработке этих прерываний часто случаются обращения к программам прерываний системы BIOS. Большинство прерываний BIOS имеют близкие аналоги среди прерываний DOS.
Следует сказать, что использование прерываний BIOS позволяет, как правило, более детально выполнять обращения к различным системным ресурсам ПК, к элементам информационных структур и их атрибутам. Однако прерывания DOS более просты в использовании при программировании. Поэтому начинающим программистам можно рекомендовать работать с прерываниями DOS, особенно с расширенными функциями DOS для работы с файлами. Схема организации приема запросов на прерывания показана на рис.
Для приема внешних прерываний имеются порты двух типов: NMI (None Masked Interrupt) для приема немаскируемых прерываний и INTR (Interrupt) — для приема прочих прерываний (INTR обычно используется для подсоединения контроллера прерываний). Если запрос на прерывание поступает по входу NMI, то прерывание не маскируется (имеет абсолютный приоритет) и сразу выполняется; по входу INTR прерывание разрешается, если в регистре флагов МПП флаг IF = 1.
Рис. Организация приема запросов на прерывания
Всего предусмотрено 256 типов (0-255) прерываний. Из них только первые пять жестко закреплены в МП, остальные используются системами BIOS и DOS:
ü Тип 0 — прерывание возникает при делении на 0 или если частное от деления переполняет разрядную сетку МП.
ü Тип 1 — в режиме «трассировка» (при TF = 1) после выполнения каждой команды программы происходит останов.
ü Тип 2 — немаскируемое техническое прерывание.
ü Тип 3 — прерывание по команде INT, включенной в программу: останов и отображение содержимого регистров МПП.
ü Тип 4 — прерывание по команде INTO, включенной в программу, но только если при выполнении предыдущей команды произошло переполнение разрядной сетки.
ü Типы 8-15 — аппаратные прерывания, инициируемые внешними устройствами, поступают на входы IRQ0-IRQ7 контроллера прерываний (вход IRQ0 имеет высший приоритет, и прерывание, поступившее по этому входу, обрабатывается первым; всего уровней приоритета 8 и вход IRQ7 имеет низший приоритет).
ü Типы 16-31 — планируемые программные прерывания BIOS.
ü Типы 32-255 — программные прерывания DOS (жестко задействовано около 10, а вообще в разных версиях DOS их разное количество).
Прерывания с 0 по 31 и прерывание 64 относятся к прерываниям нижнего уровня, обслуживаемым BIOS; прерывания, начиная с 32, являются прерываниями верхнего уровня (за исключением прерывания 64), причем прерывание 33 (21h) — это комплексное, чаще всего используемое в программах пользователя прерывание, имеющее около 100 разновидностей (служебных функций DOS).
В некоторых типах прерываний BIOS и DOS имеется много разновидностей, иногда более 10. Так, прерывание 10 (Ah) включает в себя 15 разновидностей, прерывание 33 (21h) — около 100 разновидностей: в DOS 1.0 — 47, в DOS 2.0 — 88, в DOS 3.0 и выше — 99 разновидностей (вид действия в рамках каждого прерывания определяется содержимым регистра АН).
Заключение
В данной лекции нами были рассмотрены система команд МП, адресация регистров и ячеек памяти в ПК и система прерываний программ. Алгоритм решаемой задачи может быть сколь угодно сложным, необходимо лишь, чтобы он был разбит на шаги в соответствии с системой команд МП. Также важнейшая роль в реализации сложных режимов работы отводится системе прерывания программ.
Разработалзав.кафедрой АСУ Я.Н. Немов
(должность, в/звание, подпись, фамилия)
“____” ______________ 2013 г.