Sunteți pe pagina 1din 8

Programare n Limbaj de Asamblare - Laborator nr.

LABORATOR NR. 6
6.1 NTRERUPERI 8086. DEFINIIE

ntreruperea reprezint prsirea secvenei naturale de instruciuni i predarea controlului unei rutine de tratare a ntreruperii.

6.1.1 ntreruperi hard


Caracteristici: permit tratarea evenimentelor generate de perifericele unui sistem de calcul (tastatur, mouse, ceas de timp real, disk etc); ntreruperi mascabile sunt accesate funcie de starea bitului IF din registrul de stare (flag-uri), care poate fi setat/resetat cu instruciuni speciale (STI/CLI) i vin pe linia INTR a procesorului; ntrerupere nemascabil (la pinul NMI) care nu depinde de bitul IF i se utilizeaz la tratarea unor evenimente critice (de exemplu cderea tensiunii de alimentare) (la 8086, INT 2 trateaz ntreruperea nemascabil).

6.1.2 ntreruperi interne


Generate de procesor Sunt generate de procesor n cazul unor situaii deosebite i exist mai multe nivele de ntrerupere rezervate: INT 00H depire la mprire (mprire la 0 divide overflow); INT 01H rulare pas cu pas (single step), lansat dup fiecare instruciune cnd T = 1; INT 02H tip asociat ntreruperii hard nemascabile; INT 03H breakpoint; INT 04H depire superioar sau inferioar (overflow), lansat de instruciunea INTO dac OF = 1. ntreruperi soft Sunt generate de utilizator (IF = 1 ca i la I). Astfel, exist instruciunea INT n, care genereaz o ntrerupere imediat dup execuia sa. Tipul ntreruperii este codificat n codul instruciunii i informeaz procesorul ce rutin s execute (vezi definiia). Astfel, asocierea ntre tipul ntreruperii i rutina aferent se face prin tabela vectorilor de ntrerupere (de aceea ntreruperile interne la 8086 se mai numesc i ntreruperi vectorizate). Aceast tabel este iniializat la ncrcarea sistemului de operare de ctre BIOS n memorie ncepnd cu adresa 0:0, ocup 1 KO, avnd 256 de intrri (n din instruciune ocup 1 octet). Fiecare cuvnt este un pointer pe dublucuvnt i conine adresa rutinei de tratare a ntreruperii de tipul

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.

6.1.3 Tratarea ntreruperilor


Procesorul salveaz n stiv flag-urile i adresa instruciunii urmtoare (segment + offset, n aceast ordine), iar indicatorii IF i TF sunt resetai (pentru a nu fi acceptate alte ntreruperi). Structura stivei:

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.

6.1.4 Concluzii la ntreruperi vectorizate (INT n)


INT n SP <- SP 2 (SP) <- Flags SP <- SP - 2 (SP) <- CS SP <- SP - 2 (SP) <- IP IP <- [4 * N, 4 * N + 1] CS <- [4 * N + 2, 4 * N + 3]

Programare n Limbaj de Asamblare - Laborator nr. 6 IRET IP <SP <CS <SP <Flags SP <-

(SP) SP + 2 (SP) SP + 2 <- (SP) SP + 2

6.1.5 Modaliti de ncrcare a adresei rutinei de tratare n tabela vectorilor de ntrerupere


Funcia DOS 25H INPUT: AL = Numr ntrerupere utilizator AH = 25H DS = Adresa segment rutin de tratare DX = Offset rutin de tratare

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

;RUTINA = nume rutin ;RUTINA = nume rutin

6.1.6 Redirectarea unei ntreruperi


n unele aplicaii apare necesar ca o anumit ntrerupere BIOS s fie tratat cu o rutin proprie, caz n care se parcurg urmtorii pai: Salvarea adresei vechii rutine Se realizeaz n dou moduri: 1. Funcia DOS 35H INPUT: OUTPUT: AL = Numr rutin AH = 35H (cod funcie) ES = Adresa segment rutin veche BX = Offset rutin veche

2. Instruciuni cu memoria (adresare absolut) se salveaz ntr-o variabil tip dublu cuvnt (DD)

Programare n Limbaj de Asamblare - Laborator nr. 6

.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.

6.1.7 ntreruperi DOS


Sistemul de operare MS-DOS pune la dispoziia programatorului o serie de funcii de baz pentru: efectuarea operaiilor de intrare/ieire; lucrul cu fiiere; gestiunea memoriei; controlul execuiei programelor etc. Aceste funcii pot fi accesate prin intermediul ntreruperii cu tipul 21H (numit i ntrerupere de sistem). Funcia solicitat i parametrii asociai acesteia sunt transmii prin intermediul regitrilor, rezultatul efecturii funciei (dac exist), fiind returnat n acelai mod. O descriere detaliat a tuturor funciilor existente este oferit de utilitarul TECH HELP. Exemplu: MOV AX, 4C00H ;funcia de revenire n sistem INT 21H ;apel funcie sistem MOV AH, 1 ;funcie citire caracter INT 21H ;apel funcie sistem ;AL = cod ASCII caracter citit MOV AH, 02H ;funcie afiare caracter MOV DL, 'a' ;caracterul de afiat INT 21H ;apel funcie sistem

6.1.8 ntreruperi BIOS


BIOS-ul (Basic Input Output System), rezident n PROM, conine urmtoarele elemente:

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.

Programare n Limbaj de Asamblare - Laborator nr. 6

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