Extras din laborator
Laborator 1
Facilitati C
Obiectiv: recapitulare elemente de C
Mod de lucru:
Programele vor fi realizate in C
1. Se citesc de la tastatura 10 valori intregi si memoreaza intr-un tablou unidimensional. Se
rearanjeaza octetii acestui tablou considerand o ordonare descrescatoare in raport cu bit D1.
de exemplu: ` 1011 1111
0111 1110
1111 1000
1100 1100
101 0101 etc
si apoi considerand o ordonare descrescatoare in raport cu ultimii doi biti (mai putin semnificativi)
Indicatie: puteti folosi deplasari pe biti, campuri de biti sau masti.
2. Se citesc din fisierul DAT.TXT, in ordine, maxim 400 de valori float (cuprinse intre -10 si
10). Acestea sunt reprezentate grafic si apoi sub forma de histograma (construita pentru intervale de
lungime unitate). Citirea datelor este realizata pana la perminarea fisierului sau pana la apasarea
unei taste.
3. Programul va fi rulat cu trei argumente in linia de comanda:
nume_prog par1 par2 par3
unde par1, par2 indica numele unor fisiere cu date de intrare, iar par3 numele unui fisier in care vor
fi inscrise rezultatele.
Fisierul par1 contine informatii despre dispozitivele electronice existente intr-un depozit (cod
dispozitiv, nume dispozitiv, numar exemplare existente pe stoc)
Fisierul par2 indica pentru o schema electronica ce trebuie realizata ce dispozitive sunt necesare si
in ce cantitate. Sunt specificate mai multe variante de abordare. Pentru fiecare varianta se indica pe
linii separate codul dispozitivului (sir de caractere sau cod numeric) si numarul de bucati necesare
(separate prin blanc). Separarea intre doua variante de lucru se face printr-o linie pe care scrie
“reteta” , urmat de blanc si apoi un cod al retetei.
Programul trebuie sa indice in fisierul par3, pentru fiecare reteta daca exista dispozitivele necesare
si daca nu ce mai trebuie cumparat. Afisare se va face in ordine descrescatoare a numarului de
bucati pentru fiecare reteta in parte.
Laborator 2
Facilitati C pentru lucrul in intreruperi
– biblioteca DOS.H
Obiectiv: elaborarea de programe C care genereaza intreruperi
Breviar teoretic- Vezi note de curs
C pune la dispozitie prin biblioteca DOS.H functii pentru:
- gestionarea vectorilor de intreruperi
- generarea intreruperilor
Date (necesare pentru accesarea registrilor microprocesorului):
union REGS {
struct WORDREGS x;
struct BYTEREGS h; };
struct WORDREGS {unsigned int ax,bx,cx,dx,si,di,cflag,flags;};
struct BYTEREGS {unsigned char al,ah,bl,bh,cl,ch,dl,dh;};
struct SREGS {
unsigned int es,cs,ss,ds;
};
struct REGPACK {
unsigned r_ax,r_bx,r_cx,r_dx;
unsigned r_bp,r_si,r_di,r_ds,r_es,r_flag;};
Aceste structuri/uniuni vor permite inscrierea registrilor microprocesorului prin apelul functiilor de
generare de intrerupere, respectiv citirea registrilor la iesirea din rutina de tratare a intreruperii
AX, BX, CX, DX – pentru registrele de lucru
SI, DI – pentru registrele de index (sursa si destinatie)
BP – pentru registru de baza (Base Pointer)
SP – pentru pointer de stiva (Stack Pointer)
CS, DS ,SS, ES – pentru registre de segment: cod, date, stiva,extrasegment.
Flag – pentru registrul de flaguri
Campurile din aceste structuri reprezinta variabile C, legatura cu registrii este realizata numai
prin apelul functiilor de generare intreruperi explicate mai jos
Functii pentru generare intreruperi INT21H (DOS)
Obs: valoarea inscrisa in AH inainte de generarea INT 21H indica numarul
functiei/serviciului DOS
int bdos(int dosfun,unsigned dosdx,unsigned dosal);
IN: dosfun, dosdx (DX), dosal (AL)
OUT: returneaza continut AX;
Efect: genereaza intreruperea DOS indicata de dosfun
int bdosptr(int dosfun,void *argument,unsigned dosal); Ex
IN: dosfun,
*argument: model “small”: DX; model “large” DS:DX),
dosal (AL)
OUT: returneaza
- succes: continut AX;
- esec: -1 (si seteaza _doserrno sau errno)
Efect: genereaza intreruperea DOS indicata de dosfun
int intdos(union REGS *inregs,union REGS *outregs); Ex
IN: union REGS * inregs: continut registri inainte de generare intrerupere
OUT: union REGS *outregs: continut registri la iesirea din rutina de tratare intrer.
returneaza: AX;
Efect: genereaza intrerupere 21H, functia inregs->h.ah
pozitioneaza dupa tratarea intreruperii: x.cflag si x.flags
pozitioneaza _doserrno (daca CF=1)
int intdosx(union REGS *inregs,union REGS *outregs, struct SREGS *segregs);
IN: union REGS * inregs: continut regsitri inainte de generare intrerupere
union SREGS *sregs
OUT: union REGS *outregs: continut registri la iesirea din rutina de tratare intrer.
union SREGS *sregs
Returneaza: AX
Efect: genereaza intrerupere 21H, functia inregs->h.ah, copiind:
sregs->ds in DS; sregs->es in ES;
pozitioneaza dupa tratarea intreruperii: x.cflag si x.flags
restaureaza dupa tratare intrerupere ES si DS
pozitioneaza _doserrno (daca CF=1)
Functii pentru generarea oricaror intreruperi – echivalent INT XX
int int86(int intno,union REGS *inregs,union REGS *outregs); Ex
IN: intno,
union REGS * inregs: continut registri inainte de generare intrerupere
OUT: union REGS *outregs: continut registri la iesirea din rutina de tratare intrer.
returneaza: AX;
Efect: genereaza intrerupere software intno
pozitioneaza dupa tratarea intreruperii: x.cflag si x.flags
pozitioneaza _doserrno (daca CF=1)
int int86x(int intno,union REGS *inregs,union REGS *outregs, struct SREGS *segregs);
IN: intno
union REGS * inregs: continut registri inainte de generare intrerupere
union SREGS *sregs
OUT: union REGS *outregs: continut registri la iesirea din rutina de tratare intrer.
union SREGS *sregs
returneaza: AX
Efect: genereaza software intno, copiind sregs->ds in DS; sregs->es in ES;
pozitioneaza dupa tratarea intreruperii: x.cflag si x.flags
pozitioneaza _doserrno (daca CF=1
Preview document
Conținut arhivă zip
- Programarea Aplicatiilor de Timp Real
- LUCRAREA_1.pdf
- LUCRAREA_10.pdf
- LUCRAREA_11.pdf
- LUCRAREA_12.pdf
- LUCRAREA_13.pdf
- LUCRAREA_2.pdf
- LUCRAREA_3.pdf
- LUCRAREA_4.pdf
- LUCRAREA_5.pdf
- LUCRAREA_6.pdf
- LUCRAREA_8.pdf
- LUCRAREA_9.pdf