Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  


AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

Functii sistem (INT 21h)

calculatoare

+ Font mai mare | - Font mai mic



Functii sistem (INT 21h)

1 Utilizarea intreruperilor software




Anumite actiuni standard pe care trebuie sa le execute un program pot fi realizate mai simplu folosind intreruperile software si apelul functiilor sistem, BIOS sau BDOS. Acestea sunt colectii de rutine de larga utilitate existente in sistemul de operare si in firmware-ul computerului si care pot fi apelate de orice program.

Cele mai utilizate rutine ale sistemului de operare sunt cele apelate prin intermediul intreruperii 21H. Aceasta se realizeaza cu instructiunea INT 21H, dupa ce in prealabil au fost incarcate unele registre cu parametrii specifici.

De exemplu, afisarea unui sir de caractere pe ecran se poate face ca in programul urmator:

Exemplul 1:

.radix 16

.model small

.stack 100h

.DATA

Sir1 db 'abcdefghij ABC$'

.code

start:

mov ax,seg Sir1 ;Adresa segmentului de date ;unde se afla sirul

mov ds,ax ;se incarca in DS

mov dx, offset sir1 ;Se va apela functia sistem 09 ;care necesita adresa efectiva ;a sirului in DX

mov ah,09 ;Codul functiei sistem in AH

int 21 ;Se cheama intreruperea pentru ;functii sistem

;Iesirea catre sistemul de operare

mov ah,4c ;se face cu functia 4C

;al carei cod se incarca in AH

int 21 ;Se cheama intreruperea pentru ;functii sistem

end start

Observatii:

- Sirul de caractere trebuie sa fie scris intre semne apostrof si, pentru functia 09, trebuie sa se termine cu caracterul $ (dupa cum se va arata mai jos).

- In locul instructiunii mov ax,seg Sir1 se putea folosi aici si instructiunea mov ax,@data. Daca insa erau mai multe siruri, in segmente diferite, era necesara instructiunea din exemplu.

2 Functii sistem de intrare si iesire

Functiile sistem sunt apelate prin executia intreruperii 21H, cu anumite valori in registre.

Dintre acestea, functiile de intrare de la tastatura sunt:

01H Intrare caracter de la keyboard.

06H Intrare/Iesire caracter de la keyboard/display.

07H Intrare caracter nefiltrat de la keyboard fara ecou.

08H Intare caracter de la keyboard fara ecou.

0AH Intrare de la keyboard in buffer.
3FH Intrare de la dispozitiv sau din fisier.

Functiile de iesire la display sunt:

02H Iesire caracter la display.
09H Iesire sir la display.
40H Scriere in dispozitiv de iesire sau fisier.

In afara de acestea mai exista si functii de lucru cu fisierele si cu discul, cu memoria, etc prezentate in Anexa 3.

O functie larg folosita este functia 4Ch care permite iesirea din program catre sistemul de operare.

01H FUNCTION- Citire caracter de la keyboard cu ecou (afisare automata pe ecran)

Registre:

AH = 01H

Iesire in registre:
AL = Caracterul citit

In caz ca este un caracter cu cod extins, in AL se va obtine 0 si va fi necesar sa fie apelata functia din nou pentru a se obtine codul extins.

Exemplul 2:

;Aici se va citi un caracter de la keyboard

MOV AH,01H; Functia de citire a unui caracter

INT 21 H

07H FUNCTION- Citire caracter nefiltrat de la keyboard fara ecou

Registre:

AH = 07H

Iesire in registre:
AL = Caracterul citit.

In caz ca este un caracter cu cod extins, in AL se va obtine 0 si va fi necesar sa fie apelata functia din nou pentru a se obtine codul extins.

Exemplul 3:

MOV AH,07H



INT 21 H

Observatie: Functia 07h nu testeaza caracterul, si nu sesizeaza de exemplu Ctrl+C, astfel ca la redirectarea spre un fisier nu este detectat caracterul de sfarsit de fisier, si se continua scrierea in fisierul imediat urmator. Pentru sesizarea Ctrl-C se poate folosi in loc functia 08h, care face filtrarea si este similara cu 07h in rest.

FUNCTION 0AH- Citire de la keyboard in buffer
Registre:
AH = 0AH.

DS:DX = Adresa zonei unde se vor memora caracterele si in care structura datelor va fi urmatoarea:

BYTE 0 = Numarul total de caractere care urmeaza sa fie citite;

BYTE 1 = Numarul de caractere citite pana la un moment dat.

De la BYTE 2 pana la [BYTE 0] + 2 = caracterele citite

Caracterele vor fi memorate incepand cu octetul al treilea al zonei specificate. Terminarea introducerii se face automat cand s-a citit un numar de caractere egal cu cel specificat in primul octet (moment in care difuzorul va genera un beep) sau cand se apasa tasta ENTER.


3FH FUNCTION Citire din dispozitiv sau fisier
Registre:
AH = 3FH;
BX = Numarul asignat dispozitivului;
CX = Numarul de octeti care trebuie citit;
DS:DX = Adresa zonei in care se va face memorarea.

Iesiri in registre:
CF = 0 nu au fost erori iar AX = numarul de octeti cititi;
CF = 1 daca au existat erori iar AX contine codul erorii.


02H FUNCTION - Afisare caracter
Registre:
AH = 02H;
DL = Codul hexa al caracterului de afisat.

Exemplul 4:

;Afiseaza caracterul '1'

MOV AH, 02

MOV DL,31h ; Caracterul '1' are codul ASCII 31H

INT 21h


09H FUNCTION Afisare sir de caractere
Registre:
AH = 09H;
DS:DX = Adresa de inceput a sirului de caractere.

Functia afiseaza caracterele unul cite unul pana intilneste caracterul $ care este interpretat ca sfarsit de sir.

In locul acestei functii se recomanda utilizarea functiei 40H.

40H FUNCTION Scriere in dispozitiv sau fisier
Registre:
AH = 40H;
BX = Numarul dispozitivului ( 1 pentru display);
CX = Numarul de octeti de scris;
DS:DX = Adresa de inceput a sirului de scris.

Iesiri in registre:
CF = 0 daca nu au fost erori;
AX = Numarul de octeti scrisi;
CF = 1 daca au aparut erori;
AX = codul de eroare.

4CH FUNCTION Iesire catre sistemul de operare
Registre:
AH = 4CH;

Iesiri in registre:
AL = codul de terminare;

Modul de lucru:

Se recomanda ca la programele urmatoare iesirea sa se faca cu functia 4Ch, ca in exemplul 1. Rularea se poate face direct, in care caz revenirea in Windows se face cu Alt+Tab sau cu tasta 'Windows' (cea dintre Ctrl si Alt).

Se poate face rularea si prin TD, eventual pas cu pas.

P 1 Se va scrie un program care afiseaza la ecran caracterele avand codurile ASCII cuprinse intre 30h si 80h.

Indicatii: Se va folosi functia 02.

P 2 Se va scrie un program care sa afiseze un sir de caractere la ecran.

Indicatii: Sirurile de caractere se scriu intre semne apostrof, iar in interiorul unui sir apostroful se dubleaza (de exemplu intr'adevar se va scrie ca sir sub forma 'intr''adevar'). Pentru folosirea functiei 09h sirul trebuie sa se termine cu caracterul $.

P 3 Program care sa afiseze doua siruri de caractere pe doua randuri.

Indicatii: Pentru a putea trece la un nou rand pe ecran, trebuie trimise catre acesta caracterele 0Dh (Carriage Return - aducere la inceputul randului) si 0Ah (Line Feed - avans cu un rand mai jos pe ecran).

P 4 Se va scrie un program care sa citeasca de la tastatura caractere si sa le afiseze cu ecou la ecran. Daca se apasa tasta ENTER (care genereaza caracterul Carriage Return -ODh), se va afisa mesajul 'Citire tastatura incheiata.' (mesajele sunt fara diacritice).

Indicatii: Se va folosi functia 01, care va afisa automat caracterul tastat; programul il va afisa din nou , de exemplu cu functia 02, astfel ca fiecare caracter va aparea pe ecran dublat - cu ecou.

P 5 Se va modifica programul precedent pentru afisare fara ecou.

P 6 Se va scrie un program care sa citeasca de la tastatura caractere si sa le afiseze cu majuscule la ecran. Se va testa varianta cu ecou si cea fara ecou.

Indicatii: Codul ASCII pentru majuscule se obtine scazand 20h din codul curent.

P 7 Se va scrie un program care sa citeasca intr-un buffer un sir de caractere (cu functia 0Ah) si sa le afiseze (cu functia 09h) pe linia urmatoare atunci cand se apasa Enter.

P 8 Se va scrie un program care afiseaza pe ecran textul:

'Care din urmatoarele registre folosite la adresare indirecta, implica segmentul de date?

1. BX

2. BP

3. SI

4. DI'

si asteapta un caracter (1..4) de la tastatura. Daca raspunsul este corect sa se afiseze textul: 'Corect', iar daca este gresit sa afiseze textul: 'Gresit!! Este BX sau SI!'






Politica de confidentialitate



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1509
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2022 . All rights reserved

Distribuie URL

Adauga cod HTML in site