Sunteți pe pagina 1din 30

Introducere in DOS

In acest laborator se vor urmari principalele proprietati ale unui sistem de operare urmarind cazul concret
al sistemului de operare DOS.

Interfata SO SO ofera utilizatorului o serie de servicii prin care sa comunice reciproc. Aceste dialoguri
sunt materializate de cele mai multe ori prin programe scrise intr-un limbaj de programare, fie de nivel
inalt, fie in limbaj de asamblare. Se vor urmari in continuare modurile in care un utilizator poate
interactiona direct cu SO direct, fara a mai folosi un limbaj de programare.

In esenta aceste interactiuni se realizeaza prin:

 comenzile standard oferite de catre orice sistem de operare;


 procesoarele care stiu sa interpreteze fisiere care contin comenzi adresate SO;
 diverse programe utilitare specializate in manipularea fisierelor si a volumelor;
 asa-numitele suprafete de operare - sisteme de meniuri prin care utilizatorul este condus de
sistem spre a-si efectua actiunile dorite.

Limbaje de control

Utilizatorul comunica cu SO printr-un set de comenzi oferite de catre SO. Acest nivel de interfata poate fi
privit ca un program permanent activ, numit interpretor de comenzi.
Pentru a oferi modalitati convenabile de comunicare, comenzile sunt de cele mai multe ori ierarhizate si
destinate diferitelor clase de utilizatori. De regula, intr-un sistem conversational multiutilizator comenzile
sunt grupate si se refera la una din urmatoarele cinci sarcini:
1. inceperea si terminarea unei sesiuni de lucru;
o numele utilizatorului, care trebuie cunoscut in prealabil de catre sistem;
o un cod de identificare unica: cont, parola, prioritate;
o resursele maximale pe care utilizatorul le doreste: timp maxim CPU, cantitatea de memorie, periferice, etc.
2. executia unui program sau proces;
o editare;
o compilare;
o editare de legaturi;
o executie propriu-zisa;
o depanare(executie asistata).
3. obtinerea de informatii despre sistem;
o informatii globale de stare
 data si ora curenta;
 numarul, eventual numele utilizatorilor activi in sistem la un moment dat;
 gradul de incarcare al sistemului;
 utilizarea memoriei si a perifericelor;
 modul curent de configurare al SO;
 disponibilitatea unor resurse;
 descrierea anumitor periferice.
o informatii de stare individuala
 timpul CPU consumat pentru procesul curent;
 timpul fizic consumat de la conectare (login);
 numarul operatiilor I/O efectuate;
 fisierele deschise la momentul curent;
 procesele proprii active la momentul curent;
 perifericele alocate la procesele lui etc.
4. manipularea de fisiere;
o creare;
o stergere;
o copiere;
o concatenare;
o tiparire(afisare);
o renumire(redenumire,mutare).
5. administrare si intretinere sistem
o nivelul administrator (supervizor, sistem);
o nivelul operator;
o nivelul utilizator obisnuit.
Principalele comenzi DOS

Interpretorul de comenzi DOS COMMAND.COM se incarca in memorie la pornirea sistemului de


operare. El tine evidenta discurilor implicate si a directoarelor implicite de pe fiecare disc. Pe langa
aceasta, efectueaza un numar de comenzi DOS prestabilite. Din acest punct de vedere comenzile DOS se
impart in doua categorii:
 comenzi rezidente (interne) - sunt comenzile inglobate in COMMAND.COM. Se lanseaza sub
forma:
...>comanda argumente
 comenzile tranzitorii (externe) - sunt cele care solicita existenta pe disc a unui fisier de tip *.com
sau *.exe avand ca nume numele comenzii. Se lanseaza sub forma:
...>[d:][cale]comanda argumente

Comenzi de manipulare a directoarelor

Comanda Descriere
recunoscuta si ca CHDIR, provine de la Change Directory, schimba directorul curent in cel
specificat. Exemple:
CD cd c:\lucru
cd ..
cd \
recunoscuta si ca MKDIR, provine de la Make Directory, creaza un director nou. Crearea se
face numai daca nu exista deja un director cu numele specificat. Exemple:
MD
md c:\lucru\test
mkdir director1
recunoscuta si ca RMDIR, provine de la Remove Directory, sterge un director nou. Stergerea se
face numai daca directorul indicat este vid, adica nu contine nici un fisier sau subdirector
RD subordonat. Exemple:
rd c:\lucru\test
rmdir director1
afiseaza structura arborescenta de directoare a directorului curent sau a directorului specificat.
Exemple:
TREE
tree
tree c:\lucru

Teme de laborator:
Sa se creeze urmatoarele structuri arborescente de directoare:

a) b)

c) d)
Comenzi de lucru cu discuri si fisiere

Comenzi de manipulare a unui disk

Comanda Descriere
Realizeaza partajarea unui harddisk in mai multe partitii. In mod normal aceasta comanda se
executa foarte rar, iar persoana care o lanseaza trebuie sa fie competenta. Este foarte usor sa se
fdisk
piarda toate informatiile de pe hardisk la o folosire incorecta. Se recomanda consultarea
prealabila si serioasa a documentatiilor pentru cei ce vor (sau sunt nevoiti) sa o aplice.
Initializeaza discul specificat prin [c:\] la un format standar acceptat de catre DOS. Dupa ce se
scrie pe intreg discul, creaza si initializeaza directorul radacina precum si tabela FAT. Incepand
cu DOS 4.0 fiecarui disk i se atribuie la formatare un numar de serie, diferit de la o formatare la
alta. Optiuni:
format  /s cere ca discul respectiv sa fie facut disc sistem;
 /v indica faptul ca utilizatorul doreste introducerea unei etichete de volum pentru
identificare;

 /4 se foloseste pentru a formata dischete cu densitatea de 360KO.


Permite refacerea unui disc formatat indicat prin [d:\]. In acest scop la formatare nu se mai scrie
unformat
pe tot discul, ci numai partea de inceput, pana la directorul radacina inclusiv.
label Permite crearea sau stergerea unei etichete de volum.
Permite compararea discurilor indicate prin d1 si d2. Comparatia se face pista cu pista,
diskcomp
semnalandu-se orice diferente.
Copiaza, la nivel fizic discheta d1 (sursa) pe discheta d2 (destinatie). Daca este nevoie discheta
diskcopy
d2 este formatata automat.
chkdsk Analizeaza structura informatiei de pe un disc DOS si afiseaza un raport asupra starii discului.
Recupereaza fisierele de pe disc care contin sectoare defecte, totodata sectoarele defecte sunt
recover
marcate.

Comenzi privitoare la fisiere

Listeaza toate intrarile din fisierul director sau numai cele specificate. INformatia afisata include
numele volumului si dimensiunea spatiului liber de pe disc. INtrarile care afiseaza alte
directoare sunt identificabile clar prin prezenta lui DIR in campul de dimensiune fisier. Optiuni:
dir  /p afiseaza pagina cu pagina informatiile dorite;

 /w afiseaza condensat directorul, impartind ecranul in cinci coloane, care contin doar
numele fisierelor.
Copiaza unul sau mai multe fisiere de pe alt disc si optional, da copiei un nume diferit daca in
comanda se specifica acesasta. Optiuni:
 /A determina tratarea fisierul ca un fisier ASCII (text); utilizat pentru fisierul sursa
copy determina copierea pana la eof, iar pentru fiserul destinatie copiaza inclusiv eof.

 /B determina copierea intregului fisier determinat prin informatia de dimensiune din


fisierul director.
xcopy Permite copierea selectiva de fisiere, de grupuri de fisiere, care pot sa includa si subdirectori.
Schimba numele fisierului specificat de primul parametru in numele specificat de al doilea
ren(ame)
parametru.
del Sterge fisierul cu numele specificat, din directorul specificat sau implicit, de pe unitatea
(erase) specificata sau implicita.
undelete Permite refacerea fisierelor sterse.
comp Compara doua fisiere. Compararea demareaza numai daca fisierele au aceasi lungime.
type Afiseaza continutul fisierului specificat la dispozitivul standard de iesire.
Tipareste o coada (lista) de fisiere de date la imprimanta, in timp ce pe calculator se pot executa
print
alte lucrari.

Teme de laborator:

1. Sa se scrie o comanda care copiaza toate fisierele cu extensia *.java dintr-un director in altul.
2. Sa se scrie o comanda ce ne raporteaza intr-un fisier ce fisiere cu numele lab?.html sunt in
memoria calculatorului.
3. Sa se schimbe data unui fisier cu data curenta a calculatorului.
Filtre DOS

Filtre DOS

Comanda Descriere
Aceasta comanda "filtru" citeste date de la echipamentul standard de intrare, sorteaza datele,
apoi scrie datele sortate la echipamentul standard de iesire. Sortarea este efectuata in ordinea
codurilor ASCII, crescator, la nivel de linie de text. Caracterele TAB nu sunt expandate in
spatii. Optiuni:
sort
 /r determina efectuarea sortarii in ordine descrescatoare;

 /+n este un intreg care determina inceperea sortarii din coloana n. Daca nu se specifica
nici un parametru, sortare incepe din coloana 1.
Aceasta comanda "filtru" trimite la echipamentul standard de iesire toate liniile din fisierul
specificat in linia de comanda, care contin un sir de caractere specificat. Optiuni:
 /v determina afisarea tuturor liniilor care nu contin sirul specificat;
 /c determina afisarea numai a unui contor cu numarul de apariti a sirului specificat in
fiecare fisier, fara a mai afisa liniile care contin sirul specificat
 /n determina o numerotare relativa a liniilor care contin sirul specificat, numarul de linii
se afiseaza inaintea fiecarei linii scrise.

Sirul trebuie introdus intre ghilimele (""). Doua apostrofuri consecutive sunt tratate ca si un
find
singur apostrof. Comparatia tine cont de litere mari si litere mici. Nu se permite specificarea
generica a fisierelor. Exemple:
 ...>find "poezie" carte1.txt carte2.txt carte3.txt
Va afisa toate liniile din fisierele carte1.txt, carte2.txt, carte3.txt care contin sirul
"poezie"

 ...>dir c: | find /v "dat"


Va afisa numele tuturor fisierelor din directorul curent de pe discul c: care nu contin
sirul "dat".
Este un filtru care citeste date de la intrarea standard si le tranpune pe ecran. La umplerea unui
ecran, asteapta de un utilizator apasarea unei taste pentru a afisa ecranul urmator. Comanda are
more sens numai daca intrarea standard este redirectata, iar iesirea standard este ecranul. Exemplu:
...> more < carte
permite utilizatorului sa citeasca de pe ecran fisierul carte
Este un filtru special. El transforma, daca poate un program executabil de tip *.exe intr-unul
exe2bin
executabil de tip *.com.

Teme de laborator:

1. Sa se sorteze un fisier cu studenti in ordine lexicografica.


2. Sa se determine numarul de aparitii al prenumelui "Mihai" intr-un fisier cu studenti.
3. Sa se determine pe ce linie apare pentru prima data prenumele "Adrian".
Comenzi de configurare si informare

Comenzi de configurare dinamica

Comanda Descriere
Fixeaza caile de cautare suplimentare a fisierelor executabile. In mod implicit daca fisierele de
path comenzi si comenzile externe nu sunt precedate de o specificatie de cale ele sunt cautate numai
in directorul curent.
Comanda este similara comenzii path, doar ca ea se refera la caile suplimentare de cautare a
append
fisierelor care nu sunt fisiere executabile.
Optimizeaza accesul la fisierele si directoarele mai des folosite. In acest scop este gestionata o
fastopen zona de memorie tampon cu adresele de disc recent folosite.. Principiul este cel al memoriei
cache.
date Afiseaza si schimba data curenta a sistemului.
time Afiseaza si schimba ora exacta curenta a sistemului.
break Sesizeaza sau nu apasarea lui Ctrl+Break.
Se paote defini modul in care se doreste afisarea prompterului de catre command."Text" este un
sir de perechi de caractere fara spatiu intre perechi. Primul caracter din pereche este simbolul '$'
(dollar), iar al doilea poate fi una din literele t, d, p, g, n.
 -t cere afisarea la prompter a orei exacte;
prompt
 -d cere afisarea la prompter a datei;
text
 -p cere afisarea caii de la directorul radacina pana la directorul curent;
 -g cere afisarea la prompter a simbolului '>';

 -n cere afisarea la prompter a literei care specifica unitatea de disc implicita.


cls Sterge complet ecranul.
Fixeaza valori ale unor parametrii aflati intr-o zona de memorie controlata de command.com.
Atat numele cat si valoarea parametrilor sunt siruri de caractere. In urma executie comenzii
SET, literele mici din nume si din valoare sunt convertite in litere mari.
Numele sunt fie date de utilizator, fie nume gestionate de sistem. Printre numele gestionate de
sistem, amintim PATH si PROMPT, care au ca valori sirurile indicate prin comenzile
SET respective.
Un alt nume, deosebit de important este COMSPEC. El are ca valoare radacina discului de pe
care se face incarcarea sistemului de operare DOS. Dupa incarcare utilizatorul poate schimba
aceasta cale. De exempl, daca utilizatorul incearca DOS de pe discheta A:, dar pe partitia C:
exista fisierul command.com se poate da comanda: SET
COMSPEC=c:\windows\command\command.com
In absenta acestei comenzi, discheta de incarcare trebuie sa fie prezenta permanent in unitate.

Comenzi de de informare

Comanda Descriere
mem Afiseaza continutul memorie la un moment dat.
ver Afiseaza pe ecran numarul versiunii DOS a sistemului incarcat.
vol Afiseaza eticheta de volum a volumului curent sau a celui specificat.
help Da detalii despre comenzile DOS in general sau despre o anumita comanda specificata.
Teme de laborator:

1. Sa se adauge java.exe la caile de cautare sistem.


2. Sa se schimbe promptul cu data curenta.
3. Sa se enumere si sa se modifice minim trei variabile sistem.
4. Sa se afiseze numarul variabilelor de mediu care sunt setate.
5. Sa se obtina toate numele de fisiere read-only din c:\winnt si subdirectoare (sa fie doar calea
completa a fisierelor, fara alte informatii ex directoarele . si ..).
Fisiere de comenzi (BAT) sub DOS

Fisiere de comenzi (BAT) sub DOS

Un fisier de comenzi este un fisier text care contine una sau mai multa comenzi si/sau directive care se
executa succesiv, fara interventia directa a utilizatorului. Numele unui astfel de fisier, in cazul SO DOS
trebuie urmat de tipul fisierului *.bat. Un prim exemplu de fisier de comenzi DOs este fisierul
autoexec.bat, daspre care vom discuta intr-un laborator urmator. Daca acest fisier este prezent in
directorul radacina de pe partitia de bootare a sistemului de operare, DOS executa automat comenzile din
el la fiecare incarcare a sistemului. Un fisier de comenzi DOS contine in el mai multe tipuri de
constructii:
 comenzi DOS propriu-zise;
 etichete;
 caractere speciale: | < > si %
 parametrii formali, care vor fi inlocuiti la lansare cu parametrii actuali;
 variabile globale rezidente in interpretorul de comenzi;
 variabile locale folosite la cicli;
 directive adresate interprtorului fisierelor de comenzi.

Exemplu: Fisier care listeaza programele Java din directorul curent, le copiaza pe discheta si apoi le
sterge
tipar.bat dir *.java
  copy *.java a:\
  del *.java
O eticheta se scrie sub forma: :nume, caracterul ":" fiind urmat de maximum 8 litere sau cifre. O eticheta
apare (ca definitie) pe o singura linie, la inceput de rand.
Caracterele speciale | < > sunt interpretate in comenzi ca si legare in pipe a doau comenzi, respectiv
pentru redirectarea intrarii si/sau a iesirii standard a unei comenzi. Pentru a fi interpretate ca si caractere
obisnuite ele trebuiesc scrise intre ghilimele. Spre exemplu, o linie de forma; A | B este interpretata ca o
succesiune a comenzilor A si B, legate in pipe. In schimb o linie de forma: A "|" B este interpretata ca o
singura comanda A, care are doi parametrii, o bara verticala | si caracterul B.
Caracterul @ plasat ca prim caracter intr-o linie are ca efect neafisarea linie pe ecran. Linie este in sa
prelucrata de catre interpretorul fisierelor de comenzi.
Caracterul % marcheaza parametrii formali, variabilele globale si variabilele locale.
In fisierul de comenzi pot aparea pana la 10 parametri formali, notati cu %0 %1 ... %9. Corespunzator
acestora in linia de comanda, care lanseaza in executie fisierul de comenzi argumentele sunt puse in
corespondenta cu acesti parametri.
Exemplu: fisier de comenzi ce primeste ca parametrii numele a trei clase Java, pe care le compileaza si
apoi lanseaza in executie pe prima dintre ele:
executa.bat call javac %1.java
  call javac %2.java
  call javac %3.java
  call java %1
Daca se lanseaza fisierul prin comanda:executa SortTest QSort MyRead atunci parametrii formali vor
avea valorile:
%0 executa
%1 SortTest
%2 QSort
%3 MyRead
Variabilele globale sunt cele care au primt valori prin comanda SET. Pentru a avea acces la ele numele lor
trebuie cuprinse intre doua caractere %. Prin intermediul acestor variabile se poate dirija anticipat
actiunea unui fisier de comenzi, sau doua fisiere de comenzi pot comunica intre ele. Spre exemplu,
presupunem ca s-a dat o comanda: SET DEST=c:\lucru atunci intr-un fisier de comenzi ce se lanseaza
ulterior poate sa apara comanda: copy *.java %DEST%.

Directivele interpretorului fisierelor de comenzi


for %%variabila in (multime) do comanda
call fisiercomenzi
if [not] errorlevel n comanda
if [not] sir1=sir2 comanda
if [not] exist fisier comanda
goto eticheta
shift
echo [on|off|mesaj]
pause [mesaj]

Directiva for permite prelucrarea iterativa a unei comenzi dintr-un fisier de comenzi. %%variabila este o
variabila locala de ciclare. Ea este secvential inlocuita cu toate valorile din multime si apoi evaluata si
executata. Daca un membru al multimii este o expresie construita generic (cu * si/sau ?), atunci %
%variabila va fi inlocuita pe rand cu toate numele de fisier care se potrivesc cu aceasta expresie.

Comanda for %%f in (*.java *.txt) do type %%f va tipari pe ecran mai intai toate fisierele de tip *.java
si apoi cele de tip *.txt. Daca in locul ei se da comanda: for %%f in (*.java *.txt) do dir %%f va lansa
cate un dir pemtru fiecare fisier in parte, nu numai doua comenzi dir cum ar parea la prima vedere.
Directiva for functioneaza si in linia de comanda, doar ca in linia de comanda nu mai este necesara
dublarea caracterului special %.

Directiva call permite apelul (lansarea in executie) a unui fisier de comenzi din altul. La terminarea
fisierului apelat controlul revine fisierului care l-a apelat. Tot aici se poate spune ca este posibil ca ultima
linie a unui fisier de comenzi poate fi lansarea in executie a unui alt fisier de comenzi, fara directiva call.
In acest caz se realizeaza o inlantuire a celor doua fisiere.

Directiva goto transfera controlul in fisierul de comenzi in linia de comanda situata dupa eticheta
specificata.

Directiva if permite executia conditionata a unei comenzi DOS din fisierul de comenzi, sau a unei alte
directive.
Ce inseamna conditia ERRORLEVEL numar? Fiecare comanda DOs transmite la terminarea ei un cod
cu o valoare intre 0 si 255. De obicei un cod cu o valoare nenula indica o situatie neobisnuita. Conditia
ERRORLEVEL numar este adevarata daca codul de retur al ultimei comenzi este mai mare sau egal cu
numarul scris dupa cuvantul ERRORLEVEL.

Directiva shift permite folosirea a mai mult de zece parametrii formali. Efectul ei este acela de a decala
parametrii formali, facand sa se piarda parametrul %0, parametrul care era %1 sa devina %0, parametrul
care era %2 sa devina %1,etc.

Directiva echo

echo on la lansarea unei linii in executie aceasta este afisata pe ecran


echo off la lansarea unei linii in executie aceasta nu este afisata pe ecran, dar totusi executata
echo mesaj afiseaza pe ecran mesajul specificat
Directiva pause afiseaza pe ecran mesajul, daca acesta este specificat, apoi suspenda executia fisierului
pana cand se apasa o tasta.

Observatie:terminarea fortata a executiei unui fisier de comenzi sa face cu combinatiile de taste:

CTRL+C
CTRL+BREAK

Teme de laborator:

1. Sa se scrie un fisier de comenzi care realizeaza stergerea a oricate fisiere indicate ca parametrii.
Rezolvare:
:repeta
shift
if "%0"=="" goto :sfarsit
del %0
goto :repeta
:sfarsit
2. Sa se scrie un fisier de comenzi care verifica daca un director al carui nume este primit in primul
parametru exista si daca acesta exista sa se afiseze continutul toate fisierele care au extensia din
parametrul al doilea
3. Sa se scrie un fisier de comenzi prin care sa se caute in oricate fisiere date ca parametru un cuvant
primit tot ca si parametru. Sa se salveze rezultatul intr-un fisier text.
4. Sa se scrie un fisier de comenzi prin care sa se creeze un director cu numele avand primul
parametru si apoi sa se copieze in el fisierul/directorul din parametrul al doilea
5. Sa se creeze un director in care sa se copieze toate fisierele de un anumit fel din alt director (cu
ajuotrul unui fisier de comenzi).
DOS -  Laborator 6

Fisiere de configurare DOS (autoexec.bat si config.sys)

Fisiere de configurare DOS (autoexec.bat si config.sys)

Structura nucleului si a partii de servicii MSDOS

Suprafete de operare XTPRO, NC, PCSHELL, WINDOWS


 Compilatoare
 Bibliotecar
 Editoare de legaturi
 Preparatoare de documente
 Editoare de texte
 Medii de programare

Programe utilitare
COMMAND
BDOS
DISK BIOS
ROM BIOS

Componenta ROM-BIOS

Este livrata de catre firma producatoare a calculatorului in memoria ROM a


sistemului de calcul. Imediat ce se porneste sistemul intra in lucru o rutina a
acestei componente.Ca regula generala ROM-BIOS egalizeaza toate diferentele
constructive ale sistemului de calcul fata de conventiile DOS. Din cauza faptului
ca IBM a facut publice aceste conventii, toti producatorii de calculatoare sunt
practic obligati sa se alinieze la aceste conventii. Aceasta este cauza pentru care
practic toti producatorii de calculatoare sunt practic obligati sa se alinieze la
aceste conventii. Aceasta este cauza pentru care practic toate calculatoarele
compatibile PC sunt compatibile intre ele.
Principiul fundamental de realizare a interfetei ROM-BIOS sete acela ca el ofera
niste rutine de intrerupere prin care se realizeaza legatura cu toate perifericele
legate la sistem.

Componenta DISK-BIOS

Este practic independenta de hard si ea extinde functiile ROM-BIOS. Aceasta


componenta este materializata intr-un fisier disc cu un nume (dependent de
versiune) dintre cele de mai jos:
IBMBIO.COM, BIO.COM, IO.SYS
rezident pe discheta sau pe discul de pe care se incarca sistemul de operare.

Functiile BIOS (Basic Input Output System)


 incarcarea sistemului de operare;
 determinarea si testarea componentelor periferice existente in configuratie;
 testarea memoriei RAM;
 functiile de baza privind lucrul cu ecranul video;
 functiile elementare de citire a tastaturii;
 functiile elementare de lucru cu dischetele si cu discurile fixe;
 functiile de lucru cu caseta magnetica;
 functiile de lucru cu liniile de comunicatie asincrone(imprimante, plotere,
digitizoare, etc.).

In ceea ce priveste lucrul cu discul, BIOS opereaza cu cilindri, piste, sectoare, etc.

Componenta BDOS (Basic Disk Operation System)

Extinde functiile BIOS la un nivel mai inalt, cu precadere cele privitoare la lucrul
cu discurile. Aceasta componenta este materializata intr-un fisier pe disc care
poarta unul dintre numele:
IBMDOS.COM, DOS.COM, MSDOS.SYS
rezident pe discul sau discheta de pe care se incarca sistemul de operare.

Functiile BDOS (Basic Disk Operation System)

 gestiunea memoriei; alocarea si eliberarea de spatiu de memorie necesar


programelor;
 gestiunea proceselor (programelor) ; incarcarea acestora si lansarea lor in
executie, incarcarea unor segmente de program in timpul executiei,
terminarea programelor (cu eliberarea spatiului dememorie ocupat sau cu
ramanerea rezidenta in memorie a unor programe);
 executia operatiilor de I/O cu perifericele de tip caracter;
 tratarea fisierelor disc: creare, deschidere, inchidere, acces, stergere, etc;
 partajarea fisierelor intre mai multe procese active la un moment dat;
 gestiunea structurii arborescente a fisielor si manipularea directoarelor;
 gestiunea altor dispozitive legate la sistem;
 gestiunea retelelor de calculatoare;
 modificari aduse sistemului de intreruperi;
 gestiunea ceasurilor si a calendarului.

In ceea ce priveste lucrul cu discul, BDOS opereaza cu conceptul de fisier DOS.

Componenta COMMAND

Are ca sarcina principala preluarea comenzilor date de utilizator dela tastatura si


lansarea lor in executie. Aceasta componenta este materializata intr-un fisier pe
disc care poarta numele:
COMMAND.COM
rezident pe discheta sau pe discul de pe care se incarca SO.

Incarcarea sistemului de operare

Pentru a putea sa asigure toate serviciile pentru care a fost conceput, SO - in fapt,
tot un program - trebuie sa se afle in memorie. Ori, la pornirea calculatorului, in
memoria sa nu se afla nimic (coerent). Nici macar un program care sa stie sa
incarce sistemul de operare.
Rezolvarea acestui impas a constituit o revolutie in dezvoltarea calculatoarelor.
Situatia imposibila in care se afla calculatorul a fost asemuita cu efortul cuiva de a
incerca sa se ridice din groapa in care a cazut folosindu-se de sireturile
bocancilor. Procedeul de incarcare a sistemului de operare a fost numit bootstrap
(boot - bocanc, strap - siret). Ideea principala a cestui procedeu a fost de a folosi
memoria de tip ROM (nevolatila) pentru a realiza incarcarea Pentru aceasta in
cadrul ROM-BIOS exista un scurt program numit loader (incarcator).

Fisiere de configurare DOS (autoexec.bat si config.sys)

Primul fisier de sistem incarcat in memorie este IO.SYS (care contine componenta
BIOS). Urmeaza fisierul MSDOS.SYS (care contine componenta BDOS), dupa care
este cauta fisierul de configurare CONFIG.SYS. Toate aceste fisiere trebuie sa
existe in directorul radacina. Daca nu este gasit fisierul CONFIG.SYS, sistemul
este configurat cu valori implicite. Daca fisierul este gasit, sistemul este
configurat conform comenzilor din acest fisier (o linie de fisier - o comanda).
In continuare este incarcat interpretorul de comenzi COMMAND.COM. Dupa ce a
preluat controlul, aceasta cauta (tot in directorul radacina) fisierul numit
autoexec.bat, care contine comenzile ce dorim sa fie executate de fiecare data
cand se incarca sistemul (o linie in fisier - o comanda). Daca nu este gasit fisierul
autoexec.bat, COMMAND>COMexecuta comenzile DATE si TIME.
Dupa executarea fisierului autoexec.bat sau a comenzilor date si time, este afisat
prompterul sistemului de operare si in continuare se pot introduce comenzi
(controlul este da utilizatorului).

Observatie: Orice disc sistem MSDOS contine obligatoriu in directorul radacina urmatoarele fisiere
(ordinea este arbitrara): IO.SYS, MSDOS.SYS, COMMAND.COM si optional fisiereleconfig.sys si
autoexec.bat, care sunt fisiere text.

config.sys
Comenzile din acest fisier se refera la:
1. modul de lucru pentru sistemul de operare;
2. incarcarea de drivere pentru exploatarea eficienta a calculatorului.

Prima clasa de comenzi are ca rprezentanti principali: BREAK, FILES, LASTDRIVE,


REM.
BREAK permite/inhiba intreruperea unui program cu CTRL+C
specifica numarul maxim de fisiere pe care MSDOS le poate manevra
FILES
simultan
LASTDRIVE stabileste numarul maxim de discuri cu care poate lucra MSDOS
se foloseste pentru a insera comentarii explicative in fisierul
REM
CONFIG.SYS
DOS permite folosirea memoriei superioare si/sau inalte;
FILES=n Determina numarul maxim de fisiere cu care MSDOS poate lucra simultan
(care pot fi simultan deschise - vezi foxpro). Cinci fisiere sunt automat deschise
de MSDOS:
CON semnifica tastatura ca fisier de intrare si ecranul ca fisier de iesire
dispozitiv logic care in general este echivalent cu LPT1 (portul de tip paralel
PRN
unde de obicei se conecteaza imprimanta)
dispozitiv auxiliar care in general este echivalent cu COM1 (linia de
AUX
comunicatii seriale numarul 1)
NULL periferic pentru testarea programelor
Perifericul de eroare
Valoarea n desemneaza numarul maxim de fisiere si poate fi intre 8 si 255 (implcit
8).
Valori folosite: uzual FILES=20, dar la lucrul cu programele foarte complexe
(exemplu foxpro) care lucreaza cu multe fisiere simultan, FILES=40.

REM [comentariu]
O linie din config.sys care incepe cu literele REM este considerata comentariu. EA
va fi neglijata si se va trece la executarea urmatoarei linii. Se foloseste uzual
pentru a dezactiva temporar anumite comenzi.
DOS=HIGH; DOS=UMB sau DOS=HIGH,UMB
Specifica faptul ca MSDOS trebuie sa foloseasca memoria superioara, sa incarce
o parte din el in memoria inalta, sau ambele.
Parametrul HIGH specifica faptul MSDOS trebuie sa incarce o parte din memoria
inalta, eliberand astfel memorie conventionala. Are efect doar daca a fost incarcat
in prealabil driverul himem.sys.
Parametrul UMB specifica faptul MSDOS isi poate incarca driverele in memoria
superioara folosind comanda DEVICEHIGH, eliberand astfel memorie
conventionala. Are efect doar daca a fost incarcate driverele himem.sys si
emm386.exe.
Cea de-a doua clasa de comenzi din config.sys se refera la incarcarea driverelor. Un
driver este o rutina care stie sa comunice cu un dispozitiv (periferic sau memoria
interna).
Driverele dispozitivelor standard (tastatura, ecran) fac parte din sistemul de
operare. Cand este conectat la calculator un nou periferic, trebuie instalat si
driverul corespunzator. Driverele sunt instalate prin comenzi DEVICE date in
fisierul config.sys si pot fi livrate cu sistemul MSDOS sau separat. De regula au
extensia sys si se incarca odata cu celelalte programe de control MSDOS,
ramanand rezidente in memorie.
Un driver poate avea unul din urmatoarele roluri:
 extinderea configurarii cu noi dispozitive fizice (ex: mouse.sys);
 gestionarea memoriei extinse (himem.sys);
 adaugarea de facilitati pentru periferice existente (ansi.sys permite
adaugarea de noi functii pentru controlul tastaturii si a ecranului).

DEVICE=fisier [parametri]
Incarca driverul din fisierul specificat si ii transmite parametrii din linia de
comanda, parametri dependenti de driver.
DEVICEHIGH Are acelasi rol ca si comanda DEVICE, numai ca incearca sa incarce
driverul in memoria superioara daca exista. Daca nu exista memorie superioara,
driverul este incarcat in memoria conventonala, fara a se anunta acest lucru.
Cele mai importante drivere sunt:
 ansi.sys permite controlul extins al tastaturii si ecranului;
 ramdrive.sys permite crearea de discuri logice in memoria interna (discuri
RAM);
 himem.sys driver pentru memoria extinsa;
 emm386.sys driver pentru memoria superioara si expandata;
 mouse.sys pentru lucrul cu mouse-ul.

Daca presupunem ca driverele se afla in directorul c:\drivers atunci config.sys ar


putea arata astfel:
break=off
device=c:\drivers\himem.sys
device=c:\drivers\ems386.exe noems
dos=high,umb
devicehigh=c:\drivers\ramdrive.sys 2000 /e
devicehigh=c:\drivers\ansi.sys
devicehigh=c:\drivers\mouse.sys
files=40
lastdrive=M
Observatie:Orice modificare in config.sys este efectiva doar dupa rebootarea
calculatorului.

autoexec.bat
Este un fisier de comenzi care se executa automat la bootare.
Exemplu
cls
@echo off
set path=c:\lucru;s:\jdk1.3\bin;
prompt $p$g
doskey
Teme de laborator:
1. Sa se scrie corecteze si descrie pe scurt fisierele de comenzi urmatoare .

1
echo off
if %1.==. goto err
if %1.==c. goto cre
if %1.==d. goto ste
if %1.==p. goto cop
echo primul parametru e gresit
goto sf
:cre
if %2.==. goto err1
md %2
goto sf
:ste
if %2.==. goto err2
rd %2
goto sf
:cop
if %2.==. goto err3
if %3.==. goto err4
copy %2 %3
goto sf
:err1
echo dati numele directorului care se creaza
goto sf
:err2
echo dati numele directorului care se sterge
goto sf
:err3
echo dati numele fisierului care se copiaza
goto sf
:err4
echo dati numele directorului in care se copiaza
goto sf
:err
echo dati parametri
:sf
2
echo off
if %1.==. goto err
:ghu
if %1.==. goto err
if %2.==. goto err
if %3.==. goto err
if %4.==. goto err
goto ghu
copy %2*.%1 %3
del %3\?%4*
goto sf
:err
echo dati 4 parametrii
:sf

3
echo off
if %1.==.goto err
dir %1 |find "file(s)"
goto sf
:err
dir |find "file(s)"
:sf

4
if %1 .==. goto err
:ghu
if %1.==. goto sf
if %2.==. goto err2
if %3.==. goto err3
type %1
type %2>prn
del %3
shift
shift
shift
goto ghu
:err2
type %1
goto sf
:err3
type %1
type %2>prn
goto sf

:err
echo dati parametri
:sf
5
if %1.===. goto err
dir %1|find "dir(s)"
goto sf
:err
echo dati parametri
:sf

6
if %1.==. goto err
dir %1 /a:-d|find "p"
goto sf
:err
dir /a:-d|find "p"
:sf

7
echo off
if %1.==. goto err
:hyu
if %1.==. goto err1
echo %1 >> dan
shift
goto hyu
:err1
type dan|sort
goto sf
:err
echo dati parametri
:sf

8
if %1.==. goto err
:sus
if not exist %1 goto err1
type %1 >>fis1
goto err2
:err1
echo >> %1
md %1
goto err2
:err2
shift
if %1.==. goto sf
goto sus
:err
echo dati parametri
:sf
9
echo off
if %1.==. goto err
dir %1 /a:-d|find /v ","
goto sf
:err
dir /a:-d|find /v ","
:sf

10
@echo on
if %1.==. goto err1
if %1==c goto creaza
if %1==d goto sterge
if %1==p goto copiaza

:creaza
if %2.==. goto err11
md %2
goto sf
:err11
echo Nu ati dat numele directorului care va fi creat.
pause
goto sf

:sterge
if %2.==. goto err12
rd %2
goto sf
:err12
echo Nu ati dat numele directorului care va fi sters.
pause
goto sf

:copiaza
if %2.==. goto err13
if %3.==. goto err14
copy %2 %3
goto sf
:err13
echo Nu ati specificat numele fisierului care va fi copiat.
pause
goto sf
:err14
echo Nu ati specificat numele directorului in care va fi copiat fisierul.
pause
goto sf

:err1
echo Nu ati specificat primul parametru !
pause
goto sf

:sf
CJ
http://www.cs.ubbcluj.ro/~rlupsa/edu/ac/doc/bat.html
Fisiere de comanzi

Pe scurt
 Un fisier de comenzi este un program avand ca instructiuni elementare
comenzi DOS
 Programul nu este structutat; instructiunile de control al executiei sunt goto,
if, for, call
 Variabilele sunt de tip sir de caractere. Atribuieas se face cu instructiunea
set
 Un fisier de comenzi poate primi parametrii la lansarea in executie. Acestia
se regasesc prin constructiile %1...%9 si cu instructiunea shift
 Intrarea si iesirea standard se pot redirectiona prin constructiile >, >>, <, |

Teorie
Un fisier de comanzi este un fisier ce contine o inlantuire de comenzi DOS ce trebuie executate succesiv.

Fisierele de comenzi se creaza folosind un editor de text; recomandabil se va folosi mediul Turbo Pascal.

Fisierele de comenzi vor avea obligatoriu extensia bat

Un fisier de comenzi poate contine toate comenzile ce pot fi date in mod interactiv interpretorului de
comenzi.

Deoarece un fisier de comenzi este de fapt un program, avem in plus variabile, si instructiuni pentru
controlul ordinii executiei instructiunlor. Aceste instructiuni sunt: goto, if, for, shift, call. Pentru
informatii legate de aceste comenzi, va rugam sa cititi informatiile din Norton Guide sau din bibiografie.

Exista variabile, de tip sir de caractere, care pot fi modificate folosind comanda set. Acolo unde avem
nevoie de valoarea unei variabile, vom scrie %nume-variabila%.

Un fisier de comenzi poate fi apelat cu parametrii, de ex. il puem lansa prin comanda (interactiva)

t.bat 1 a.pas
in acest exemplu primul parametru este (sirul) 1, iar al doilea este a.pas. Din
interiorul fisierului de comenzi putem afla valorile parametrilor ca %1, ... , %9.
Comanda shift face ca %1 sa ia valoarea lui %2, %2 valoarea lui %3 s.a.m.d., %9
luand ca valoare urmatorul parametru (al zecelea).

Iesirea unei comenzi (ceea ce ar afisa comanda respectiva pe ecran) se poate

Exercitii
1. Scrieti un fisier de comenzi care creaza un director cu numele pascal in care copiaza toate fisierele cu
extensia pas din directorul curent.

Rezolvare:

mkdir pascal
copy *.pas pascal

2. Acelasi lucru, dar dand cate o comanda copy pentru fiecare fisier

Rezolvare:

Punem copierea ca instructiune la FOR:

mkdir pascal
for %%i in (*.pas) do copy %%1 pascal

3. Scrieti un program care copiaza fisierele a.txt, aa.txt, ..., aaaaaaaa.txt in directorul c:\temp;
fisierul nu trebuie sa contina explicit cele 8 nume.

Rezolvare

4. Scrieti un program care copiaza fisierele date ca parametrii in directorul c:\temp

Rezolvare

5. Scrieti un fisier de comenzi care primeste cel putin 2 parametrii. primul fiind un nume de director si
urmatoarele nume de fisiere, si muta fisierele date ca parametrii in directorul dat ca prim parametru. Se
vor semnala eventualele erori.

6. Scrieti un fisier de comenzi care concateneaza fisierele date ca parametrii in fisierul dat ca ultim
parametru. Se vor semnala eventualele erori.

7*. Scrieti un fisier de comenzi care primeste ca parametri nume de fisiere si copiaza acele fisiere ce au
extensia pas in directorul c:\temp.

8. Sa se afiseze lista fisierelor din directorul curent si, recursiv, din toate subdirectoarele sale.

Observatii
1. Numarul de parametrii cu care a fost apelat un fisier de comenzi se poate
determina afland care este primul parametru ce are ca valoare sirul vid.
2. Pentru a verifica daca un sir de caractere este numele unui director,
verificam daca exista fisierul nume\NUL. Aceasta se bazeaza pe faptul ca in
orice director gasim (prin testul de existenta) un fisier special cu numele NUL
3. Un fisier vid se poate crea prin comanda copy nul nume-fis
4. Un fisier de comenzi poate crea un alt fisier de comenzi, pe are in final sa-l
lanseze in executie!

http://www.cs.ubbcluj.ro/~dadi/ac/Lab
Fisiere BAT - laborator nr. I
1.Comenzi DOS mai des folosite:
-de lucru cu discul: diskcopy, sys, format, fdisk, chkdsk
-de lucru cu directoare: mkdir(md), chdir(cd), rmdir(rd), dir, path, subst
-de lucru cu fisiere: more, attrib, del, erase, deltree, fc, find, move, rename, sort, xcopy, copy, type, print
-eticheta de volum: label, vol
-alte comenzi: choice, edit, keyb, mode, cls, date, time, ver, echo,rem

2.Cerinte la laborator:Pentru fiecare problema se va scrie un fisier de comenzi DOS care va indeplini
urmatoarele cerinte:
-fisierul de comenzi va trebui sa verifice daca apelul este corect (numarul de parametri este
corespunzator) si fisierele
care trebuie tratate exista
-fisierul va rezolva problema respectiva:)
-la inceputul fisierului se va scrie in 5 randuri ca si comentarii textul problemei care se rezolva si modul
(algoritmul) de rezolvare a problemei
-pe alocuri (acolo unde este necesar) se vor insera comentarii in codul sursa (a nu se abuza, insa, de
aceste comentarii!!)
-la sfarsitul programului (sau in alt fisier), se va scrie o lista succinta cu cazurile de testare ale
programului impreuna cu output-ul lui

3.Exemplu de program:

REM 1. Sa se scrie un fisier de comenzi care primeste ca si parametrii un nume de director


REM si o lista de fisiere. Se va creea in directorul curent un nou fisier cu numele toate.txt
REM care va include continutul tuturor fisierelor specificate in lista de parametrii si care
REM exista in directorul specificat ca si prim parametru.

REM Vom retine in variabila "d" primul parametru, adica directorul. Apoi facem un SHIFT pentru
REM a trece la urmatorul parametru. Apoi, intr-o structura repetitiva vom parcurgem restul
REM parametrilor si pentru fiecare testam existenta in directorul "d", iar in caz afirmativ
REM ii vom adauga continutul (cu TYPE) la sfarsitul fisierului toate.txt (prin redirectarea
REM iesirii standard)

@echo off
REM verificam numarul de parametrii
if "%2"=="" goto err1
REM verificam daca primul parametru e nume de director si il retinem in variabila "d"
if NOT EXIST %1\NUL goto err2
set d=%1
shift
REM parcurgem ceilalti parametrii din linia de comanda
:loop
if "%1"=="" goto end
REM verificam daca exista %d%\%1 si in caz afirmativ il concatenam la toate.txt
if EXIST %d%\%1 type %d%\%1 >>toate.txt
shift
goto loop

:err1
echo Trebuie minim doi parametrii!
goto end
:err2
echo Primul parametru trebuie sa fie nume de director
:end
REM afisam continutul fisierului toate.txt
type toate.txt

REM Cazuri de testare:


REM 1)C:\lab1.bat
REM Trebuie minim doi parametrii!!

REM 2)C:\lab1.bat dir1 a.txt b.txt c ex1.pas tpc.exe


REM ...se va afisa continutul fisielor din lista de parametrii care se afla in directorul dir1

 Probleme

P1. Se cere un fisier de comenzi COMPILE.BAT care compileaza


toate programele PASCAL ale caror nume sunt date ca si parametri.
Programul va verifica daca fisierele exista si va afisa un mesaj in caz
de eroare. Dupa compilare se vor lansa in executie (numai) programele
executabile rezultate, apoi se vor sterge rezultatele compilarii.

P2. Se cere un fisier de comenzi MULTE.BAT, care in functie de


o litera furnizata, fie face rezumatul directorului curent sau al
celui specificat, fie sterge fisierul al carui nume este dat ca
parametru, fie il tipareste pe ecran.(Indicatie: se va folosi comanda choice.com)

P3. Se cere fisierul de comenzi CPAS.BAT care, folosind


apelul CALL, compileaza toate programele C si PASCAL din
directorul curent.

P4. Sa se afiseze lista fisierelor si subdirectoarelor


existente intr-un director specificat ca si parametru. Daca la apel se
specifica un al doilea parametru, acesta va fi considerat ca si extensia
fisierelor care vor trebui luate in considerare si acestea vor fi tiparite
in ordinea in care apar, in caz contrar se vor considera toate fisierele si
subdirectoarele, si acestea se vor afisa sortate.

P5. Sa se conceapa un fisier de comenzi DADUBLE.BAT care sa


primeasca oricati parametri si sa afiseze valorile parametrilor
vecini care coincid.

P6. Sa se scrie un fisier de comenzi care sa primeasca oricati


parametri. Se cere stergerea din directorul curent a tuturor fisierelor
ce au extensiile date ca parametri.

P7. Sa se scrie un fisier de comenzi care creeaza 3 directoare


a caror nume sunt primii 3 parametri din linia de comanda si copiaza
toate fisierele Pascal in primul director, toate fisierele .exe in
al doilea director si toate fisierele text in al treilea director.

P8. Se da un nume de director si o lista de fisiere (ca si parametrii).


Sa se scrie un fisier .bat care din lista de fisiere va afisa acelea care sunt
continute in directorul dat.

P9. Sa se scrie un fisier de comenzi care pentru un fisier dat


ca parametru afiseaza urmatorul meniu:
1. Afisare
2. Stergere
3. Iesire
si executa operatia aleasa.(Indicatie: se va folosi comanda choice.com)
P10. Sa se scrie un fisier de comenzi care cauta un cuvant dat
ca si prim parametru in fiecare din fisierele date de asemenea ca si
parametri. Pentru fiecare fisier, se va afisa numarul liniilor in
care acest cuvant apare.

P11. Se cere un fisier de comenzi care verifica daca exista


un anumit fisier furnizat ca si parametru. Daca da, atunci sa se
afiseze structura de directoare din A:, altfel sa se
formateze discheta din A: la capacitatea de 360Ko.

P12. Se cere un fisier de comenzi care primeste ca si parametri un


nume de director si un nume de fisier pentru care afiseaza meniul:
1. Copiaza fisierul in director
2. Sterge directorul impreuna cu toate fisierele si subdirectoarele proprii
si executa operatia aleasa.(Indicatie: se va folosi comanda choice.com)

P13. Se cere un fisier de comenzi care dupa cererea explicita de


introducere a dischetei in unitate face formatarea acesteia la capacitatea
de 360 Ko iar apoi copiaza pe ea toate fisierele date ca parametri.

P14. Sa se scrie un fisier de comenzi care primeste un numar par de


parametri astfel: fiecare pereche de parametri reprezinta un nume de fisier
si un nume de director. Fiecare fisier va fi mutat in directorul ce-l urmeaza
in lista de parametri.

P15. Sa se scrie un fisier de comenzi care primeste un numar par de


parametri astfel: fiecare pereche de parametri reprezinta un cuvant si un
nume de fisier. Se va afisa numarul liniilor din fisier care contin cuvantul
respectiv pentru fiecare pereche de parametri.

Fisiere BAT - laborator nr. II

1.Cerinte la laborator:Pentru fiecare problema se va scrie un fisier de comenzi DOS care va indeplini
urmatoarele cerinte:
-fisierul de comenzi va trebui sa verifice daca apelul este corect (numarul de parametri este
corespunzator) si fisierele
care trebuie tratate exista
-fisierul va rezolva problema respectiva:)
-daca este necesar, se va scrie si cate un program Pascal (C sau ASM) care va intoarce coduri
corespunzatoare,
 ale caror valori sa fie testate in fisierul de comenzi.
-la inceputul fisierului se va scrie in 5 randuri (ca si comentarii) textul problemei care se rezolva si
modul (algoritmul) de rezolvare a problemei
-pe alocuri (acolo unde este necesar) se vor insera comentarii in codul sursa (a nu se abuza, insa, de
aceste comentarii!!)
-la sfarsitul programului (sau in alt fisier), se va scrie o lista succinta cu cazurile de testare ale
programului impreuna cu output-ul lui

2.Exemplu de program:

REM Sa se conceapa un fisier de comenzi COMPARA.BAT care primeste ca parametri doua nume de
fisiere. Daca ambele fisiere
REM exista, atunci acestea sa fie comparate (ca dimensiune), altfel sa se dea un mesaj corespunzator.
Programul va calcula dimensiunea
REM celor doua fisiere fara a folosi pentru aceasta comanda DOS comp.

REM Vom folosi comanda IF, varianta cu ERRORLEVEL. Astfel, scriem un fisier BAT care va apela un
program pascal (in format
REM executabil) care va compara dimensiunea celor doua fisiere si in functie de rezultat va intoarce
urmatoarele coduri de retur:
REM 1 - fisierul 1 este mai mare decat fisierul 2
REM 2 - fisierul 1 are aceeasi dimensiune ca fisierul 2
REM 3 - fisierul 1 este mai mic decat fisierul 2
REM Apoi, in functie de codul de retur, cu ajutorul lui IF ERRORLEVEL vom tipari un mesaj
corespunzator

@echo off
REM daca nu avem parametrii sar la sfarsit
if !%1==! goto end
if !%2==! goto end
REM daca nu exista fisierele furnizate ca si parametrii sar la sfarsit
if not exist %1 goto end
if not exist %2 goto end
REM apelez programul compar.exe cu parametrii cele doua nume de fisiere
REM (folosesc call pentru ca executia sa revina in fisierul bat) si in
REM functie de codul de retur afisez mesaje corespunzatoare.
REM De notat, folosirea codurilor de retur in ordine descrescatoare (4,3,2,1)!
call compar.exe %1 %2
if errorlevel 4 goto et4
if errorlevel 3 goto et3
if errorlevel 2 goto et2
if errorlevel 1 echo fisierul %1 este mai mare decat fisierul %2
goto end
:et4
  echo Eroare interna
  goto end
:et3
  echo fisierul %1 este mai mic decat fisierul %2
  goto end
:et2
  echo fisierul %1 are aceeasi dimensiune ca fisierul %2
:end

REM Cazuri de testare:


REM 1)C:\compara.bat file1
REM Trebuie minim doi parametrii!!

REM 2)C:\compara.bat file1 file2


REM fisierul file1 este mai mare decat fisierul file2

Programul care va compara dimensiunea celor doua fisiere este un program pascal, compar.pas, (in
format executabil) care va fi compilat
cu tpc (C:\temp>tpc compar.pas). Vom folosi urmatoarele functii mai speciale:
ParamCount - numarul de parametri din linia de comanda
ParamStr(i) - al i-lea parametru din linia de comanda
Halt(n) - iese din program cu codul de retur n
program compara;

var
  f1, f2: file;
  size1, size2 : Longint;
begin
  { verificam daca am primit destui parametrii in linia de comanda }
  if (ParamCount<2) then begin
     writeln('Nu am primit destui parametrii!');
     halt(4);
  end;
  { deschidem cele doua fisiere si ne pozitionam la inceputul lor }
  Assign(f1, ParamStr(1));
  Assign(f2, Paramstr(2));
  Reset(f1);
  Reset(f2);
  { calculam dimensiunea fisierelor }
  size1 := FileSize(f1);
  size2 := FileSize(f2);
  { comanda Halt(n) iese din program cu codul de retur n }
  if (size1>size2) then
     halt(1) { fisierul 1 este mai mare decat fisierul 2 }
  else if (size1=size2) then
           halt(2) { fisierul 1 are aceeasi dimensiune ca fisierul 2 }
       else
           halt(3);  { fisierul 1 este mai mic decat fisierul 2 }
  Close(f1);
  Close(f2);
end.

Programul care compara dimensiunea celor doua fisiere il putem scrie si in C si il compilam cu bcc
(C:\temp>bcc compar.c)
Parametrii din linia de comanda sunt accesibili in limbajul C prin doua argumente ale functiei main():
argc - numarul de parametrii din linia de comanda
argv - un sir de stringuri reprezentand parametrii din linia de comanda

#include<stdio.h>

int size(FILE* f){


  int s;
  char buf[100];

  s=0;
  fscanf(f,"%s",buf);
  //citim in bufferul buf pana cand ajungem la sfarsitul fisierului si apoi vedem cat am citit
  while(!feof(f)) {
     s=s+strlen(buf);
     fscanf(f,"%s",buf);
     }
  s=s+strlen(buf);
  return s;
}

main(int argc, char* argv[])


{
 FILE *f1,*f2;
 int size1, size2;
 if(argc<2) {
    printf("Nu avem destui parametrii!");
    exit(4);
    }
 // deschidem cele doua fisiere pentru citire
 f1=fopen(argv[1],"r");
 f2=fopen(argv[2],"r");
 //calculam dimensiunile celor doua fisiere si apoi le compar
 size1=size(f1);
 size2=size(f2);
 //functia exit(n) iese din program cu codul de retur n
 if(size1>size2)
      exit(1); //fisierul 1 este mai mare decat fisierul 2
 else if(size1==size2)
           exit(2); //fisierul 1 are aceeasi dimensiune ca fisierul 2
      else
           exit(3); //fisierul 1 este mai mic decat fisierul 2
}

  P1. Sa se scrie un fisier de comenzi SAVE.BAT care primeste ca


parametru un tip de fisier (o extensie) si salveaza pe discheta A: toate
fisierele de acest tip aflate in directorul curent, daca eticheta de
volum coincide cu un sir dat ca parametru. Programul va cere explicit
introducerea dischetei in unitate.

     P2. Sa se scrie un fisier de comenzi AFIS.BAT care sa afiseze


un mesaj de salut corespunzator in functie de perioada de zi
curenta ('Buna dimineata', 'Buna ziua' respectiv 'Buna seara').

     P3. Sa se conceapa un fisier de comenzi PRIM.BAT care


primeste ca parametru un numar natural. Programul va verifica daca numarul
respectiv este prim sau nu.

     P4. Sa se scrie un fisier de comenzi care sa schimbe numele


fisierelor *.BAK in  *.TXT, daca exista mai  mult de 5 astfel de
fisiere in directorul curent.

     P5. Sa se scrie un fisier de comenzi care sa afiseze daca numarul de


octeti liberi de pe discul implicit este mai mare decat o valoare
data ca si parametru.

     P6. Sa se scrie un fisier de comenzi care in functie de litera


data ca si parametru, sa schimbe unitatea implicita in cea specificata.
Apoi sa se stearga din noua unitate, toate fisierele de tip *.BAK si sa
se afiseze toate fisierele din unitate care sunt create la o anumita data,
data ca si parametru.

     P7. Sa se verifice daca exista fisierele A, B, ... , F (in directorul curent) si
daca acestea sunt directoare. Sa se creeze structura partiala de
directoare A\B\C\D\E; A\B\C\D\F, recreand directoarele  care nu exista.

     P8. Sa se ordoneze alfabetic toate fisierele (continutul lor) de tip *.TXT, date ca
si
parametri (nu toti parametri sunt fisiere de tip *.txt), rezultatul
fiind fisierele corespunzatoare de tip *.ALF.

     P9. Se cere un fisier de comenzi MS-DOS care primeste ca parametri un numar
oarecare
de siruri de caractere. Daca printre parametri se afla cel putin doua nume de
directoare
sa se creeze un al treilea director cu numele dat ca parametru (daca el nu exista
deja).
In acest director sa se obtina un fisier cu numele COMPLET.TXT prin
concatenarea tuturor
fisierelor (a continutului) din cele doua directoare si a caror nume este dat ca
parametru.

Ex: > fis.bat  numedir  abc  v_#7?  dir1  secv  abc.txt  37a@x  dir2  abc.txt  a---a

        va crea directorul numedir (daca el nu exista) si va construi fisierul


COMPLET.TXT
        prin concatenarea fisierelor din directoarele dir1 si dir2 ale caror nume se
        gasesc printre parametrii dati (abc.txt se va concatena de 2 ori).

Obs. Problema se va solutiona exclusiv prin directive si comenzi MS-DOS.

     P10. Se cere un fisier de comenzi care primeste un numar oarecare de


parametri.
Primul parametru reprezinta un nume de director. Daca in lista urmatorilor
parametri
exista cel putin 2 nume de fisiere care se afla in directorul dat ca prim parametru,
atunci sa se creeze un al doilea director cu numele dat ca parametru (daca el nu
exista
deja) si sa se copieze cele 2 fisiere in el.

Obs. Problema se va solutiona exclusiv prin directive si comenzi MS-DOS.

     P11. Se cere un fisier de comenzi care primeste ca si parametri un numar


oarecare de
siruri de caractere. Daca exista cel putin 2 parametri egali cu primul parametru,
atunci se
va crea un nou director cu acest nume (daca nu exista) iar in fisierul date.txt creat
in acest
director vor fi scrisi ceilalti parametri din linia de comanda.

Obs. Problema se va solutiona exclusiv prin directive si comenzi MS-DOS.

     P12.  Se cere un fisier de comenzi care primeste ca si parametri un numar


oarecare de
siruri de caractere. Daca in lista de parametri apare sirul "225" atunci se cauta in
restul
parametrilor numele de fisiere care exista in directorul curent si daca acestea sunt
cel
putin 2, vor fi afisate toate sirurile de caractere ramase in lista parametrilor,
acestea
nereprezentand nume de fisiere din directorul curent.
Obs. Problema se va solutiona exclusiv prin directive si comenzi MS-DOS.

     P13. Se cere un fisier de comenzi care primeste in linia de comanda


oricati parametri. Daca numarul de parametri este par, se vor copia intr-un
director PAR toate fisierele din linia de comanda care sunt parametri de ordin
par, iar daca numarul de parametri este impar se vor copia intr-un director
IMPAR toate fisierele din linia de comanda care sunt parametri de ordin
impar.

Obs. Problema se va solutiona exclusiv prin directive si comenzi MS-DOS.

      P14. Se cere un fisier de comenzi care primeste oricati parametri in


linia de comanda reprezentand nume de fisiere si directoare. Daca al 4-lea
parametru este
un nume de director care apare de cel putin alte doua ori in sirul parametrilor din
linia de comanda atunci se vor sterge toate fisierele si directoarele din
linia de comanda, mai putin cel care are numele celui de-al patrulea
parametru.

Introducere in limbajul de asamblare 8086


- laboratorul 3
1. Utilizarea programelor tasm, tlink, td

tasm - este un asamblor, traduce un program scris in limbaj de asamblare in format obiect (fisier.asm ->
fisier.obj)
       - lansat fara parametri furnizeaza sintaxa corecta
        - exemplu de utilizare : tasm exemplu sau tasm exemplu.asm

tlink - editor de legaturi transforma un fisier din format obj in format executabil. Poate sa grupeze mai
multe fisiere obj intr-un singur program executabil.
        - fis1.obj + fis2.obj + ... -> fisier.exe (sau fisier.com)
        - lansat fara parametri furnizeaza sintaxa corecta
        - ex. de utilizare : tlink exemplu sau tlink exemplu.obj
        - optiuni mai importante: /v, /t

Odata obtinut programul executabil, acesta se poate lansa in executie.

td    - este un depanator, un program care permite rularea pas cu pas a programelor executabile.
       - ex. de utilizare td exemplu sau td exemplu.exe
       - TD permite doua tipuri de depanare:
        1. Depanare la nivel de limbaj masina - aceasta este posibila pentru orice program executabil, exe
sau com.
        2. Depanare la nivel de limbaj sursa - posibila pentru acele programe executabile care includ
informatii de depanare si pentru care este prezent fisierul sursa.

OBSERVATIE

Pentru depanare la nivel de limbaj Pentru depanare la nivel de limbaj


masina vom folosi: sursa vom folosi:
...> tasm exemplu ...> tasm /zi exemplu
...> tlink exemplu ...> tlink /v exemplu
...> td exemplu ...> td exemplu

       Urmarirea programului cu Turbo Debugger se va face in fereastra CPU (se deschide din meniul
View|CPU).
Aici avem continutul registrilor si flagurilor procesorului si programul ce se executa.Acesta este prezentat
atat in limbaj de asamblare cat si direct in cod masina (adica, octet cu octet, continutul memoriei),
continutul segmentului de date (in hexa) si continutul stivei.
Putem pozitiona zona vizibila din program, zona de date si stiva folosind comanda Go to din meniul local
al ferestrei (meniul activat cu Alt-F10).
De asemenea, putem afla sau modifica valoarea unei variabile, folosind fereastra de dialog
Evaluate/Modify (deschisa cu Ctrl-F4)

2.Un exemplu minimal de program in limbaj de asamblare

; spunem asamblorului care sunt segmentele folosite de noi


ASSUME cs: code, ds:data
; data - segmentul de date in care vom defini variabilele
data SEGMENT
a db 7             ; a este un octet(byte)
b dw 10           ; b este un cuvant (word -2 bytes)
c db 3,5,6,1 ; c e un sir de octeti
data ENDS
;code - numele segmentului de cod
code SEGMENT
start:
mov ax,data        ; pentru a sti care e segmentul de date, mutam in registrul ds
mov ds,ax        ; adresa segmentului de date, si pentru ca nu putem face asta direct
folosim intermediar registrul ax
; .......
;aici avem instructiunile programului nostru
;........
mov ax,4C00h
int 21h
; e apelata intreruperea 21, cu ah incarcat cu 4C,adica sfarsitul executiei, si se
returneaza codul de eroare al=00, adica
; executie cu succes
code ENDS
END start

Pentru neclaritati privind instructiunile si directivele consultati Norton Guide-ul.

3. Un exemplu concret : evaluarea expresiei aritmetice a*b+c.

; Sa se evalueze expresia a*b+c

; am considerat a si b ca fiind octeti iar c cuvant, rezultatul tinandu-l in rez , si


acesta cuvant.

ASSUME cs:text_,ds:data_

data_ SEGMENT
a db 4
b db 4
c dw 123
rez dw ?
data_ ENDS

text_ SEGMENT

start:
mov ax, data_
mov ds, ax
; Evaluarea propriu-zisa a expresiei
mov al, a         ; al = a
mul b        ; ax = a*b
add ax, c        ; ax = a*b+c
mov rez, ax        ; rez= a*b+c
; Terminarea programului
mov ax, 4c00h
int 21h
text_ ENDS

END start

; cazuri de utilizare : a=3,b=5,c=12-->rez=27

4. Cerinte la laborator:

1. Generati program executabil din sursa prezentata in mai sus.


2. Urmariti pas cu pas executia programului (in Turbo Debugger). Urmariti continutul registrilor in acest
timp.
3. Tot in executia pas cu pas a programului, urmariti continutul segmentului de date. Pentru aceasta,
activati (cu Shift-sageata jos) zona de date a ferestrei CPU, activatati meniul local (Alt-F10) si dati
comanda Go to. In fereastra ce se deschide, dati ds:0. Urmariti primii octeti din segmentul de date pe
parcursul executiei programului.
4. Pozitionati afisarea zonei de date pe cs:0 Comparati cu ceea ce se afiseaza in zona de cod.
5. Modificati programul in asa fel incat variabilele sa fie reprezentate pe 16 biti si initializati-le cu valori
mai mari (de ordinul 1000). Repetati exercitiile 1-4.

S-ar putea să vă placă și