Documente Academic
Documente Profesional
Documente Cultură
LABORATOR NR. 6
6.1 NTRERUPERI 8086. DEFINIIE
ntreruperea reprezint prsirea secvenei naturale de instruciuni i predarea controlului unei rutine de tratare a ntreruperii.
Programare n Limbaj de Asamblare - Laborator nr. 6 respectiv (tipul 0...255). La adresa mai mare se afl adresa de baz a segmentului, iar la adresa mai mic offset-ul. Deci, pentru gsirea locaiei ce conine adresa rutinei, tipul furnizat n instruciune se nmulete cu 4.
Se identific adresa rutinei de tratare n funcie de tipul ntreruperii, astfel: ntreruperi hard adresa este furnizat chiar de periferic; ntreruperi excepionale adresa este generat de procesor; ntreruperi vectorizate adresa este dat chiar n codul instruciunii i reprezint un index de cutare n tabela vectorilor de ntrerupere (adresa = tip * 4);
Adresa astfel obinut se ncarc n regitrii CS i IP i, printr-un CALL FAR (intersegment), se d controlul rutinei. Ieirea din rutin se realizeaz prin refacerea strii (ne referim la alte registre salvate pe stiv, eventual, n rutina utilizator) cu instruciuni de tip POP i apoi IRET (care rencarc vechile valori CS i IP i falg-urile), care aduc execuia n program dup locul n care a aprut ntreruperea. Not: n cadrul rutinei utilizator de tratare a ntreruperii se pot activa ntreruperile cu STI. n caz contrar, se pot pierde cererile de ntreruperi mascabile venite pe linia INTR.
Programare n Limbaj de Asamblare - Laborator nr. 6 IRET IP <SP <CS <SP <Flags SP <-
Instruciuni de lucru cu memoria (adresare absolut) ;N = numr ntrerupere utilizator XOR AX, AX MOV ES, AX ;tabela este la 0:0 MOV ES:[N * 4 + 2], SEG RUTINA MOV ES:[N * 4], OFFSET RUTINA ... RUTINA PROC FAR ... IRET RUTINA ENDP
2. Instruciuni cu memoria (adresare absolut) se salveaz ntr-o variabil tip dublu cuvnt (DD)
.DATA OLD_INT DD ? ; .CODE ; XOR AX, AX MOV ES, AX MOV AX, ES:[N * 4 + 2] MOV WORD PTR [OLD_INT + 2], AX MOV AX, ES:[N * 4] MOV WORD PTR [OLD_INT], AX Legarea noii ntreruperi Analog.
Programare n Limbaj de Asamblare - Laborator nr. 6 programe de test pentru toate resursele din configuraia standard a sistemului; un program ncrctor al sistemului de operare de pe disc; proceduri pentru tratarea cererilor de ntrerupere externe provenite de la: o ceasul de timp real (tip 8); o tastatura (tip 9); o disk flexibil (tip 14); o procedurile pentru comanda i controlul execuiei operaiilor de intrare/ieire (I/O) la nivel fizic pentru toate echipamentele periferice din configuraia standard.
Execuia programelor de test se face la pornirea sistemului i implic: testarea microprocesorului; testarea i programarea unor circuite de I/O (DMA Direct Memory Access, timer); determinarea configuraiei sistemului; testarea memoriei RAM; testarea sistemului de ntreruperi i iniializarea tabelei vectorilor de ntrerupere; identificarea i realizarea legturilor cu PROM-urile externe plcii de baz, incluse n interfeele pentru diferitele echipamente periferice. Dac execuia programelor de test se ncheie fr erori, atunci se va executa programul ncrctor pentru sistemul de operare rezident pe disc, dup care se va da controlul acestuia. Accesul din programe utilizator la procedurile coninute n BIOS se face prin ntreruperi software. BIOS-ul reprezint de fapt o interfa ntre sistemul de operare (sau programul utilizator) i hardware-ul calculatorului. BIOS-ul se afl la un nivel mai "sczut" (low level) dect nucleul DOS (adic mai apropiat de hardware) i de aceea rutinele DOS se folosesc de funciile BIOS pentru a-i face "job-ul". Ca i funciile DOS, nainte de apel, funciile BIOS cer ncrcarea regitrilor generali cu parametrii afereni funciei. Principalele puncte de intrare puse la dispoziie de BIOS sunt: nivele de ntrerupere rezervate (ntreruperile 0, 1, 2, 3, 4 vezi mai sus) nivele asociate ntreruperilor hard: o INT 08H timer, ntreruperea de timp real, lansat la fiecare 55 ms, actualizeaz ora i data; o INT 09H ntreruperea de tastatur; o INT 0AH rezervat; o INT 0BH ntrerupere de reea; o INT 0CH - interfa serial; o INT 0DH rezervat; o INT 0EH disk; o INT 0FH rezervat; servicii BIOS: o INT 10H servicii video (pentru utilizarea terminalului grafic); o INT 11H determinarea configuraiei sistemului; o INT 12H determinarea capacitii memoriei RAM; o INT 13H disk; o INT 14H interfa serial;
Programare n Limbaj de Asamblare - Laborator nr. 6 INT 15H funcii specifice AT; INT 16H tastatur; INT 17H imprimant; INT 19H intrare pentru apelul ncrctorului sistemului de operare rezident pe disc (BOOTSTRAP); o INT 1AH ceasul de timp real. o o o o ntreruperile BIOS utilizeaz informaii din zona de date BIOS, aflat n zona 0000:0400 0000:5000 (echivalent, ca adres fizic, cu 0040:0000 - 0050:0000). Exemplu: Adresa 0:0400 0:0408 0:0410 0:0413 0:0449 Numr octet 2 2 2 2 1 Coninut Adresa de baz pentru interfaa serial COM1 Adresa de baz pentru interfaa paralel LPT1 Lista echipamentelor hardware instalate (active) poate fi obinut i prin INT 11H Memoria existent n KO, similar INT 21H Modul video activ
Not: Utilitarul TECH HELP ofer informaii suplimentare despre BIOS (ntreruperi, zon de date BIOS).
6.2
TEM
1. S se realizeze o nou instruciune prin intermediul unei ntreruperi utilizator (de exemplu INT 60H) care s permit compararea a dou variabile de tip DD. S se corup i ntreruperea 1 (pas cu pas) i s se afieze un mesaj care s arate trecerea prin rutina de tratare aferent. Indicaii: se definesc cele 2 variabile n segmentul de date, ca i mesajele aferente, de altfel; se va lega noua ntrerupere n tabel; se va utiliza instruciunea de comparare pe iruri de caractere; se va afia n programul principal un mesaj privind rezultatul comparrii (mai mic, egal, mai mare), n funcie de biii CF i ZF din registrul de stare, folosind funcia DOS 9H pentru generare INT 1 se va seta bitul TF din registrul de flag-uri (bitul 8), iar n rutina de tratare se va pune din nou pe 0; 2. S se scrie un program care, la apsarea tastei corespunztoare iniialei unei note muzicale, va determina generarea notei respective (se va folosi programul SOUND.ASM). 3. S se scrie un program care s afieze data i ora curent, folosind funciile DOS 2AH i 2CH. Programul ateapt apsarea unei taste. De asemenea, programul
Programare n Limbaj de Asamblare - Laborator nr. 6 va citi poziia cursorului nainte de afiarea orei curente, astfel nct apsarea unei taste diferite de ("Q", "q") va determina afiarea noii ore n aceeai poziie. Indicaii: pentru afiarea n zecimal a octeilor citii cu funciile DOS 2AH i 2CH se va apela rutina HEXZEC.ASM din fiierul HZEC.ASM. Punctul de intrare n rutin se va declara cu directiva EXTRN, astfel: EXTRN HEXZEC:NEAR Rutina convertete cuvntul din AX i-l afieaz pe ecran. pentru citirea tastei se va folosi INT 16H, serviciul 0; pentru salvarea, respectiv setarea poziiei cursorului, se va folosi INT 10H, serviciile 3, respectiv 2; se vor afia mesajele aferente cu funcia DOS 9H; se vor prevedea separatori pentru la afiarea datei i orei curente cu funcia DOS 2H.
4. S se scrie un program care citete configuraia sistemului, direct sub TD i s se interpreteze rezultatul. Indicaii: se va lansa help-ul rezident (HE1); se va selecta "ROM-BIOS functions" i apoi INT 11H (gsii locaia de memorie analoag din zona de date BIOS). 5. S se scrie un program care s afieze un ir de caractere pe ecran la o anumit poziie a cursorului, pe care o vei specifica interactiv. Indicaii: pentru setare atribut "Screen Attributes"; "ROM-BIOS Functions" INT 10H VIDEO SERVICES DETAILS; serviciul 0 pentru tergere ecran i stabilire mod lucru (text); serviciul 13H pentru afiare ir la poziia cursorului.
6. S se scrie un program care s citeasc de la tastatur un ir ASCII, s fac apoi conversia literelor mici la majuscule, afind la final rezultatul acestei conversii. Se va folosi INT 16H pentru citirea irului.
6.3
CUPRINS
Laborator nr. 6 .................................................................................................................. 1 6.1 ntreruperi 8086. Definiie................................................................................ 1 6.1.1 ntreruperi hard ......................................................................................... 1 6.1.2 ntreruperi interne ..................................................................................... 1 6.1.3 Tratarea ntreruperilor............................................................................... 2 6.1.4 Concluzii la ntreruperi vectorizate (INT n) ............................................. 2 6.1.5 Modaliti de ncrcare a adresei rutinei de tratare n tabela vectorilor de ntrerupere................................................................................................................. 3 6.1.6 Redirectarea unei ntreruperi BIOS .......................................................... 3 6.1.7 ntreruperi DOS ........................................................................................ 4 6.1.8 ntreruperi BIOS ....................................................................................... 4 6.2 TEM ............................................................................................................... 6 6.3 Cuprins ............................................................................................................. 8