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
egyszerű eljárások BIOS rutinok 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