Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shporyy.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.48 Mб
Скачать

1.3.2.2. Режимы адресации переходов.

Внутрисегментный прямой режим. Эффективный адрес равен сумме 8- или 16-битового смещения и текущего содержимого IP (относительная адресация)

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

Межсегментный прямой режим. Непосредственно указываются значения CS и IP.

Межсегментный косвенный режим. Заменяет содержимое CS:IP содержимым двух смежных слов из памяти.

040. Дополнительные регистры в МП 80386 и выше

Сегментные регистры. Кроме сегментных регистров МП i8086 и i80286 (DS, CS, SS, ES), программная модель содержит два дополнительных сегментных регистра данных: FS и GS. С каждым из шести сегментных регистров связа­ны теневые регистры дескрипторов. В теневые регистры в защищенном ре­жиме переписываются 32-разрядный базовый адрес сегмента, 20-разрядный предел и атрибуты (права доступа) из дескрипторных таблиц.

В управляющих регистрах CR0—CR3 (Control Register) хранятся признаки состояния процессора, общие для всех задач. Младшие четыре разряда ре­гистра CR0 содержат биты регистра MSW МП i80286 и некоторые другие биты управления. Регистр CR1 зарезервирован; в CR2 хранится 32-разрядный линейный адрес, по которому получен отказ страницы памяти; в 20 старших разрядах регистра CR3 хранится физический базовый адрес таблицы каталога страниц и биты управления кэш-памятью. Регистр CR4 (Pentium+) содержит биты разрешения архитектурных расширений МП.

Системные адресные регистры. В системных регистрах-указателях глобальной дескрипторной таблицы GDTR и таблицы прерываний IDTR — хранятся 32-разрядные базовые адреса и 16-разрядные пределы таблиц соответственно. Системные сегментные регистры задач TR и локальной дескрипторной таб­лицы LDTR являются 16-разрядными селекторами. Им соответствуют тене­вые регистры дескрипторов, которые содержат 32-разрядный базовый адрес сегмента, 20-разрядный предел и байт права доступа.

В регистрах отладки DR0—DR3 (Debug Register) содержатся 32-разрядные адреса точек останова в режиме отладки; DR4—-DR5 зарезервированы и не используются; DR6 отображает состояние контрольной точки; DR7 — ру­ководит размещением в программе контрольных точек.

Регистры тестирования TR (Test Register) входят в группу модельно-специфических регистров, их состав и количество зависят от типа процессо­ра: в МП 386 используются два регистра TR6 и TR7, в Pentium II — TR1— TR12. Эта группа регистров содержит результаты тестирования МП и кэш-­памяти.

041. Сегме регистр- Сегме пам- Меха сегме в рел-реж

1.2. Реальный режим

1.2.1. Параметры базового микропроцессора семейства Intel 8086.

Рис. 2. Структурная схема микропроцессора I8086

1.2.4. Программная модель микропроцессора I8086.

Любой процессор для работы в реальном режиме имеет четырнадцать 16-разрядных регистров (табл. 2). Они делятся на две группы и два отдельных регистра: группа регистров общего назначения (РОН) – 8 регистров, группа сегментных регистров – 4 регистра, регистр флагов и регистр указателя инструкций. Название группы "регистры общего назначения" не должно вводить в заблуждение – регистры в ней не равноправны, каждый регистр имеет свое специфическое назначение и может использоваться в посторонних целях только тогда, когда он свободен от выполнения своих "прямых обязанностей". Иногда группу регистров общего назначения подразделяют на регистры данных (АХ, BX, СХ, DX) и регистры указателей (SI, DI, BP, SР). Иногда регистры ВХ, SI, DI и BP называют регистрами-модификаторами.

ТАБЛИЦА 2

Программная модель МП Intel 8086 (КМ1810ВМ86)

Имя

English

Основное назначение

Прим.

РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ

AX

Accumulator

Основной сумматор

AH, AL

BX

Base

Адресация по базе

BH, BL

CX

Counter

Счётчик циклов

CH, CL

DX

Data

Для «длинных» данных

DH, DL

SI

Source Index

Индексирование источника

DI

Destination Index

Индексирование приёмника

BP

Base Pointer

База стека

SP

Stack Pointer

Вершина стека

СЕГМЕНТНЫЕ РЕГИСТРЫ

CS

Code Segment

Сегмент команд, не может быть изменён напрямую

SS

Stack Segment

Сегмент стека

DS

Data Segment

Сегмент данных

ES

Extension Segment

Дополнительный сегмент

РЕГИСТР ФЛАГОВ

FLAGS

Flags

Информация о текущем состоянии процессора

РЕГИСТР УКАЗАТЕЛЯ КОМАНД

IP

Instruction Pointer

Смещение команды, программно недоступен

К первым четырем регистрам общего назначения можно обращаться как целиком (например, АХ), так и к их старшим (АН) или младшим (AL) байтам. Регистр SP используется исключительно для указания на вершину стека. Значения регистров CS и IP не могут быть изменены непосредственно в программе (они изменяются либо автоматически, либо косвенно за счет команд переходов). Имя регистра IP вообще не является зарезервированным и не может встречаться в программе (в смысле имени регистра).

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

ТАБЛИЦА 3

Функции регистров общего назначения микропроцессора К1810

Регистр

Назначение

Выполняемая функция

AX

Аккумулятор

Ввод-вывод, умножение и деление слов

AL

Аккумулятор (младший байт)

Умножение, деление и ввод-вывод байтов;

Преобразование; десятичная арифметика

AH

Аккумулятор (старший байт)

Умножение и деление байтов

BX

Базовый регистр

Базовый регистр; преобразование адресов

CX

Счётчик

Обработка строк; подсчёт циклов

CL

Счётчик (младший байт)

Динамические и циклические сдвиги

DX

Регистр данных

Умножение и деление слов; косвенный ввод-вывод

SP

Указатель стека

Операции с использованием стека

BP

Указатель базы

Базовый регистр

SI

Указатель источника

Указатель исходной строки; индексный регистр

DI

Указатель приёмника

Указатель строки результата; индексный регистр

Биты регистра флагов перечислены в следующей таблице:

ТАБЛИЦА 4

Бит

Имя

Название

Тип

Назначение

0

CF

Carry Flag

сост.

Перенос или заём

2

PF

Parity Flag

сост.

Чётность

4

AF

Auxiliary Flag

сост.

Перенос или заём BDS

6

ZF

Zero Flag

сост.

Ноль результата

7

SF

Sign Flag

сост.

Знак результата

8

TF

Trace Flag

упр.

Трассировка

9

IF

Interrupt Flag

упр.

Разрешение прерываний

10

DF

Direction Flag

упр.

Напр. обработки цепочек

11

OF

Overflow Flag

сост.

Переполнение

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

042. Реальный режим работы МП I80x86

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

Физический адрес ячейки памяти представляет 20-битовое число в диапа­зоне 0 — FFFFF, которое однозначно определяет положение каждого байта в пространстве памяти емкостью 1 Мбайт. В начале каждого цикла шины, связанного с обращением к памяти, физический адрес выдается на шину адреса и сопровождается сигналом ALE. Так как МП ВМ86 является 16-битовым, то все операции при вычислении физического адреса производятся с 16-битовыми адресными объектами.

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

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

043. Защищенный режим работы МП. Логические и физические адресные пространства

Защищенный режим

Этот режим является наиболее оптимальным для процессоров с архитектурой IA–32. Единственным способом перехода в защищенный режим является программный. Для этого нужно установить бит PE (бит ”0”) в регистре управления CRØ командной пересылки MOV to CRØ или с помощью команды загрузки слова состояния машины LMSW. При спросе бита PE процессор снова перейдёт в реальный режим.

Процессоры архитектуры IA–32(с 386) имеют четыре уровня привилегий, оптимизированные для поддержки требований многозадачных ОС, чтобы изолировать и защищать пользовательские программы друг от друга и от ОС. Эта задача выполняется аппаратными средствами, встроенными в процессор, и поэтому не занимает много времени. Наивысший — нулевой уровень привилегий имеет ядро ОС; первый — остальные программы ОС (программы системного обслуживания), второй заказные расширения ОС и третий, наименее привилегированный уровень, — программы пользователя.

Уровни привилегий присваиваются ключевым элементам:

RPL — уровень запрашиваемых привилегий — селектору;

DPL — уровень привилегий доступа к сегменту — дескриптору сегмента;

CPL — текущий уровень привилегий — DPL дескриптора выполняемого в данный момент кодового сегмента;

EPL = max (RPL, CPL) — эффективный уровень привилегий.

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

В защищённом режиме блоком сегментации иначе транслируется логический (виртуальный, математический) адрес в линейный и по–другому интерпретируется содержимое сегментных регистров. 13 старших разрядов сегментного регистра рассматриваются как индекс входа в таблицу дескрипторов. Выбранный дескриптор содержит линейный базовый адрес сегмента. Сумма базового адреса и смещения дает окончательный линейный адрес. Учитывая, что каждая задача может иметь 16К селекторов, то есть сегментов, каждый из которых может иметь объём до 4 Гбайт, то каждая задача может иметь до 246 или 64 Терабайт логического адресного пространства.

Если не включено разбиение на страницы, то линейный адрес будет и физическим адресом памяти. Если установлен бит PG (Paging Enable) (бит 31) в регистре CRØ, то линейный адрес делится на три части (10, 10 и 12 разрядов). При этом старшие 10 разрядов определяют один из 1024 входов каталога таблиц страниц, средние 10 разрядов – вход (один из 1024) таблицы страниц, а младшие 12 разрядов – адрес байта в странице из 4 Кбайт. (Рис 5.1)

Рис 5.1 Формирование физического адреса в защищённом режиме при включении режима разбиения на страницы.

Чтобы в последствии не выполнять это преобразование многократно, старшие 20 разрядов линейного адреса и соответствующие 20 разрядов физического адреса записываются в особую КЭШ память — TLB (Translation Lookaside Buffer), и в последующем физический адрес страницы выбирается из TLB.

Таким образом, процессоры IA–32 имеют три адресных пространства: логическое (селектор, смещение), линейное и физическое.

В дополнение к базовому механизму с объёмом страницы в 4 KB процессоре Pentium предусмотрели возможность работы со страницами в 4 MB (режим PSE). В ряде процессоров P6 (Pentium Pro) разрядность физического адреса увеличена до 36 бит и имеется возможность включения режима переадресации PAE, что позволяет иметь страницы 2 MB и 4 MB в расширенном адресном пространстве. В МП Pentium 3 появился режим преобразования PSE–36, в котором блок страниц работает с 4MB страницами в 36 разрядном (64 GB) адресном пространстве.

Режим виртуального МП8086 (Virtual 8086 Mode) является особым состоянием задачи защищённого режима, в котором процессор работает как МП 8086. Задачи в этом режиме изолируются друг от друга. Использование физического адресного пространства управляется механизмами сегментации и трансляции страниц.

046. Обработчики прерываний в реальном режиме

Концепция прерывания

Прерыванием называется реакция процессора на некоторое со­бытие, заключающаяся в том, что процессор приостанавливает выполнение текущей программы, записывает в ее стек значения регистров FLAGS, CS, IP, обнуляет флаги IF и TF и переклю­чается на выполнение другой программы, называемой процеду­рой обработки прерывания. По окончании этой процедуры про­цессор возвращается к выполнению прерванной программы. Особая трудность здесь заключается в том, что прерывания по­ступают независимо от выполняемой программы, в любой про­извольный момент. Кроме того, запросов на прерывания может быть несколько, и из них необходимо формировать очередь.

Прерывания могут быть маскируемыми и немаскируемыми. Мас­кируемые прерывания блокируются занесением 0 в флаг IF. Не­маскируемые (самые важные) прерывания заблокировать невоз можно. Для маскируемых и немаскируемых прерываний у процес­сора есть два отдельных физических входа (INTR и NMI).

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

На уровне электроники внешние прерывания организованы следующим образом. Имеется контроллер прерываний (микро­схема i8259А), выполняющий несколько важных функций: по­лучение сигналов на прерывания от внешних устройств, маски­ровка (т. е. запрещение обработки) некоторых прерываний, ар­битраж приоритетов прерываний и формирование очереди за­просов на прерывание. Контроллер имеет три 8-разрядных ре­гистра и 8 входов от внешних устройств, называемых IRQ0, IRQ1, ...IRQ7 (Interrupt ReQuest), выход INT на процессор (со­единяемый со входом процессора INTR) и вход обратной связи от процессора INTA, по которому процессор подтверждает на­чало обработки прерывания.

Запрос на прерывание, поступающий на некоторый вход IRQ, устанавливает в 1 соответствующий бит 8-разрядного регистра фиксации запросов прерываний (IRR). Если соответствующее прерывание не замаскировано 8-разрядным регистром маски (IMR может программироваться) и если процессор не занят об­работкой прерывания высшего или равного приоритета (что определяется 8-разрядным регистром ISR), запрос на прерыва­ние поступает с выхода INT на вход прерываний процессора INTR, и процессор подтверждает по линии INTA.

Один контроллер прерываний имеет 8 входов (IRQ), чего явно недостаточно для обслуживания внешних устройств современ­ного компьютера (таймер, часы реального времени, клавиату­ра, гибкий и жесткий диски, мышь, последовательные и парал­лельные порты и проч.).

Однако несколько контроллеров прерываний могут быть вклю­чены последовательно. На современных компьютерах (начиная с 286) один (ведущий) контроллер прерываний подключен непо­средственно к процессору, а второй (ведомый) своим выходом INT подключен ко входу IRQ2 ведущего контроллера. Итого получается 15 входов прерываний от IRQ0 до IRQ 15 (IRQ2 не может быть использован).

При подаче сигнала на прерывание от контроллера к процессо­ру по линии INTR-INT, одновременно по линиям данных из контроллера прерываний в процессор поступает номер вектора прерывания, который образуется путем сложения IRQ с некото­рым базовым номером, который присваивается ВIOSом кон­троллеру в процессе загрузки (значения по умолчанию 08h для ведущего контроллера и 70h для ведомого). Таким образом, например, номер вектора прерывания для клавиатуры будет 08+1=9h, для жесткого диска 70h+6=76h.

Контроллер прерываний допускает перепрограммирование для установки различных режимов формирования очереди запро­сов, изменения приоритетов прерываний, изменения базовых номеров контроллеров. Такое перепрограммирование осущест­вляется через два байтовых порта 20h и 21h. По умолчанию IRQ отдельного контроллера имеют приоритеты в соответствии с их номерами (IRQ0 – наивысший, IRQ7 – наинизший).

IRQ

Устройство

Приоритет

0

Таймер

2

1

Клавиатура

3

2

Выход INT ведомого контроллера

3

COM2

12

4

СОМ1

13

5

LPT2

14

6

Контроллер гибкого диска

15

7

LPT1

16

8

Часы реального времени (CMOS)

4

9

Свободен

5

10

Свободен

6

11

Свободен

7

12

Свободен

8

13

Свободен

9

14

Контроллер жесткого диска

10

15

Свободен

11

Итак, сформирован и поступил в процессор номер вектора пре­рывания. Как уже говорилось, начальный участок памяти отво­дится на 256 4-байтовых векторов прерываний. В векторах пре­рываний хранятся смещения и сегменты ("перевернуто"!) проце­дур обработки соответствующих прерываний. Процессор запи­сывает в стек выполнявшейся программы значения регистров FLAGS, CS, IP, обнуляет флаги прерываний и трассировки IF и TF (чтобы заблокировать обработку других прерываний и трассировку внутри процедуры обработки прерывания) и пере­дает управление в процедуру обработки прерывания, адрес ко­торой определен вектором прерывания (если, конечно, преры­вание не заблокировано флагом IF=0).

Внутренние прерывания (исключения), инициируемые процес­сором, также имеют свои номера векторов прерывания, напри­мер, деление на ноль имеет вектор прерывания номер 0, попыт­ка выполнения несуществующей команды имеет номер 6. Вызов процедуры обработки прерывания для них проходит точно так же.

В конце каждой процедуры прерывания выполняется команда IRET. Она действует так же, как команда RET, и, кроме того, автоматически восстанавливает из стека старое значение реги­стра флагов.

Особо важную роль для программирования выполняют преры­вания, инициированные программой пользователя по команде

int Номер_прерывания

Такие прерывания применяются в первую очередь для вызова сис­темных функций DOS и BIOS. На самом деле прерывания с номе­рами векторов 21h (функции DOS) и 10h (функции BIOS) являются целыми библиотеками со множеством функций (номера которых загружаются в АН перед вызовом прерывания).

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

По существу вызов прерывания по команде INT отличается от вызова far-процедуры по команде CALL только тем, что некото­рые действия (сохранение и последующее восстановление FLAGS, обнуление IF и TF) производятся автоматически. Если внутри процедуры обработки прерывания какие-либо РОН “портятся”, они сначала сохраняются в стеке, а потом восстанавливаются.

Именно из-за активного использования стека в процессе обра­ботки прерываний сегмент стека должен быть определен даже в программе, не использующей стек явно. Если сегмент стека не определен, стек все равно организуется “на дне” сегмента ко­манд, и по мере роста он может начать “затирать” команды.

047. Принципы функционирования контроллера прерываний I8259A

Векторная система с внеинтерфейсным вектором прерывания используется в IBM- совместимых персональных компьютерах. В этих компьютерах контроллеры внешних устройств не имеют регистров для хранения векторов прерывания, а для идентификации устройств, запросивших обслуживания, используется общий для всех ВУ контроллер прерываний. Ниже приведен пример контроллера прерываний INTEL 8559А.

БИС программируемого контроллера прерываний (ПКП) представляет собой устройство, реализующее до восьми уровней запросов на прерывания с возможностью программного маскирования и изменения порядка обслуживания прерываний. За счет каскадного включения БИС ПКП число уровней прерывания может быть расширено до 64 (в архитектуре персонального компьютера IBM РС АТ - 16).

П рограммируемый контроллер прерываний (ПКП) имеет 16 входов запросов прерываний (IRQ 0 - IRQ 15). Контроллер состоит из двух каскадно включенных контроллеров - выход INTR (запрос на прерывание) второго контроллера подключен ко входу IRQ 2 первого контроллера. В качестве примера отметим, что к линии IRQ 0 подключен системный таймер, к линии IRQ 1 - клавиатура, к линии IRQ 8 - часы

реального времени и т.д. Упрощенная схема взаимодействия контроллера прерываний с процессором и контроллером шины имеет следующий вид.

Рис. 6. Упрощенная схема взаимодействия контроллера прерываний с процессором и контроллером шины в IBM-совместимых персональных компьютерах класса АТ.

Эта схема функционирует следующим образом. Пусть в некоторый момент времени контроллер клавиатуры с помощью единичного сигнала по линии IRQ 1 известил контроллер прерываний о своей готовности к обмену. В ответ на запрос контроллер прерываний генерирует сигнал INTR (запрос на прерывание) и посылает его на соответствующий вход процессора. Процессор, если маскируемые прерывания разрешены (т.е. установлен флаг прерываний IF в регистре флагов процессора), посылает на контроллер шины сигналы R# - чтение, С# - управление и IO#- ввод/вывод, определяющие тип цикла шины. Контроллер шины, в свою очередь, генерирует два сигнала подтверждения прерывания INTA# и направляет их на контроллер прерываний. По второму импульсу контроллер прерываний выставляет на шину данных восьмибитный номер вектора прерывания, соответствующий данной линии IRQ.

В режиме реального адреса ("реальном" режиме) векторы прерываний хранятся в таблице векторов прерываний, которая находится в первом килобайте оперативной памяти. Под каждый вектор отведено 4 байта (2 байта под адрес сегмента и 2 байта под смещение), т.е. в таблице может содержаться 256 векторов. Адрес вектора в таблице - номер вектора - 4.

Далее процессор считывает номер вектора прерывания. Сохраняет в стеке содержимое регистра флагов, сбрасывает флаг прерываний IF и помещает в стек адрес возврата в прерванную программу (регистры CS и IP). После этого процессор извлекает из таблицы векторов прерываний адрес подпрограммы обработки прерываний для данного устройства и приступает к ее выполнению.

В IBM PC/ХТ/АТ используется режим прерываний с фиксированными приоритетами. Высшим приоритетом обладает запрос по линии IRQ 0, низшим - IRQ 7. Так как второй контроллер подключен к линии IRQ 2 первого контроллера, то приоритеты линий IRQ в порядке убывания приоритета располагаются следующим образом: IRQ 0, IRQ 1, IRQ 8 - IRQ 15, IRQ 3 - IRQ 7. Если запрос на обслуживание посылают одновременно два устройства с разными приоритетами, то контроллер обслуживает запрос с большим приоритетом, а запрос с меньшим приоритетом блокирует. Блокировка сохраняется до получения команды EOI.

048. Организация прерываний в ПЭВМ на базе I80x86

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

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

□ базовой системы ввода-вывода — прерывания BIOS;

□ операционной системы — прерывания DOS.

Программы обработки прерываний DOS, в отличие от программ обработки прерыва­ний BIOS, не встроены в ПЗУ и для разных операционных систем могут быть разными. К программным прерываниям можно отнести также прерывания при пошаговом ис­полнении программы, при работе с контрольным остановом и т. д.

Технические прерывания (или, иначе, прерывания от схем контроля) возникают при появлении отказов и сбоев в работе технических средств ПК. Большинство техниче­ских прерываний не маскируются, то есть они разрешаются всегда, а некоторые из них относятся к категории «аварийных» (например, отключение питания), и при их воз­никновении даже не запрашивается причина прерывания, а просто, по возможности, спасаются важные промежуточные результаты — записываются в безопасное место, в НЖМД, например.

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

Прерывания обслуживаются базовой системой ввода-вывода — модулем расширения BIOS и модулем обработки прерываний DOS. BIOS и блок расширения BIOS имеют дело в основном с не планируемыми техническими и логическими прерываниями, пользовательскими прикладными прерываниями, а также со многими планируемыми прерываниями, обслуживающими систему ввода-вывода, детализированными и не очень детализированными (прерывания, обслуживаемые BIOS, часто называют пре­рываниями нижнего уровня).

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

меньше учитываются технические особенности элементов ПК, с другой стороны, npi обработке этих прерываний часто случаются обращения к программам прерыванш системы BIOS. Большинство прерываний BIOS имеют близкие аналоги среди пре рываний DOS.

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

Для приема внешних прерываний имеются порты двух типов: NMI (None Masked Interrupt) для приема немаскируемых прерываний и INTR (Interrupt) — для приема прочих прерываний (INTR обычно используется для подсоединения контроллера пре­рываний). Если запрос на прерывание поступает по входу NMI, то прерывание не маскируется (имеет абсолютный приоритет) и сразу выполняется; по входу INTR прерывание разрешается, если в регистре флагов МПП флаг IF = 1.

Всего предусмотрено 256 типов (0-255) прерываний. Из них только первые 5 жестко закреплены в МП, остальные используются системами 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 функций (вид функции в рамках каждого прерывания определяется содержимым регистра АН).

В работе [8] приведен список прерываний нижнего и верхнего уровня, а также служеб­ных функций DOS наиболее часто используемого программистами прерывания 21h.

049. Обработка прерываний в защищенном режиме. Исключения и прерывания

Общая классификация прерываний.

В зависимости от источника, прерывания делятся на

Аппаратные - возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени

·Программные - вызываются искусственно с помощью соответствующей команды из программы (INT хх), предназначены для выполнения некоторых действий операционной системы, являются синхронными (программные прерывания процессором обрабатываются как разновидность исключений)

Исключения - являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF (трассировка)).

В защищенном режиме в режиме многозадачности возникает чет­вертая разновидность прерываний - - переключение с одной задачи на другую.

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

Процессор может воспринимать прерывания после выполнения каждой команды, длинные строковые команды имеют для восприятия прерываний специальные окна.

Внешние прерывания - вызываются внешними по отношению к микропроцессору событиями (по существу - это группа аппаратных прерываний) Вложенных прерываний нет!

Внутренние прерывания - возникают внутри микропроцессора во время вычислительного процесса (по существу - это исключительные ситуации и программные прерывания).

Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства.

Внешние прерывания подразделяются на немаскируемые и маскируемые.

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

* NMI (no mask interrupt, немаскируемое прерывание)

* INTR (interrupt request, запрос на прерывание).

Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний (выполнен в виде специальной микросхемы i8259A) поддерживает восемь уровней (линий) приоритета; к каждому уровню “привязано” одно периферийное устройство. Именно маскируемые прерывания часто называют аппаратными прерываниями.

Немаскируемые прерывания (говорят, что оно одно, т.к. подается на вывод микропроцессора NMI) инициируют источники, требующие безотлагательного вмешательства со стороны микропроцессора.

Маскируемые прерывания вызывает сигнал на входе INTR (Interrupt Request) при установленном флаге разрешения (IF=1). В этом случае процессор сохраняет с стеке регистр флагов, сбрасывает флаг IF и вырабатывает два следующих друг за другом (back to back) цикла подтверждения прерывания, в которых генерируются управляющие сигналы INTA (Interrupt Acknowledge). Высокий уровень сигнала INTR должен сохраняться по крайней мере до подтверждения прерывания. Первый цикл подтверждения холостой, по второму импульсу внешний контроллер прерываний передает по шине номер вектора, обслуживающего данный тип аппаратного прерывания. Прерывание с полученным номером вектора выполняется процессором также, как и программное. Обработка текущего прерывания может быть в свою очередь прервана немаскируемым прерыванием, а если обработчик установит флаг IF, то и другим маскируемым аппаратным прерыванием.

Немаскируемые прерывания выполняются не зависимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Высокий уровень на этом входе вызовет прерывание с типом (вектором) 2, которое выполняется также, как и маскируемое. Его обработка не может прерваться под действием сигнала на входе NMI до выполнения команды IRET.

Исключения (Exceptions) подразделяются на отказы, ловушки и аварийные завершения.

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

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

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

Под исключения Intel резервирует векторы 0-31 в таблице прерываний, однако в PC часть из них перекрывается системными прерываниями BIOS и DOS.

В реальном и защищенном режиме работы микропроцессора обработка прерываний осуществляется принципиально разными методами !!

050. Создание в Windows приложений на ассемблере

Программирование в Windows основывается на использовании API

функций API (Application Program Interface).. Их количество достигает

двух тысяч. Все взаимодействие с внешними устройствами и ресурсами

операционной системы будет происходить посредством API функций

Windows поддерживает два типа приложений:

Графическое (оконное) приложение строится на базе набора API

функций, составляющий графический интерфейс пользователя GUI

(Graphic User Interface). Такое приложение представляет собой

программу, которая весь вывод на экран производит в графическом виде.

Первым результатом работы оконного приложения является отображение

на экране окна.

Консольное приложение представляет собой программу,

работающую в текстовом режиме. Работа такого приложения напоминает

режим MS-DOS. Работа консольного приложения также обеспечивается

API функциями.

Операционная система Windows использует линейную адресацию

памяти. Другими словами, всю память можно рассматривать как один

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

определяться содержимым одного 32-битного регистра, например ЕВХ.

Програмист пишущий программу теперь фактически не ограничены

объемом данных, кода или стека (объеме локальных переменных).

Сегменты в тексте программы играют теперь другую роль. Они

позволяют задать отдельным фрагментам кода (секциям) определенные

свойства: запрет на запись, общий доступ и т. д.

Операционная система Windows -- многозадачная среда. Каждая

задача имеет свое адресное пространство и свою очередь сообщений.

Более того, даже в рамках одной программы может быть осуществлена

многозадачность -- любая процедура может быть запущена как

самостоятельная задача.

Главным элементом графического приложения в среде Windows

является окно. Для каждого окна определяется своя процедура обработки

сообщений.

Окно может содержать элементы управления: кнопки, списки, окна

редактирования и др. Эти элементы также являются окнами, но обладают

особыми свойствами. События, происходящие с этими элементами (и

самим окном), приводят к приходу сообщений в процедуру окна.

Начнем знакомство с программированием в Windows с описания

того, как вызываются функции API. Обратимся к файлу помощи

WIN32.HLP, который поставляется, например, с пакетом Borland C++, и

выберем любую API функцию, например MessageBox:

int MessageBox(HWND hWnd, LPCTSTR IpText, LPCTSTR IpCaption, UINT uType);

Данная функция выводит на экран окно с сообщением и кнопкой

(или кнопками) выхода. Смысл параметров: hwnd — дескриптор окна, в

котором будет появляться окно-сообщение; IpText -- текст, который будет

появляться в окне; IpCaption -- текст в заголовке окна; uType -- тип окна, в

частности можно определить количество кнопок выхода. Теперь о типах

параметров. Все они -- 32-битные целые числа: HWND -- 32-битное целое,

LPCTSTR -- 32-битный указатель на строку, UINT -- 32-битное целое.

Консольные приложения

несколько отличаются от классических оконных, здесь нет

необходимости самостоятельно создавать окно и обрабатывать

сообщения. Консоль предназначена для ввода и вывода информации в

текстовом режиме. Кроме текстов самих файлов программы, нам

потребуются ключи компиляции. Для консольного приложения это:

Так как Windows многозадачная операционная система, то каждому

приложению ставится в соответствие некоторое число – Handle, что

переводится как идентификатор или дескриптор, – для однозначного

определения процесса.

Переходим к рассмотрению классической программы под Windows.

В такой программе имеется главное окно, а следовательно, и процедура

главного окна, реагирующая на сообщения. В коде программы можно

выделить следующие разделы:

• регистрация класса окна;

• создание главного окна;

• цикл обработки очереди сообщений;

• процедура главного окна.

051. Особенности МП Intel 80386, I80486

Intel 80386 — 32-битный x86-совместимый процессор третьего поколения фирмы Intel выпущенный 17 октября 1985 года, первым из процессоров x86 имеет встроенную кэш-память.

Система команд: расширена, в основном, за счет добавления 32-битных вариантов существующих инструкций (образованных 32-битными префиксами), включая те у которых 32-битные варианты имеют другие мнемоники (pushad/popad, pushfd/popfd, cwd*/cdq, movsd/cmpsd/scasd/lodsd/insd/outsd, iretd), а также команды mov для новых регистров. Новые инструкции: установка байта по условию (set*), команды переходов (jmp, j*) с относительным 16-битным смещением, команды загрузки полного адреса для новых сегментных регистров (lfs, lgs).

Регистры: 8 32-битных РОН (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP). Младшая, 16-битная, половина каждого из этих регистров соответствует регистрам AX, BX, CX, DX, SI, DI, BP, SP в предыдущих процессорах семейства x86. Как и раньше возможна адресация младших и старших 8-битных половин, младшей 16-битной половины 32-разрядных регистров данных (AL и AH, BL и BH, CL и CH, DL и DH). Регистр указатель команды и регистр флагов также стали 32-битными (EIP и EFLAGS), причем в регистре флагов добавлены новая группа флажков. К 4-м 16-битным сегментным регистрам (ES, CS, SS, DS) прибавились ещё 2 16-битных регистра (FS и GS). Добавлены несколько новых групп регистров (каждый регистр размером 32 бит): 3 регистра управления (CR0 (MSW), CR2, CR3), 8 регистров отладки (DR0, DR1, DR2, DR3, DR6, DR7), 2 тестовых регистра (TR6, TR7).

Разрядность регистров: 32 бит, объём виртуальной адресуемой памяти: 64 Тбайт, максимальный объём сегмента: 4 Гбайт.

Intel486 — 32-битный скалярный x86-совместимый процессор четвёртого поколения, построенный на гибридном CISC-RISC ядре, и выпущенный фирмой Intel 10 апреля 1989 года. Первый микропроцессор со встроенным математическим сопроцессором (FPU).

Регистры: набор Intel386 + 3 32-битных тестовых регистра (TR5, TR4, TR3), новые флаги в регистре флагов (EFLAGS) и в других управляющих регистрах (CR0, CR3). Вследствие включения FPU в кристалл процессора, в Intel 486 можно обращаться и к регистрам FPU: регистры данных, регистр тэгов, регистр состояния, указатели команд и данных FPU, регистр управления FPU. Добавлены дополнительные инструкции для работы со внутренней кэш-памятью (INVD, INVLPG, WBINVD), одна инструкция (BSWAP) для обеспечения совместимости с процессорами Motorola, и инструкция XADD (инструкция для сложения двух операндов с помещением результата во второй операнд, а не в первый как в ADD). Помимо этого к набору инструкций добавилось 75 инструкций FPU.

Разрядность регистров: 32 бит, разрядность ШД: 32 бит, разрядность ША: 32 бит, объём адресуемой памяти: 4 Гбайт.

052. Особенности МП Pentium

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]