Введение

 

Принципиальным достоинством микропроцессора (МП) является его программируемость. Это означает, что, подавая на вход МП команды, можно обеспечить нужную последовательность операций, т.е. реализацию определенного алгоритма. Алгоритм решаемой задачи может быть сколь угодно сложным, необходимо лишь, чтобы он был разбит на шаги в соответствии с системой команд МП. Наличие или отсутствие какой-либо команды или группы команд может существенно повлиять на выбор МП для конкретного применения.

В данной лекции нами будут рассмотрены система команд МП, адресация регистров и ячеек памяти в ПК и система прерываний программ.

 

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 г.