Programozás | Programozás-elmélet » Megszakítások és kivételek

Alapadatok

Év, oldalszám:2010, 26 oldal

Nyelv:magyar

Letöltések száma:40

Feltöltve:2017. október 15.

Méret:724 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

Megszakítások és kivételek Megszakítások • Megszakítás – a számítási rendszernek küldött jelzés, mely valamilyen esemény felléptéről értesíti. • Egy megszakítás felléptekor a rendszer: – megszakítja az aktív program futását – végrehajtja az eseményt kezelő handlert – folytatja a megszakított programot. Megszakítások és kivételek • hard megszakítás – aszinkron – egy külső esemény váltja ki: billentyűzet, órajel, ki/bemeneti művelet befejezése, stb. • kivétel – szinkron – egy belső esemény váltja ki: – trap – a program a megszakítást kiváltó utasítás utáni utasítással folytatódik – trap, rendszerhívások, stb. – fault – a program a megszakítást kiváltó utasítással folytatódik, vagy abortál – page fault, 0-val való osztás, stb. – abort – a program hibajelzéssel befejeződik – hard hibák, stb. Intel processzorok • 256 lehetséges megszakítás és kivétel –

0-1F a processzornak fenntartott – 20-0FF felhasználó által használható • az operációs rendszer definiálja a kivételek nagy részét • a szabadon maradt megszakításokat a felhasználó definiálhatja Megszakítások kezelése (1) • minden fellépő eseménynek egy eljárás felel meg, amely feldolgozza az adott eseményt • a megszakítás rutinok far címe: – védett üzemmódban a IDT deszkriptortáblában – normál üzemmódban a megszakításvektorban (0000 címtől) • az operációs rendszer különböző verzióiban a rutinok címe változik Megszakítások kezelése (2) • egy megszakítás rutin feladatai: – – – – – a program állapotának kimentése újabb megszakítások letiltása a megszakítás kiszolgálása új megszakítások engedélyezése a megszakított program folytatása • rendszerhívások esetén nem szükséges minden regiszter tartalmának a visszaállítása (paraméterek visszaadása) • kivételek esetén

gyakran nem folytatódik a megszakított program DOS megszakítások • Microsoft nem tartja be az Intel előírásokat • a processzornak fenntartottmegszakításokat más célokra használja • védett üzemmódban ugyanaz a megszakítás egész más funkciót lát el, mint normál üzemmódban Hard megszakítások és kivételek • mikroprocesszor által kiváltott: – INT 00h – 0-val való osztás – INT 01h – trace – minden utasítás után, ha TF=1 – INT 04h – aritmetikai túlcsordulás • memória – INT 02h – paritáshiba (RAM) – nem maszkolható • óra – INT 08h – 18,2-szer másodpercenként • más felszerelések – INT 09h – billentyűzet, minden billentyű lenyomásakor illetve elengedéskor, a billentyű kódja kerül a pufferbe – INT 05h – print screen BIOS rutinok • egyszerű eljárások – – – – INT 11h – konfiguráció lekérdezése INT 12h – memóriaméret lekérdezése INT 14h – soros vonalak

kezelése INT 1Bh – <Ctrl><Break> billentyű kezelése • komplex BIOS funkciók – egy megszakítás valamilyen hard eszközt kezel – több funkció, az AH regiszter választja ki – paraméterek a regiszterekben BIOS rutinok – INT 10h • INT 10h – képernyő kezelése – AH=00h – megjelenítési mód beállítása • AL – mód – AH=02h – kurzor pozíciójának beállítása • DH – sor; DL – oszlop; BH – lap száma – AH=03h – kurzor pozíciójának lekérdezése • BH – lap száma – AH=05h – aktív lap kiválasztása • AL – lap száma – AH=08h – kurzor pozíciójában levő karakter lekérdezése • BH – lap száma, AH – kar. kódja, AL - attribútuma – AH=09h – karakter írása attribútum információkkal • BH – lap sorszáma, háttérszín, CX – ismétlések, AL – kar kód, BL – attribútum, előtér szín BIOS rutinok – INT 13h • INT 13h – lemezegységek kezelése – bemenő

paraméterek • • • • • • AL – átviendő szektorok száma ES:BX – a memóriaterület címe CL – kezdő szektor száma, sáv számának felső két bitje CH – sáv számának alsó nyolc bitje DL – lemezegység kódja DH – fej száma – kimenő paraméterek • AH – hibakód • CF – hiba esetén 1 • állítja a 0000:441h címen levő hibakódot BIOS rutinok – INT 13h • fontosabb funkciók: – – – – – – AH=02h – szektorok olvasása AH=03h – szektorok írása AH=04h – szektorok ellenőrzése AH=05h – sáv formázása AH=08h – meghajtó paramétereinek lekérdezése AH=15h – lemezmeghajtó típusának lekérdezése Más BIOS rutinok • • • • INT 16h – billentyűzet kezelése INT 19h – rendszer újraindítása INT 1Ah – időzítő egység kezelése INT 17h – párhuzamos illesztők kezelése BIOS adatszerkezetek címei • adatszerkezetek címei – INT 1Dh – video paraméterek táblázatának címe

– INT 1Eh – floppy egységek paraméterei táblázatának címe – INT 41h – első merevlemez paramétertábla címe – INT 43h – EGA, VGA grafikuskarakter tábla címe – INT 46h – második merevlemez paramétertábla címe • a BIOS rutinok adatok tárolására felhasználják a 0000:0400 – 0000:04FF memóriaterületet is DOS rutinok • logikai szintű periféria kezelés • a különböző DOS megszakítások helyett a 21h megszakítás funkcióit használjuk INT 21h – karakteres ki/bemenet • AH=01h – karakter olvasása megjelenítéssel – AL – beolvasott karakter • AH=02h – kiírás a képernyőre – DL – kiírandó karakter • AH=05h – kiírás a nyomtatóra – DL – kiírandó karakter • • • • AH=06h – közvetlen konzol ki-bemenet AH=07h – közvetlen konzol olvasás (echo nélkül) AH=08h – billentyűzet olvasás echo nélkül AH=09h – karakterlánc kiírása – DS:DX – karakterlánc címe, utolsó karakter

„$” • AH=0Ah – karakterlánc olvasása – DS:DX – input puffer címe, első byte – max. hossz, 2 byte – tenylegesen beolvasott byte-ok száma, Enter-ig olvas INT 21h – memória kezelés • AH=48h – memória blokk lefoglalása • AH=49h – memória blokk felszabadítása • AH=4Ah – memória blokk méretének változtatása INT 21h – folyamatok vezérlése • AH=4Bh – program betöltése, indítása • AH=4Ch – program befejezése kilépési kóddal (exit code) – AL – kilépési kód • AH=31h – rezidens befejezés – AL – kilépési kód, – DX a program mérete paragrafusokban • AH=4Dh – előző program kilépési kódjának lekérdezése – AL – folyamat kilépési kódja, – AH – folyamat befejezésének oka INT 21h – lemezkezelés • AH=19h – aktuális meghajtó lekérdezése – AL – 00h-A; 01h-B; stb. • AH=1Ah – DTA (Data Transfer Area) címének beállítása • AH=1Bh – aktív lemezegység

paramétereinek lekérdezése INT 21h – directorykezelés • AH=39h – alkatalógus létrehozása – DS:DX – alkatalógus nevének címe 00h-val lezárva – CF – 1, hiba; AX – hibakód • AH=3Ah – alkatalógus törlése • AH=3Bh –váltása (change dir.) • AH=4Fh – aktív katalógus lekérdezése – DL – lemezegység száma – DS:SI – 64 byte-os puffer címe, ahol megkapjuk az aktív katalógus nevét INT 21h – állománykezelés (1) • AH=3Ch – állomány létrehozása file-számmal • AH=3Dh – állomány megnyitása file-számmal – AL – megnyitási mód, DS:DX – 00h-val lezárt string címe (file neve) – CF=1 – hiba, AX – fileszám vagy hibakód • AH=3Eh – állomány bezárása file-számmal – BX – fileszám – CF=1 – hiba, AX – hibakód • AH=3Fh – állomány olvasása file-számmal • AH=40h – állomány írása file-számmal INT 21h – állománykezelés (2) • AH=41h – állomány törlése file

névvel – DS:DX – 00h-val lezárt string címe (file neve) • AH=4Eh – első file keresése • AH=4Fh – következő file keresése • AH=56h –file átnevezése, mozgatása – DS:DX – 00h-val lezárt string címe (file régi neve) – ES:DI – 00h-val lezárt string címe (file új neve) INT 21h – más funkciók • • • • • • AH=30h – DOS verziószámának lekérdezése AH=2Ah – rendszerdátum lekérdezése AH=2Bh – rendszerdátum beállítása AH=2Ch – rendszeridő lekérdezése AH=2Dh – rendszeridő beállítása AH=35h – megszakításvektor lekérdezése – AL – megszakítás száma – ES:BX – megszakítás far címe • AH=25h – megszakításvektor beállítása – AL – megszakítás száma – DS:DX – új eljárás far címe Megszakítás eltérítése (1) • egy megszakítást eltérítő rezidens program szerkezete: start: JMP initresz rezidens rész adatzóna indul: rezidens rész kód initresz: inicializáló

rész kód és adatok Megszakítás eltérítése (2) • Az inicializáló részt úgy hajtjuk végre,mint egy megszokott programot • Feladatai: – ellenőrzi, hogy a rezidens rész nincs-e már a memóriában – beolvassa és elmenti a megszakítás eredeti kezdőcímét – módosítja a megszakításvektort (beírja a megszakítást kezelő új eljárás kezdőcímét) – inicializálja a rezidens rész adatzónáját, ha szükséges – befejezi működését rezidens kilépéssel (DX regiszterben a rezidens eljárás hossza, a program elejétől az inicializáló részig paragrafusokban megadva) Megszakítás eltérítése (3) • ha a megszakítás eltérítése csak egy adott programban szükséges, nem installáljuk rezidensként az adott eljárást • a megszakítást kezelő eljárás a program szerves része • a program befejezése előtt visszaállítjuk az eredeti megszakítás címét