ПредишенСледващото

Прекъсване - Спиране на изпълнението на една програма и прехвърляне на контрола на друг в случай на определени събития извън техния контрол. Все още можете да се върнете към прекъсва управлението на програмата, без да се губи rabotosposodnosti него.

Работа с прекъсване система може да се разглежда в два аспекта:

Работата с прекъсване вектори;

ЗАБЕЛЕЖКА: За пореден път подчертава, че това е най-вече за реален режим. Опитвайки се да "опита" от всеки друг може да има непредвидими последици.

Прекъсване ЕВРОВОК маса Protected Mode е достъпна само от нула пръстен на защита, можете да създадете или да го променят, ако се направи преминаването към защитен режим от себе си!

Когато работите в V86 е възможно да се промени имиджа на масата за прекъсване, но последствията се определят от възможностите на виртуалната монитора!

Работа с векторите на прекъсване.

Необходимостта да се работи с таблицата за прекъсване може да се появи в следните случаи:

Като прекъсване, можете да се обадите един от вашите съчетания. Въпреки, че прекъсва подпрограма кол изисква повече процесорно време, този подход е оправдан, ако това е необходимо да се прекъсне принципа на йерархия на софтуер в рамките на един модул, или ако процедурата се използва от много от вашите програми (можете да оставите постоянното пребиваване след приключване на програмата за настройка на системата).

Втората причина за писане на прекъсването може да бъде използването на един единствен хардуерно прекъсване. Това прекъсване се нарича автоматично при възникване на определени условия.
Обикновено BIOS инициализира неизползвани прекъсват вектори, така че те да говорят за процедура, която не прави нищо (той съдържа един оператор IRET). Можете да напишете процедура и променяте прекъсне вектор да сочи към него. Тогава вашата процедура ще се извършва при възникване на хардуерно прекъсване.

Може да бъде смяна на съществуващата прекъсването по своему. Едно такова прекъсване е прекъсване време на деня, който се нарича автоматично от 18.2 пъти в секунда. Обикновено това прекъсване актуализира само часовника, но можете да го използвате, за да синхронизирате събития в рамките на вашата програма. Други възможности - е писането на процедура за обработка на Ctrl-Break ако вашата програма трябва да изпълнява някои конкретни действия преди неговото завършване.

И накрая, може да искате да напишете прекъсне, което ще допълни една от процедурите за операционната система. В този случай, след извършване на необходимите действия, трябва да прехвърлите контрол на оригиналния услуга рутинни preravany (с помощта на "дълги" безусловна скок или допълнителна прекъсване). Тази техника може да бъде полезно, когато пишете TSRs получаващи контрол при получаване на конкретна команда от клавиатурата.

Прекъсване вектор маса заема 1Kbayt памет в диапазона 00000h - 00400h. Всеки вектор възложени четири байта в таблицата и определя номер от 00h до FFh. В инициализация вектор система конфигуриран да съчетания, намиращи се в ROM BIOS и DOS.

PUSH DS; резерв DS

MOV DX, офсетов нарушение на обществения ред; компенсиране на DX в процедури

MOV AX, SEG тълпа; процедури сегмент

MOV DS, AX, поставени в ДС

MOV AH, 25Н; настройка вектор функция

MOV AL, 60 Н; номер вектор

INT 21H; промяна прекъсване

POP DS; DS възстановяване

Контролерът в HDD AT, XT286, PS50 +

Интегрална схема 8259 има три еднобайтовата регистър, който контролира линии осем хардуерни прекъсвания. регистър на заявката за прекъсване (IRR) определя подходящата малко, когато заявка за прекъсване линия сигнали. След това, чипът автоматично проверява дали друго прекъсване се обработва. По този начин тя иска регистър информационно обслужване (ISR). Допълнителна верига е отговорен за схемата за приоритет. И накрая, преди прекъсването на разговора, провери регистъра на прекъсване маска (КДС), оставя се да знам дали в момента прекъсването на това ниво.

Преди да започнете работа на контролера трябва да се инициализира. Инициализация се извършва контрол на натоварването думи (до 4 байта). След инициализация, контролерът влиза оперативна готовност.

Когато са проектирани за i8085 прекъсване контролер в неговата схема са грешки, така че дизайнът на контролера за i8086 (8259A чип) се предвиди възможността за нейното функциониране и на системи, изградени на базата на i8085. Настройката ще се считат само за i8086 системи.

Port 20h - контролна дума ICW1 инициализация:

Бит 0 1 Инициализация четири думи (дума ICW4 определя функции връзка на главни и подчинени регулатори);

малко 1 милион система използва един-единствен администратор;

малко 2 0 на вектора 8 байта,

1 вектор 4 байта;

малко 3 0 фиксиране прекъсване "на фронта" (на PC и AT),

1 фиксиране прекъсване "в" (в PS / 2);

Бит 4 е една - знак ICW1;

7..5 битовете са равни на нула (за i8086).

Порт 21ч - контролна дума ICW2 инициализация:

2..0 битовете са равни на нула (за i8086);

Битове 7..3 основната част от номера на прекъсване вектор (за i8086).

Порт 21ч - контролна дума ICW3 за водеща:

Bits 7..0 1 отбелязани линии, които са свързани с контролерите на роби;

Порт 21ч - контролна дума ICW3 роб:

Битове 2..0 брой линия гостоприемник контролер, който е свързан към контролера,

7..3 бита са нула;

Порт 21ч - контролна дума ICW4 инициализация

1 бит 0 (за i8086);

малко 1 0 прекъсне по команда завършване,

1 автоматично определяне на края на прекъсване;

3..2 режим буфериране бита:

0 или 1 буфериране не се използва,

2 подчинен режим буфериране,

3 водещ режим буфериране;

малко 4 0 последователно

1 специален цялостен вграден режим.

7..5 битовете са равни на нула.

ЗАБЕЛЕЖКА: Думите Контролните инициализация се зареждат posledovalelno след предаване ICW1.

Контролер за управление на операции.

команда за управление на работа може да бъде изпратена към контролера след инициализация по всяко време.

Порт 21ч - OCW1 прекъсване маска регистър (КДС)

7..0 0 прекъсване услуги бита,

1 прекъсване маскиране;

Port 20h - OCW2 прекъсне регистрирате команди (ICR)

2..0 бита определят броя на битовете за регистъра на текущия трудов стаж (ISR),

4..3 битовете са равни на нула (определена OCW2),

Бит 1 май завършване прекъсване;

битови 6 бита 1 Почистване на споменатия ISR;

Bit 7 е 1 приоритети циклични смени.

Port 20h - OCW3 дума за управление на работа

Bits 1..0 регистрират четене:

0 или 1 чете там,

1 на индикация малко 2 форма на думата-статус (съдържа най-голям брой Получена заявка);

Bits 4..3 подписват 01 OCW3;

Bits 6..5 специален маскиране:

0 или 1 отсъства,

3 серии (приоритетите са подравнени искания);

бит 7 е нула.

Деактивирате / активирате избрани хардуерни прекъсвания.

Програма на asemblere да деактивирате хардуерни прекъсвания. Това маскирани прекъсване; други хардуерни прекъсвания, които се случват по време на някаква грешка (като деление на нула) не могат да бъдат маскирани.

Има две причини за забраната на хардуерни прекъсвания.

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

Във втория случай, маскирани само някои хардуерни прекъсвания. Това се прави, когато някои специфични прекъсване може да реагира на операции от критично значение за времето. Например, не може да бъде точно изчислена от времето, когато процедура / O позволят да бъде прекъснат от продължително прекъсване на диска.

Извършване Прекъсване зависи от прекъсване флаг (малко 9) в регистъра на флаг. Когато този бит е 0, а след това прекъсва са активирани, което позволява на маската. Когато е равно на 1, всички хардуерни прекъсвания са позволени. За да забраните прекъсва, настройка на този флаг на 1, като се използва CLI инструкция. За да изчистите този флаг и да прекъсне възстановяване - STI инструкция. Избягвайте блокирането прекъсва за дълъг период. време на деня прекъсване случва 18.2 пъти в секунда, а ако това прекъсване е повече от една заявка в момент, когато хардуерни прекъсвания са били забранени, излишъците исканията ще бъдат отхвърлени isistemnoe време ще бъде определен неправилно.

Устройството автоматично деактивира хардуер прекъсва софтуерни обаждане прекъсва и автоматично ги разреши, когато се върнете. Когато пишете вашите софтуерни прекъсвания, можете да стартирате програмата с инструкции STI, ако можете да се предотврати хардуерните прекъсва. Въпреки това, ако инструкцията за CLI не трябва да бъде STI, той ще спре машината като клавиатура за въвеждане ще бъдат замразени.

Следващият пример деактивира диск прекъсване. Не забравяйте да изчистите регистъра в края на програмата, или диск дейност, няма да могат след приключване на програмата.

; --- маскиране шестия малко прекъсване регистър маска

MOV AL, 01000000B; маскира малко 6

OUT 21Н, AL; изпращане на прекъсване регистър маска

OUT 21Н, AL; изчисти IMR в края на програмата

В края на кода за всеки от вашия хардуер прекъсва трябва да добавите следните два реда код:

Ако не хардуер прекъсне края на тези редове, чипът 8259 изчиства информацията регистри услуга, за да се прекъсне лечението е било позволено да се по-ниски нива, отколкото само обработени. Липсата на тези редове лесно може да доведе до разпадането на програмата, тъй като прекъсването на клавиатурата има вероятност да бъдат замразени или дори Ctrl-Alt-Del ще бъде безполезна. Тази добавка не е необходимо за прекъсване вектори, които са продължение на съществуващата прекъсването.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!