Прерывание
Появилось понятие прерывания вместе с созданием ЭВМ. Тогда стала задача о совместной работе процессора и медленных внешних устройств. Хорошим примеров может служить клавиатура. Когда пользователь нажмет клавишу не известно. Это может случиться в любой момент, вот когда он нажимает клавишу и сообщается процессору что нужно бы обработать это событие и получить клавишу, которая нажата. Отсюда можно сделать вывод, что прерывания рождают внешние устройства. Но в нашем примере было использовано прерывание в программе. Конечно, кроме получения информации от устройства, этим устройствами нужно еще и управлять. Устройства медленные и помимо прочего еще нужно будет дождаться окончание выполнения операции. Это то же реализуется с помощью прерываний, вызываемыми из программы. Итак, прерывания бывают двух типов:
Программные
Аппаратные
Устройств всяких много - клавиатура, монитор, дисковод и так далее. Если не пользоваться прерываниями, то постоянно операционная система должна опрашивать устройства, нажата ли клавиша, хотите ли вывести данные на монитор и так далее. Намного проще оговорить некоторый механизм который и будет обращаться внимание операционной системы и процессора на необходимость проведения некоторых действий. Как все это работает в динамике? Ваша программа что то считает. В этот момент нажимается клавиша. Программа должны быть прервана. И это будет сделано, управление будет передано специальному коду (процедура обработки прерывания) а потом Ваша программа будет выполняться дальше. То же самое когда мы вызываем прерывание для вывода символов на монитор (int 21h 04Ch) то сами генерируем прерывание. Зачем? В этот момент может происходить считывание с дисковода или вывод других символов на экран. А в это время мы вызываем прерывание вывода символов. Так как прерывания могут наступать одновременно, то есть приоритет их обработки. Есть прерывание, которые выполняться в любом случае даже если идет обработка другого прерывания. Процедура обработки прерывания это программа. Вопрос в том только где она храниться. Базовая обработка прерывания храниться в BIOS и в самих микросхемах оборудования. Но использовать их довольно тяжело. Для того, что бы записать файл нужно завести двигатель дисковода, установить головку, дать команду перейти в тот сектор прочитать таблицу файлов, проверить что там нет файла и так далее так далее. Все эти задачи облегчает операционная система, которая предоставляет Вам прерывания более высокого уровня. Используя эти прерывания, Вы можете одним заходом создать файл, например. Различают прерывания по номерам:
21h - прерывание DOS
13h - прерывание BIOS
Вот когда Вы вызываете прерывание (INT) Вы указываете еще и номер (21h) то есть, кто будет выполнять это действие.
Регистры
Регистры это специальные ячейки памяти. Это самое главное. Вся их прелесть в том, что обращение к регистрам производиться значительно быстрее чем к оперативной памяти ПК. Именно по этой причине регистры используются для команд процессора. От туда процессору удобно и быстро получать информацию. Если говорить o ПК с типом процессоров 286.
Каждый регистр имеет имя и свое назначение. Они бывают следующие по типам.
Регистры общего назначения |
AX, BX, CX, DX, BP, SI, DI, SP |
Сегментные регистры |
CS, DS, SS, ES |
Счетчик команд |
IP |
Регистр флагов |
Flags |
Таблица 1. Типы регистров
Каждое имя регистра несет некоторый смысл.
A |
Accumulator |
Аккумулятор |
B |
Base |
База |
C |
Counter |
Счетчик |
D |
Data |
Данные |
BP |
Base pointer |
Указатель базы |
SI |
Source index |
Индекс источника |
DI |
Destination index |
Индекс приемника |
SP |
Stack pointer |
Указатель стека |
CS |
Code segment |
Сегмент команд |
DS |
Data segment |
Сегмент данных |
SS |
Stack segment |
Сегмент стека |
ES |
Extra segment |
Дополнительный сегмент |
IP |
Instruction pointer |
Счетчик команд |
Таблица 2. Расшифровка названий регистров
Регистры AX, BX, CX и DX позволяют обращаться не к регистру, а к старшему и младшему байту.