limbaje de asamblare

14

Click here to load reader

Upload: auroraistratie

Post on 20-Dec-2015

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Limbaje de Asamblare

UNIVERSITATEA DIN PETROŞANIFACULTATEA DE INGINERIE MECANICĂ ŞI

ELECTRICĂCURS POSTUNIVERSITAR INFORMATICĂ

REFERAT

LIMBAJE DE ASAMBLARE

Utilizarea funcţiilor sistem în limbaj de asamblare

Student: Gheorghe (Istratie) AuroraAn universitar 2011-2012

An I CPUI

1

Page 2: Limbaje de Asamblare

Utilizarea funcţiilor sistem în limbaj de asamblare

După cum s-a mai văzut, sistemul de operare este o colecţie de rutine (proceduri) utile în exploatarea eficientă a resurselor sistemului. Aceste rutine fac parte din două categorii mari: rutine BIOS şi rutine DOS. La scrierea sistemului de operare pentru microcalculatoarele compatibile IBM-PC s-a ales varianta ca o serie de rutine de sistem să poată fi folosite şi de către utilizator. Ele au fost scrise sub formă de proceduri apelabile prin sistemul specific pentru 8086 şi se numesc întreruperi soft.

Întreruperile BIOS sunt scrise pentru a facilita utilizatorului accesul la resursele sistemului (hardware) , iar întreruperile DOS sunt scrise în scopuri specifice sistemului de operare. Întreruperile DOS facilitează aşadar lucrul cu fişiere în sistemul de fişiere FAT, ne mai fiind nevoie ca utilizatorul să cunoască în amănunt specificaţiile acestui sistem de fişiere ca să poată crea un fişier.

Accesul din programele utilizator la funcţiile DOS şi BIOS se face prin întreruperi soft (instrucţiunea INT) .

Principalele grupe de funcţii care sunt puse la dispoziţia utilizatorului de către BIOS sunt: INT 10h - utilizarea terminalului video INT 11h - determinarea configuraţiei sistemului INT 12h - determinarea capacităţii memoriei RAM INT 13h - acces la HDD şi FDD INT 14h - utilizarea interfeţei seriale INT 15h - APM INT 16h - utilizarea tastaturii INT 17h - utilizarea interfeţei paralele INT 19h - încărcător sistem rezident pe disc INT 1Ah - controlul ceasului în timp real (RTC)

În cadrul unui apel de subrutină (prin INT) pot fi specificate mai multe funcţii.

Funcţia se specifică “prin convenţie“, punând numărul ei în registrul AH. Apelul unei anumite funcţii BIOS se face deci prin secvenţa generică:

MOV AH, nr_funcţie ; specificarea funcţiei INT nr_int ; specificarea întreruperiiDupă complexitatea funcţiei se pot preciza o serie de parametrii conform

specificaţiei de utilizare. Funcţiile DOS se referă în principal la fişiere, însă există o gamă largă de funcţii.

Toate funcţiile DOS sunt apelate prin INT 21h şi specificarea funcţiei dorite (eventual şi parametrii) în registrul AH.

Vom studia pe rând în continuare fiecare întrerupere BIOS :

INT 10h

Această întrerupere facilitează utilizarea terminalului video. În cadrul întreruperi 10h sunt multe subfuncţii care permit afişarea caracterelor, precum şi pentru utilizarea

2

Page 3: Limbaje de Asamblare

modurilor grafice. Pentru modurile grafice cu rezoluţii mai mari nu este recomandabilă utilizarea acestei întreruperi pentru că este lentă; se recomandă scrierea directă în memoria video. Să luăm ca exemplu afişarea unui caracter pe ecran: apelarea întreruperii 10h implică execuţia unui cod destul de mare (interpretarea parametrilor transmişi în regiştri, stabilirea subfuncţiei apelată etc.) , pe când pentru scrierea directă în memoria video este necesară o singură instrucţiune de tip MOV (eventual două pentru stabilirea atributelor caracterului) .

Totuşi, această întrerupere este foarte practică pentru programele care nu afişează pe ecran cantităţi mari de informaţie la un moment dat. Folosind această întrerupere programatorul nu mai trebuie să calculeze adresele memoriei video în care să scrie fiecare caracter.

(AH) Funcţia realizată Parametrii intrare Parametrii ieşire00h Selecţia modului de

lucru a terminalului grafic

(AL) =0 alfanumeric40 col. x25 lin. a/n =1 alfanumeric40 col. x25 lin. Col =2 alfanumeric80 col. x25lin. a/n =3 alfanumeric80 col. x25lin. col. =4 grafic320 colx200 lin col. =5 grafic320 colx200 lin a/n =6 grafic640 colx200 lin a/n

01h Selecţia formei şi a dimensiunii cursorului

(CH) biţii 0-4 lin de început a curs (CH) biţii 5-7=0 (CL) biţii 0-4 lin de sfârşit a curs (CL) biţii 5-7=0

02h Poziţionarea cursorului pe ecran

(DH, DL) lin. , col. (0, 0) – colţ sus stânga (BH) – nr. pagină =0 pt. mod grafic

03h Citire coordonate cursor

(BH) – nr. Pagină =0 pt mod grafic

(DH, DL) lin. , col. (CH, CL) forma

04h Citire poziţie indicator optic

(AH) =0 light pen inactiv =1 light pen activ (DH, DL) lin. , col. cursor

3

Page 4: Limbaje de Asamblare

(CH) linie pixel (0-199) (BX) col pixel (0-319636)

05h Selecţie pagină ecran activă

(AL) – nr. pagină0-7 pt mod 0 şi 10-3 pt mod 2 şi 3

06h Execuţie operaţie “scroll up”

(AL) – nr. de linii (AL) =0 ştergere fereastră (CH, CL) – lin. , col. colţului stânga sus (DH, DL) – lin. , col. colţului dreapta jos (BH) – atributul unei linii albe

07h Execuţia operaţiei “scroll down”

(AL) – nr. de linii (AL) =0 ştergere fereastră (CH, CL) – lin. , col. colţului stânga sus (DH, DL) – lin. , col. colţului dreapta jos (BH) – atributul unei linii albe

08h Citire caracter de pe ecran şi determinarea atributului sau. (se citeşte caracterul din poziţia curentă a cursorului)

(BH) – nr. pagină referită (numai pentru mod alfanumeric)

(AL) – caracterul citit (AH) – atributul caracterului

09h Afişarea caracterului pe ecran (în poziţia curentă a cursorului)

(BH) – nr. pagină referită (numai pt mod alfanumeric) (BL) – atributul caracterului (în mod alfanumeric)

- culoarea (în mod grafic)

(CX) – nr. caractere de afişat (AL) – caracterul

4

Page 5: Limbaje de Asamblare

0Ah Înlocuire caractere pe ecran cu păstrarea caracteristicilor de culoare

(BH) – nr. pagină referinţă (CX) – nr. caractere de afişat (AL) – caracterul

0Bh Fixarea caracteristicii de culoare (numai pt modul grafic 320x200 pixeli)

(BH) – index paletă (conf doc IBM-PC) (BL) – valoarea cul. În paletă

0Ch Afişarea unui punct pe ecran (pt modul grafic)

(DX) – nr. liniei (CX) – nr. coloanei (AL) – valoarea culorii (0, 1, 2, 3)

0Dh Citire culoare punct de pe ecran (pt modul grafic)

(DX) – nr. liniei (CX) – nr. coloanei

(AL) – culoarea citită

0Eh Afişare caracter pe ecran cu actualizarea poziţiei cursorului

(AL) – caracterul de afişat (BL) – culoare fond (pt mod grafic) (BH) – pagina (pt mod alfanumeric)

0Fh Citire caracteristici mod de lucru curent

(AL) – modul curent (AH) – nr coloane caracter (BH) – nr paginii

INT 11h

Întreruperea 11h ne returnează în AX un cuvânt (16 biţi) , în care se găsesc informaţii despre perifericele ataşate sistemului. Aceşti doi octeţi mai pot fi găsiţi începând cu adresa 0040:0010h. Conţinutul acestor octeţi este fixat de către BIOS după POST (PowerOnSelfTest) . După apelul întreruperii vom avea in AX informaţii despre: hard disk, coprocesorul matematic, RAM, DMA, porturi seriale, porturi paralele, etc. Formatul cuvântului returnat de INT 11h, se poate studia în orice documentaţie.

INT 12h

Întreruperea 12h pune în AX cantitatea memoriei RAM, exprimată în kilobytes. La calculatoarele moderne de obicei returnează 0280h (640) , ceea ce reprezintă memoria de bază. Observăm deci ca această întrerupere nu returnează şi memoria extinsă. Valoarea returnată în AX de către această întrerupere se găseşte şi la adresa 0040:0013h.

5

Page 6: Limbaje de Asamblare

INT 13h

Accesul direct la HDD şi la FDD este asigurat de această întrerupere. INT 13h permite citirea şi scrierea sectoarelor pe disc în mod direct, fără a ţine cont de sistemul de fişiere existent pe disc. De aceea nu este recomandată folosirea acestei întreruperi pentru lucrul cu fişiere, fiind preferabile funcţiile DOS pentru aceste operaţii. Există însă situaţii când utilizarea acestei întreruperi este singura alternativă: citirea unui disc pe care se află alt sistem de fişiere decât FAT.

Cea mai importantă diferenţă între accesul la discheta şi accesul la hard disk, pentru citirea mai multor sectoare, este că la hard disk se incrementează automat capul / cilindrul curent, în mod automat. INT 14h

Această întrerupere facilitează accesul la interfaţa serială a sistemului. Sunt disponibile aici patru funcţii : AH Funcţia 00h iniţializare port ( 4 porturi sunt suportate) 01h trimite un caracter 02h citeşte un caracter 03h verifică starea portului INT 15h

Controlul perifericelor din punct de vedere al stării lor (pornit/oprit) se face prin această întrerupere. De exemplu motorul de la unitatea de dischetă nu este necesar să funcţioneze tot timpul, ci doar în momentul în care discheta este accesată; atât pentru economie de curent la calculatoarele portabile care au ca sursă o baterie, cât şi din perspectiva uzurii care ar apărea inutil.

Această întrerupere este specifică calculatoarelor de clasă AT.

INT 16h

Întreruperea 16h este folosită atât pentru a citi caractere de la tastatură, cât şi pentru a afla starea momentană a tastaturii (Caps Lock, Ctrl, Shift etc. ) . Citirea unui caracter de la tastatură se face cu funcţia 00h (în AH) , caracterul citit fiind returnat în AL.

INT 17h

Accesul la porturile paralele ale sistemului este realizat prin această întrerupere. Avem aici trei funcţii disponibile : AH funcţia 00h trimite un caracter

6

Page 7: Limbaje de Asamblare

01h setare port 02h verificare stare port

Pentru comunicarea bidirecţională prin portul paralel BIOS-ul nu oferă funcţii, deşi modul de lucru bidirecţional este suportat de către echipamentul hardware încă din 1987. Lucrul bidirecţional se va face prin porturi. Adresa portului LPT1 este de obicei 378h pentru octetul de date şi 379h pentru octetul de stare. INT 19h

După POST, procesorul execută codul acestei întreruperi, încercând să citească de pe dischetă sau de pe hard disk un cod numit bootstrap. Astfel, această întrerupere încarcă în memorie primul sector de pe dischetă sau hard disk la adresa 0000:7C00h şi face un JMP spre această adresă; în felul acesta controlul este oferit codului citit (bootstrap) . Execuţia acestui cod determină care partiţie este activa şi apoi încarcă în memorie şi execută sectorul de boot de pe acea partiţie. Datorită acestui procedeu este posibil să avem pe un singur hard disk mai multe sisteme de operare, la pornirea sistemului având posibilitatea să îl alegem pe cel preferat. INT 1Ah

Această întrerupere oferă acces la ceasul sistemului. Permite atât citirea orei sistemului, cât şi fixarea ei.

AH funcţia 00h citeşte ora sistemului

01h fixează ora sistemului Ora sistemului este reprezentată sub formă de unităţi; o unitate având 55ms.

Numărul de unităţi este deci incrementat la fiecare 55ms sec când sistemul a fost pornit. La calculatoarele din clasa AT, BIOS-ul oferă prin această întrerupere accesul la

ceasul în timp real (RTC) al sistemului. Ceasul în timp real funcţionează şi în timpul în care calculatorul nu este pornit datorită bateriei de pe placa de bază. El foloseşte o zonă de memorie din CMOS pentru a stoca ora sistemului. Această zonă de memorie este rescrisă la fiecare 55ms fără a fi folosit procesorul pentru această operaţie.

Funcţiile DOS se referă în principal la fişiere însă există o gamă largă de funcţii. Toate funcţiile DOS sunt apelate prin INT 21h. şi specificarea funcţiei dorite (eventual şi parametrii) în registrul AH.

Funcţiile DOS – INT21h, funcţii pentru tastatură şi ecran.

(AH) Funcţia realizată Parametrii de intrare Parametrii de ieşire00h Termină execuţia

unui program01h Citeşte un caracter

de la tastatură şi-l (AL) – caracterul introdus

7

Page 8: Limbaje de Asamblare

trimite în ecou la ecran. Dacă se apasă CTRL-BREAK se execută INT 23h

02h Afişare caracter la ecran. Dacă se apasă CTRL-BREAK se execută INT 23h

(DL) – caracterul

05h Scrie caracter la imprimantă

(DL) – caracterul

06h Citire/scriere directă- de la

tastatură- la ecran

(DL) = 0FFh (DL) – caracterul

(AL) – caracterul (AL) = 0 (nici un caracter)

07h Citirea de la tastatură a unui caracter fără ecou şi fără interpretare

(AL) – caracterul

08h Citire caracter de la tastatură fără ecou. Dacă se apasă CTRL-BREAK se execută INT 23h

(AL) – caracterul

09h Afişarea unui şir din memorie care se termină cu $ (24h)

(DS:DX) – adresa şir

0Ah Citire de la tastatură şi introducerea într-o zonă de memorie tampon a unui şir de caractere, până la apăsarea tastei <CR>

(DS:DX) – adresa zonei tampon

0Bh Determină starea tastaturii. Dacă se apasă CTRL-BREAK se execută INT 23h

(AL) =Off este disponibil un caracter (AL) =0 nici un caracter

0Ch Iniţializează bufferul tastaturii, după care apelează o funcţie. Sistemul aşteaptă după un caracter.

(AL) – funcţia cerută (01h, 06h, 07h, 08h, 0Ah) .

8

Page 9: Limbaje de Asamblare

În completare se fac următoarele observaţii şi recomandări cu privire la utilizarea acestor funcţii:

1. Funcţiile BIOS păstrează registrele CS, SS, DS, ES, BX, CX, DX, celelalte se distrug , deci utilizatorul trebuie să le salveze şi apoi să le refacă.

2. Se recomandă ca înainte de a modifica regimul de funcţionare al ecranului să fie salvat atributul curent şi la sfârşit să fie refăcut.

3. Pentru ştergere ecranului (ferestrei) se recomandă utilizarea funcţiei 06h cu un număr de deplasări 0 (în AL) şi nu 25 !

4. Funcţia 09h (scrie caracter şi atribut) poate fi apelată şi în mod grafic. Desenul primelor 128 de caractere ASCII se afla în ROM de la adresa 0F000:0FA6Eh, restul de 128 de caractere se pun în RAM la adresa de început (sub formă segment: offset) care se pune în vectorul de întrerupere 01Fh. Desenul unui caracter este format din 8 octeţi. Exemplul următor prezintă silueta unui om alergând astfel:

valoare binara valoare hexa0 0 0 1 1 0 0 0 18h0 0 0 1 0 0 0 0 10h0 0 1 1 1 0 0 1 39h0 1 0 1 0 1 1 0 56h1 0 0 1 0 0 0 0 90h0 0 1 1 0 0 0 0 30h0 1 0 0 1 0 0 0 48h1 0 0 1 0 0 0 0 90h

5. Afişarea se poate pregăti pe o pagina care nu este activă. Prin activarea acestei pagini se creează impresia unei afişări instantanee şi se pot realiza efecte de animaţie.

6. La funcţia 0Eh (scrie în mod teletype) atributul se “moşteneşte” de la caracterul precedent. Acest procedeu este însă lent. Mult mai rapid se poate realiza cu o instrucţiune MOVS repetitiv !

7. Pentru programe rapide ( sau rezoluţii mari) se preferă scrierea directă în memoria video.

8. Funcţiile DOS oferă mai puţine facilităţi de lucru cu ecranul decât funcţiile BIOS.

9