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

Arkhitektura_EVM_uchebnoe_posobie

.pdf
Скачиваний:
54
Добавлен:
13.04.2015
Размер:
2 Mб
Скачать

Глава 3

МИКРОПРОЦЕССОР

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

В настоящее время существует большое число разновидностей микропроцессоров, различающихся назначением, функциональными возможностями, структурой, исполнением. Наиболее существенным, классификационным различием между ними является количество разрядов в обрабатываемой информационной единице: 8-битовые, 16-битовые, 32-битовые, 64-битовые и др.

Наибольшее распространение среди 16-битовых микропроцессоров получил i8086, 32-битовых – i80386, i80486, Pentium, которые совместимы по кодам и форматам данных снизу вверх. МП i8086 имеет базовую систему команд. В следующих модификациях МП фирмы Intel система команд расширялась. Расширение системы команд продолжается во всех новых моделях, но кроме этого в каждой новой модели вводятся дополнительные архитектурные решения.

3.1. Структура микропроцессора i8086

Укрупненная структурная схема МП i8086 (рис. 3.1) содержит две относительно независимые части: операционное устройство, реализующее заданные командой операции, и устройство шинного интерфейса, осуществляющее выборку команд из памяти, а также обращение к памяти и внешним устройствам для считывания операндов и записи результатов. Оба устройства могут работать параллельно, что обеспечивает совмещение во времени процессов выборки и исполнения команд.

Операционное устройство МП содержит группу общих регистров, ариф- метико-логическое устройство (АЛУ), регистр флагов F и блок управления.

Восемь 16-битовых регистров общего назначения участвуют во многих командах. В этих случаях регистры общего назначения кодируются трехбитовым кодом, который размещается в соответствующем поле (или полях) формата команды.

В соответствии с основным назначением рассматриваемых регистров выделяют регистры АХ, ВХ, СХ, DX, используемые, прежде всего, для хранения данных, и регистры SP, BP, SI, DI, которые хранят главным образом адресную информацию. Особенностью регистров АХ, ВХ, СХ, DX является то, что они допускают раздельное использование их младших байтов AL, BL, CL, DL и старших байтов АН, ВН, СН, DH. Все остальные регистры являются неделимыми и оперируют 16-битовыми словами, даже в случае использования только старшего или младшего байтов. Указательные регистры SP и ВР хранят смещение адреса в пределах текущего стекового сегмента памяти, а индексные регистры SI и DI хранят смещение адреса соответственно в текущем сегменте данных и в текущем дополнительном сегменте.

60

Сегментные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CS

 

 

 

 

Сумматор

 

 

 

 

Шина адреса

регистры

 

 

 

 

 

 

 

 

адресов

 

 

 

 

 

SS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шина данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ES

 

 

 

 

IP

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

общего

AX

AH

 

AL

 

 

 

АЛУ

 

 

 

 

 

 

назначения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BX

BH

 

BL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CX

CH

 

CL

 

 

 

 

 

 

 

 

 

Дешифратор

 

DX

DH

 

DL

 

 

 

 

 

 

 

 

 

команд

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Индексные

 

 

SP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BP

 

 

 

 

 

 

 

 

 

 

 

 

 

регистры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SI

 

 

 

 

Устройство

 

 

 

Шина

 

 

 

DI

 

 

 

 

управления

 

 

 

управления

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.1. Структурная схема МП i8086

Арифметико-логическое устройство (АЛУ) содержит 16-битовый ком-

бинационный сумматор, с помощью которого выполняются арифметические операции, наборы комбинационных схем для выполнения логических операций, схемы для операций сдвигов и десятичной коррекции, а также регистры для временного хранения операндов и результатов.

К АЛУ примыкает регистр флагов F (рис. 3.2), где X обозначает неопределенное состояние бита. Шесть арифметических флагов фиксируют определенные признаки результата выполнения операции (арифметической, логической, сдвига или загрузки регистра флагов). Значения этих флагов (кроме флага AF) используются для реализации условных переходов, изменяющих ход выполнения программы. Различные команды влияют на флаги по-разному.

F

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

X

X

X

OF

DF

IF

TF

SF

ZF

X

AF

X

PF

X

CF

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.2. Формат регистра флагов

Назначение арифметических флагов

CF – флаг переноса, фиксирует значение переноса (заема), возникающего при сложении (вычитании) байтов или слов, а также значение выдвигаемого бита при сдвиге операнда.

PF – флаг четности (или паритета), фиксирует наличие четного числа еди-

61

ниц в младшем байте результата операции, может быть использован, например, для контроля правильности передачи данных.

AF – флаг вспомогательного переноса, фиксирует перенос (заем) из младшей тетрады, т. е. из бита а3, в старшую при сложении (вычитании), используется только для двоично-десятичной арифметики, которая оперирует исключительно младшими байтами.

ZF – флаг нуля, сигнализирует о получении нулевого результата операции. SF – флаг знака, дублирует значение старшего бита результата, который

при использовании дополнительного кода соответствует знаку числа.

OF – флаг переполнения, сигнализирует о потере старшего бита результата сложения или вычитания в связи с переполнением разрядной сетки при работе со знаковыми числами. При сложении этот флаг устанавливается в единицу, если происходит перенос в старший бит и нет переноса из старшего бита или имеется перенос из старшего бита, но отсутствует перенос в него; в противном случае флаг OF устанавливается в нуль. При вычитании он устанавливается в единицу, когда возникает заем из старшего бита, но заем в старший бит отсутствует либо имеется заем в старший бит, но отсутствует заем из него. Имеется специальная команда прерывания при переполнении, которая в указанных случаях генерирует программное прерывание.

DF – флаг направления, управляемый командами CLD и STD; определяет порядок обработки цепочек в соответствующих командах: от меньших адресов

(DF = 0) или от больших (DF=1).

IF – флаг разрешения прерываний, управляемый с помощью команд CLI и STI; при IF=1 микропроцессор воспринимает (распознает) и соответственно реагирует на запрос прерывания; при IF = 0 прерывания по этому входу запрещаются и МП игнорирует поступающие запросы прерываний.

TF – флаг трассировки (прослеживания). При TF=1 МП переходит в покомандный (пошаговый) режим работы, применяемый при отладке программ, когда автоматически генерируется сигнал внутреннего прерывания типа 1 после выполнения каждой команды с целью перехода к соответствующей подпрограмме, которая обычно обеспечивает индикацию содержимого внутренних регистров МП. Команды установки или сброса флага TF отсутствуют, так что управление этим флагом осуществляется опосредованно, путем пересылки содержимого регистра флагов F через стек в общий регистр, установки требуемого значения восьмого бита и обратной пересылки сформированного слова в регистр F.

Устройство управления (УУ) дешифрует команды, а также воспринимает и вырабатывает необходимые управляющие сигналы. В его состав входит блок микропрограммного управления, в котором реализовано программирование МП на микрокомандном уровне.

Сегментные регистры хранят базовые адреса сегментов памяти:

кодового сегмента CS, в котором содержится программа; стекового сегмента SS;

сегмента данных DS;

дополнительного сегмента ES, в котором обычно содержатся данные.

62

Наличие сегментных регистров обусловлено разделением памяти на сегменты и используемым способом формирования адресов памяти. Хотя МП имеет 20-битовую шину физического адреса памяти, он оперирует 16-битовыми логическими адресами, состоящими из базового адреса сегмента и внутрисегментного смещения. Внутрисегментное смещение может быть вычислено в соответствии с указанным в команде способом адресации, может находиться в формате команды или содержаться в общем регистре. Физический адрес формируется путем суммирования смещения и содержимого соответствующего сегментного регистра, которое дополняется четырьмя нулевыми младшими разрядами.

Сумматор адресов осуществляет вычисление 20-битовых физических адресов.

Указатель команд IP хранит смещение следующей команды в текущем кодовом сегменте, т. е. указывает на следующую по порядку команду. Его содержимое определяет адрес команды в совокупности с содержимым регистра CS.

3.2. Адресация

Память логически организована как одномерный массив байтов, каждый из которых имеет 20-битовый физический адрес в диапазоне 00000 – FFFFF. (Для записи адресов здесь и далее используется 16-ричная система счисления.) Любые два смежных байта в памяти могут рассматриваться как 16-битовое слово. Младший байт слова имеет меньший адрес, а старший – больший. Адресом слова считается адрес его младшего байта. Таким образом, 20-битовый адрес памяти может рассматриваться и как адрес байта, и как адрес слова.

Полная информация, необходимая для определения физического адреса, содержится в адресном объекте «сегмент:смещение», который называется указателем адреса и содержит адрес сегмента и внутрисегментное смещение. Каждое слово хранится обычным образом, т. е. по принципу «младший байт – по меньшему адресу».

Команды, байты и слова данных можно свободно размещать по любому адресу, что позволяет экономить память благодаря ее плотной упаковке. Однако для экономии времени выполнения программы целесообразно размещать слова данных в памяти по четным адресам, так как МП передает такие слова за один цикл обращения к памяти. Слово с четным адресом называется выровненным на границе слов. Слова с нечетными адресами (невыровненные) также допустимы, но для их передачи требуются два цикла шины, что снижает производительность МП. Отметим, что шинный интерфейс инициирует необходимое для выборки слова число обращений к памяти автоматически, так что двукратное обращение к памяти не требует специального указания в программе. Особенно важно иметь выровненные слова для операций со стеком, так как в них участвуют только слова. Следовательно, указатель стека SP необходимо всегда инициализировать на четный адрес.

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

63

Пространство памяти емкостью 1 Мбайт представляется как набор сегментов, определяемых программным путем. Сегмент состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти емкостью 64 Кбайт. Каждому сегменту программой назначается начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS и ES, тем самым фиксируются текущие сегменты кода (программы), данных, стека и дополнительных данных. Для обращения к командам и данным, находящимся в других сегментах, необходимо изменять содержимое сегментных регистров, что позволяет использовать все пространство памяти емкостью 1 Мбайт. Сегментные регистры инициализируются в начале программы путем засылки в них соответствующих констант.

В сегментном регистре хранится 16 старших битов 20-битового начального адреса сегмента. Четыре младших бита адреса принимаются равными нулю и дописываются справа к содержимому сегментного регистра при вычислении физических адресов ячеек памяти. Поэтому начальные адреса сегментов всегда кратны 16. Поскольку других ограничений на размещение сегментов в памяти нет, сегменты могут быть соседними (смежными), неперекрывающимися, частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам.

Физический адрес ячейки памяти представляет 20-битовое число в диапазоне 00000 – FFFFF, которое однозначно определяет положение каждого байта в пространстве памяти емкостью 1 Мбайт. Так как МП i8086 является 16битовым, то все операции при вычислении физического адреса производятся с 16-битовыми адресными объектами.

Логический адрес ячейки памяти состоит из двух 16-битовых беззнаковых значений: начального адреса сегмента, который называется также просто базой или сегментом, и внутрисегментного смещения, которое определяет расстояние от начала сегмента до этой ячейки. Для вычисления физического адреса база сегмента сдвигается влево на 4 бита и суммируется со смещением, как показано на рис. 3.3, где также приведены возможные источники компонентов логического адреса (ЭА – эффективный адрес, вычисляемый в соответствии с заданным способом адресации).

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

Команды всегда выбираются из текущего сегмента кода в соответствии с логическим адресом CS:IP. Стековые команды всегда обращаются к текущему сегменту стека по адресу SS:SP. Если при вычислении адреса ЭА используется регистр ВР, то обращение производится также к стековому сегменту. В последнем случае принцип стека «первый пришел – последний вышел» игнорируется и ячейки стекового сегмента рассматриваются как ОЗУ с произвольной выборкой, что обеспечивает большую гибкость в использовании этих ячеек.

64

Логический

 

 

 

 

 

 

 

 

 

 

 

Сегмент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Смещение

 

 

 

 

 

 

 

 

 

 

 

(CS, SS, DS, ES)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(IP, SP, SI,DI, ЭА)

 

 

 

 

 

 

 

 

адрес

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

C

 

 

 

 

 

B

 

A

 

 

 

 

 

 

 

 

4

3

2

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

D

 

 

 

 

C

 

 

 

 

 

B

 

A

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

3

 

 

 

 

2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Физический

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

0

 

 

 

 

 

E

 

C

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.3. Вычисление физического адреса

Операнды, как правило, размещаются в текущем сегменте данных, и обращение к ним организуется по адресу DS:ЭA. Однако программист может заставить МП обратиться к переменной, находящейся в другом текущем сегменте. Считается, что цепочка-источник находится в текущем сегменте данных, а ее смещение задается регистром SI. Цепочка-получатель обязательно располагается в текущем дополнительном сегменте, а смещение берется из регистра DI. Команды обработки цепочек автоматически модифицируют содержимое индексных регистров SI и DI по мере продвижения по цепочке в направлении, соответствующем флагу DF.

Сегментная структура памяти обеспечивает возможность создания позиционно независимых или динамически перемещаемых программ, что необходимо в мультипрограммной среде для эффективного использования оперативной памяти. Чтобы обеспечить позиционную независимость, все смещения в программе должны задаваться относительно фиксированных значений, содержащихся в сегментных регистрах. Это позволяет произвольно перемещать программу в адресном пространстве памяти, изменяя только содержимое сегментных регистров.

Стек, как обычно, организуется в ОЗУ, и его положение определяется содержимым регистров SS и SP. Регистр SS хранит базовый адрес текущего сегмента стека, а регистр SP указывает на вершину стека, т. е. содержит смещение вершины стека в стековом сегменте. При каждом обращении к стеку пересылается одно слово, причем содержимое SP модифицируется автоматически: при записи (включении) в стек оно уменьшается на два, при чтении (извлечении) из стека – увеличивается на два.

При всех достоинствах принятой в МП i8086 организации памяти она имеет некоторый недостаток, заключающийся в трудности манипуляции физическими адресами при необходимости их программной обработки.

65

3.3. Система прерываний

Прерывание – это приостанов выполнения МП программы с целью выполнения какой-то более важной или нужной в данный момент другой программы или процедуры, после завершения которой продолжается выполнение прерванной программы с момента ее прерывания. Прерывание позволяет ЭВМ приостановить любое свое действие и временно переключиться на другое, как заранее запланированное, так и неожиданное, вызванное непредсказуемой ситуацией в работе машины или ее компонента. Каждое прерывание влечет за собой загрузку определенной программы, предназначенной для обработки возникшей ситуации – программы обработки прерывания.

Организация и управление прерываниями функционально во многом смыкается с управлением задачами – одной из базовых функций операционных систем. Основой для управления процессом одновременного решения нескольких задач (равно как и управления прерываниями) являются процедуры:

выбора очередной задачи или определения приоритета задачи;

сохранения информации о статусе задачи при ее прерывании (формирование слова состояния программы);

упреждения и устранения конфликтов между задачами (координации и синхронизации выполнения задач).

Последовательность действий процессора при реализации прерывания такова. При появлении запроса на прерывание, запланированное заранее или неожиданное, МП, как правило, после завершения выполнения текущей команды программы анализирует допустимость (разрешенность и приоритетность) данного вида прерывания. Если оно разрешено, процессор производит следующие действия:

запоминает в стековой памяти текущее состояние прерываемой программы (состояние некоторых регистров МП, в частности регистров F, CS, IP);

посылает источнику запроса на прерывание запрос о причине преры-

вания;

анализирует код запрошенного прерывания (номер прерывания – Ni) и формирует адрес ячейки (AV), хранящей вектор прерывания (вектор – адрес

программы обработки прерывания) по формуле AV = 4 Ni (векторы прерываний занимают начальную 1024-байтовую область памяти с адресами ячеек от 00000 до 00400h так, что адрес вектора вычисляется простым умножением номера прерывания на четыре, так как CS и IР занимают по 2 байта каждый);

считывает из памяти и записывает в регистры МП (в регистры FL – регистр флагов, CS, IP и т. д.) вектор прерывания и его атрибуты;

сбрасывает (устанавливает в 0) флаги прерывания (IF) и трассировки

(TF);

выполняет программу обработки прерывания;

после выполнения программы обработки прерывания возвращает из стековой памяти параметры прерванной программы в регистры МП и восстанавливает процесс выполнения прерванной программы.

Видов (номеров) прерывания может быть всего 256, и, соответственно,

66

векторов прерывания (адресов CS:IP программ обработки прерываний) в памяти насчитывается до 256.

Существует следующая классификация видов прерываний.

Прикладные прерывания временно устанавливаются пользователем при многопрограммной работе МП для указания приоритета выполнения прикладных программ (при появлении необходимости выполнения более приоритетной программы текущая менее приоритетная программа прерывается).

Псевдопрерывания служат для запоминания важных фиксированных адресов, которые могут быть использованы в программах, в частности, при условных и безусловных передачах управления (запоминание адресов передачи управления как векторов прерывания возможно благодаря аналогии выполнения прерывания и обращения к процедурам).

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

Программные прерывания – это обычные процедуры, которые вызывает текущая программа для выполнения предусмотренных в ней стандартных подпрограмм, чаще всего подпрограмм – служебных функций работы с внешними устройствами, то есть фактически программные прерывания ничего не прерывают.

Технические прерывания (или, иначе, прерывания от схем контроля) возникают при появлении отказов и сбоев в работе технических средств (аппаратуре) ЭВМ. Большинство технических прерываний не маскируются, то есть они разрешаются всегда, а некоторые из них относятся к категории «аварийных» (например, отключение питания), и при их возникновении даже не запрашивается причина прерывания, а просто, по возможности, спасаются важные промежуточные результаты – записываются в безопасное место.

Логические прерывания возникают при появлении ошибок в выполняемых программах (деление на 0, потеря точности мантиссы, нарушение защиты памяти и т. п.). Многие из логических прерываний также относятся к категории немаскируемых.

Схема организации приема запросов на прерывания показана на рис. 3.4. Для приема внешних прерываний имеются порты двух типов: NMI (None Masked Interrupt) – для приема немаскируемых прерываний и INTR (Interrupt) –

для приема прочих прерываний (INTR обычно используется для подсоединения контроллера прерываний). Если запрос на прерывание поступает по входу NMI, то прерывание не маскируется (имеет абсолютный приоритет) и сразу выполняется; по входу INTR прерывание разрешается, если в регистре флагов МП флаг IF = 1. Всего предусмотрено 256 типов (0-255) прерываний. Из них только

67

первые 5 жестко закреплены в МП, остальные используются операционной системой (ОС) и BIOS.

Тип 2

 

 

Контроллер

 

IRQ0

 

Тип 8-15

 

 

 

 

Аварийные

 

 

 

 

 

Аппаратные

 

 

 

 

 

 

 

прерываний

 

 

 

 

 

 

 

 

прерывания

 

 

 

 

IRQ7

 

прерывания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Устройство приема запросов на прерывания МП

Тип 0

 

Тип 1

 

Тип 3

 

Тип 4

 

Типы 16-31

 

Типы 32-255

Ошибка

 

Пошаговый

 

Прерывание

 

Прерывание

 

Прерывания

 

Прерывания

деления

 

режим

 

по INT

 

по INTO

 

BIOS

 

ОС

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.4. Организация приема запросов на прерывания

Тип 0 – прерывание возникает при делении на 0 или если частное от деления переполняет разрядную сетку МП.

Тип 1 – в режиме «трассировка» (при TF = 1) после выполнения каждой команды программы происходит останов.

Тип 2 – немаскируемое техническое прерывание.

Тип 3 – прерывание по команде INT, включенной в программу: останов и отображение содержимого регистров МП.

Тип 4 – прерывание по команде INTO, включенной в программу, но только если при выполнении предыдущей команды произошло переполнение разрядной сетки.

Типы 8-15 – аппаратные прерывания, инициируемые внешними устройствами, поступают на входы IRQ0-IRQ7 контроллера прерываний (вход IRQ0 имеет высший приоритет, и прерывание, поступившее по этому входу, обрабатывается первым; всего уровней приоритета восемь и вход IRQ7 имеет низший приоритет).

Типы 16-31 – планируемые программные прерывания BIOS. Типы 32-255 – программные прерывания операционной системы.

Прерывания с 0 по 31 и прерывание 64 относятся к прерываниям нижнего уровня, обслуживаемым BIOS; прерывания начиная с 32 – являются прерываниями верхнего уровня.

3.4.Форматы команд

3.4.1.Типы операндов и виды адресации

Операнды, которые используются в операторах ассемблера, могут быть регистром (r), адресом памяти (mem), непосредственным значением, задаваемым прямо в операторе (imm), сегментным регистром (sr).

68

В связи с этим существуют различные форматы одних и тех же команд:

первый и второй операнды – регистры. Результат помещается по адресу первого операнда. Могут использоваться все регистры общего назначения: АН, AL, АХ, ВН, BL, BX, CH, CL, CX, DH, DL, DX, BP, SP, SI, DI. Например:

mov BP,SP ; содержимое регистра SP помещается в регистр ВР

первый операнд – регистр, второй – адрес памяти. Результат помещается в регистр, указанный в операторе, например:

mov ax, DATA ; в регистр АХ помещается содержимое поля DATA

первый операнд – адрес памяти, второй – регистр. Результат помещается по тому адресу, который используется в качестве первого операнда, например:

mov ES:[DI],AX ; содержимое регистра АХ помещается по адресу, ; определяемым содержимым регистров ES и DI

первый операнд – регистр, второй – непосредственные данные. Результат помещается в регистр, например:

mov AX,0B800h ; в регистр АХ помещается значение B800h

первый операнд – адрес памяти, второй – непосредственные данные. Ре-

зультат помещается по указанному адресу, например:

mov Buffer, 0A000h ; по адресу Buffer помещается значение A000h

первый операнд – сегментный регистр, второй – регистр общего назначе-

ния. Результат помещается в сегментный регистр, причем задание регистра CS в таком формате команды не применяется, например:

mov DS, АХ ; содержимое регистра АХ помещается в регистр DS mov СS, АХ ; такой операнд недопустим !

первый операнд – регистр общего назначения, второй – сегментный ре-

гистр. Результат помещается в регистр общего назначения, например: mov AX,CS ; содержимое регистра CS помещается в регистр АХ

Команды, работающие с одним операндом, могут работать с регистрами общего назначения, адресами памяти или с сегментными регистрами.

В МП i8086 применяются следующие типы адресации операндов: регист-

ровая; прямая; непосредственная; косвенная; базовая; индексная; базово - индексная.

Регистровая адресация подразумевает использование в качестве операнда регистра процессора, например:

push DS mov BP,SP

При прямой адресации один операнд представляет собой адрес памяти, второй – регистр:

mov DATA,AX

69