Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Laborator informatica
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

Laborator 1

/////////////////////////////////////////////////////////////// c8c24ci
Despre reprezentarea datelor. Codificare si aritmetica binara
///////////////////////////////////////////////////////////////

__ Cuvinte cheie __

bit, cuvint, octet, reprezentare cu semn, cod complementar, extindere cu semn, depasire, codificare, cod ASCII

Sistemul de numere cu care suntem obisnuiti este sistemul in baza 10. Un calculator insa, trateaza informatie binara, adica numere scrise in baza 2, formate doar din cifrele 0 si 1, numite
BITi (BInary digiT - cifra binara). Cele doua cifre, 0 si 1, corespund starilor "on " si "off " ale unui switch electronic.

In mod natural, oricarui utilizator ii este mult mai usor sa citeasca informatie exprimata in caractere alfanumerice (litere, numere, semne de punctuatie). De aceea se pune problema introducerii unei corespondente intre reprezentarea alfanumerica
(convenabila unui om) si reprezentarea binara necesara unui calculator pentru reprezentarea interna a datelor (fie acestea numere sau caractere). In aceasta idee, mai multe sisteme si scheme de codificare au fost folosite. Noi vom discuta unitatile de baza folosite de un microprocesor pentru reprezentarea datelor (bit, octet, cuvint), vom invata sa manevram aceste unitati, apoi vom examina unul din cele mai folosite sisteme de codificare a caracterelor alfanumerice, numit ASCII.

____ Sisteme numerice ____

In general, orice intreg pozitiv N descris intr-o baza B ca un sir de cifre in acea baza (in multimea A0, ... , B-1S) in forma
A(n)A(n-1)...A(1)A(0) se poate exprima conform formulei:

N = A(n)*B^(n) + A(n-1)*B^(n-1) + ... + A(1)*B + A(0)

(simbolul "*" este folosit pentru inmultire, iar notatia B^(i) inseamna B la puterea i)

In baza 2, evident, orice intreg pozitiv va fi exprimat astfel:




N = A(n)*2^(n) + A(n-1)*2^(n-1) + ... + A(1)*2 + A(0)

unde A(i), i in A0, 1, ..., nS sunt 0 sau 1.

De exemplu, numarul 53 (in baza 10) este exprimat in baza 2 ca 110101. Conversia unui numar din baza 2 in baza 10 se face usor, iar pentru exemplul nostru, conform a ce urmeaza:

110101 (baza 2) = 1*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2 + 1 =
= 32 + 16 + 0 + 4 + 0 + 1 =
= 53.

Evident, numerele binare pot fi adunate, scazute, inmultite, impartite fara a fi nevoie de o conversie in baza 10. De exemplu:

1001+ reprezentarea binara a lui 9
101 reprezentarea binara a lui 5
---- 1110 reprezentarea binara a lui 14

Iata tabelele operatiilor de adunare si inmultire in baza 2:


+ | 0 | 1 | * | 0 | 1 |
------------ ----------- 0 | 0 | 1 | 0 | 0 | 0 |
------------ ----------- 1 | 1 | 10| 1 | 0 | 1 |
------------ ------------

Exista o alta baza frecvent folosita in informatica, anume baza 16. Aceasta pentru ca ea permite scrierea condensata a secventelor lungi de biti (care pot provoca erori sau confuzii).
Acest sistem numeric, numit hexazecimal, necesita 16 cifre distincte, 0, 1..., 9, la care sunt adaugate literele A, B, C, D,
E si F, corespunzind numerelor 10, 11, 12, 13, 14, 15 (in baza 10) respectiv.

Asadar,

C2 (baza 16) = C*16^1 + 2*16^0 = 194 (baza 10)

In cele ce urmeaza, pentru a evita confuzia, numerele hexazecimale vor fi urmate de litera "h" iar cele binare, de "b". De exemplu:

C2 h = 1100 0010 b = 194

Practic, scrierea in baza 16 permite gruparea bitilor cite 4, fiecare grup de patru fiind reprezentat de un singur caracter. Conversia intre cele doua baze, 16 si 2, se face extrem de usor; sa luam ultimul exemplu: cifra Ch este 1100b, iar 2h este 0010b; C2h se obtine prin alaturarea celor doua grupuri de 4, deci 1100 0010b.

Un calculator manipuleaza secvente de biti de o lungime data
(8, 16, 32,... biti), functie de posibilitatea sa de a trata SIMULTAN
8, 16, 32,... biti. Aceste numere se numesc cuvinte. Microprocesoarele din familia 8086, de exemplu, manipuleaza cuvinte de 8 biti, numite octeti ("byte" in engleza). Iata cum este reprezentat numarul zecimal
57 (39h, 0011 1001b) intr-un octet:

7 6 5 4 3 2 1 0
___ ___ ___ ___ ___ ___ ___ ___
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
|___|___|___|___|___|___|___|___|
| | | | | | | |
| | | | | | | ------> 1 * 1
| | | | | | |
| | | | | | ----------> 0 * 2
| | | | | |
| | | | | --------------> 0 * 4
| | | | |
| | | | ------------------> 1 * 8
| | | |
| | | ----------------------> 1 * 16
| | |
| | --------------------------> 1 * 32
| |
| ------------------------------> 0 * 64
|
----------------------------------> 0 *128
------- 57

Presupunind acum ca un calculator trateaza cuvinte de n biti, cu n intreg pozitiv, se pune intrebarea: cite configuratii posibile
(adica numere formate din 0 si 1) pot fi reprezentate pe n biti?

Pentru n=1, exista doua configuratii posibile:
___ ___
| 0 | si | 1 |
--- ---

Pentru n=2, exista 4 configuratii posibile:

___ ___
| 0 | 0 | ,
--- -- ___ ___
| 0 | 1 | ,
--- -- ___ ___
| 1 | 0 | si
--- -- ___ ___
| 1 | 1 |
--- --- etc.

Se poate arata usor ca numarul de configuratii posibile reprezentabile pe n biti este 2 la puterea n. Asadar, un octet va permite reprezentarea a 2 la puterea 8 (deci 256) configuratii diferite, iar un cuvint pe
16 biti - 2 la puterea 16 (deci 65536) configuratii diferite. De ce intereseaza acest numar? De exemplu pentru a sti care este domeniul numerelor intregi pozitive reprezentabile pe un octet, pe doi octeti, pe un cuvint, s.a.m.d.

Notatia binara este perfecta pentru descrierea numerelor pozitive; in cazul in care sunt necesare numere negative, avem nevoie de un mecanism suplimentar pentru a indica semnul. Cel mai simplu mod de a face aceasta este de a folosi (in cadrul unui octet) cel mai semnificativ bit (cel din extrema stinga) in acest scop. In reprezentarea cu semn, daca acest bit este 0 numarul este pozitiv iar daca este 1, numarul este negativ. Conform acestor afirmatii, avem

0000 0100 b = +4
1000 0100 b = -4

Totusi aceasta reprezentare are un dezavantaj. De exemplu, daca am incerca sa adunam numerele de mai sus, rezultatul nu ar fi 0 ci -8 (in reprezentarea cu semn); ori daca scadem 1 din 0, rezultatul va fi 1111 1111b (-127) si nu 1000 0001b. Altfel spus, ar trebui modificate regulile aritmetice. Daca vrem sa folosim aceeasi aritmetica binara pentru numere cu semn ca si pentru cele fara semn, avem nevoie de o reprezentare in care 1111 1111b sa reprezinte -1 si nu -127.
Deci ar trebui sa reprezentam numerele dupa cum urmeaza:

...

0000 0011 b +3
0000 0010 b +2
0000 0001 b +1
0000 0000 b 0
1111 1111 b -1
1111 1110 b -2
1111 1101 b -3

...

Aceasta reprezentare se numeste reprezentare in cod complementar si are proprietatea ca adunarile si scaderile vor da rezultat corect in cod complementar, iar bitul cel mai semnificativ este bit semn.
Semnul unui numar in cod complementar poate fi schimbat prin adunarea cu 1 la numarul obtinut din cel initial prin modificarea valorii fiecarui bit. De exemplu, -3 poate fi obtinut din 3 astfel:

0000 0011b +3 in cod complementar
--------- 1111 1100b+ +3 cu fiecare bit modificat
0000 0001b +1 in cod complementar
--------- 1111 1101b -3 in cod complementar

Trebuie retinuta inca o observatie despre numerele in cod complementar: daca un numar reprezentat pe un octet trebuie extins la 16 biti (de pilda ca sa poata fi adunat cu un numar in cod complementar pe 16 biti) este necesara o mica precautie in legatura cu cei 8 biti suplimentari. In cazul numerelor pozitive lucrurile stau simplu; daca vrem sa adunam 0000 0001b la
0000 0000 0000 0011b, vom adauga 8 de 0 la stinga lui +1 iar adunarea va da rezultatul corect. Totusi daca vrem sa adunam FFh (-1) la 0003h, pentru ca rezultatul sa fie corect, trebuie sa adaugam 8 de 1 la stinga lui -1, altfel numarul s-ar transforma intr-unul negativ.
Regula este asadar evidenta: extinderea unui numar in cod complementar se face prin adaugarea unor biti suplimentari cu aceeasi valoare ca ai bitului semn. Acest procedeu se numeste extindere cu semn.

Sa presupunem ca lucram pe un calculator imaginar care poate reprezenta numere intregi pe un octet. Asadar, domeniul numerelor intregi cu care se pot face calcule este 0 ... 255 pentru numere intregi pozitive si -128 ... +127 pentru numere cu semn. In contextul in care rezultatul unei operatii poate iesi in afara domeniului dat, trebuie fixata notiunea de depasire. De exemplu, adunind 7 cu 125
(considerate ca numere cu semn), rezultatul va fi irelevant (rezultat negativ la adunarea a doua numere pozitive).

0000 0111b+
0111 1101b
---------- 1000 0100b

Pentru a controla situatiile de acest gen, de obicei exista niste indicatori specializati care semnaleaza depasiri in cadrul instructiunilor aritmetice. De altfel, asupra acestei chestiuni vom reveni in laboratoarele viitoare. Ce trebuie sa retinem de aici este notiunea de depasire si faptul ca ea poate (si este indicat a) fi detectata.

__ Codificare __

Pentru a introduce notiunea de codificare a datelor, sa consideram un exemplu foarte simplu. Sa presupunem ca o anumita problema pe care dorim sa o rezolvam necesita folosirea a cinci culori: negru, alb, albastru, rosu si verde. Sa mai presupunem ca implementam o solutie pentru problema in cauza pe un calculator imaginar care manipuleaza cuvinte de 3 biti. Un exemplu de codificare al culorilor ar putea fi:

albastru - 000 rosu - 001 alb - 010 negru - 011 verde - 100

Sa observam ca am folosit doar 5 configuratii binare din cele 8 posibile. Practic, o asemenea codificare este doar o conventie care are sens pentru noi, cei care o stabilim.

Fiind data o multime de obiecte care trebuiesc tratate si multimea configuratiilor binare reprezentabile pe un cuvint de n biti, codificarea este stabilirea unei functii injective intre multimea obiectelor de tratat si multimea configuratiilor binare.

Anumite obiecte frecvent utilizate au nevoie de codificare.
Este tocmai cazul caracterelor alfanumerice (litere, cifre, semne de punctuatie, caractere speciale), pentru care se cunosc mai multe sisteme de codificare utilizate: BCD (Binary Coded Decimal), EBCDIC
(Extended Binary Coded Decimal Interchange Code) si ASCII (American
Standard Code for Information Interchange). Ne vom opri putin asupra sistemului de codificare ASCII.

Ca un minim, avem nevoie sa putem reprezenta 26 litere si 10 cifre, deci 36 caractere. Dar ne-ar place, de asemenea, sa putem distinge intre literele mari si cele mici (alte 26 caractere) si sa putem reprezenta citeva caractere speciale (+, =, *, %, A, S, a, i, etc.).
In concluzie avem macar 64 de caractere, deci avem nevoie de 7 biti pentru a le reprezenta (pe 6 biti putem reprezenta 64 configuratii, de la 0 la 63). Codificarea ASCII foloseste 7 biti pentru caractere, de fapt un octet, un bit fiind folosit pentru detectarea erorilor.
Iata citeva exemple de caractere, cu codurile ASCII atasate:

A 0100 0001
B 0100 0010
...
Z 0101 1100
...
0 0011 0000
1 0011 0001
...
( 0010 1000
) 0010 1001
...

Accentuam urmatorul aspect: codificarea CARACTERULUI 1 de exemplu
(31h, 49 in baza 10, conform listei de mai sus), nu are nici o legatura cu reprezentarea interna a NUMARULUI 1 (01h).
Inainte de a incheia, sa mai subliniem un lucru: ceea ce cititi dv. acum este un fisier text, adica unul care contine caractere alfanumerice.
Orice fisier, ca forma de inmagazinare si organizare a datelor pe un dispozitiv de stocare extern (hard-disk, disc floppy), este un sir de 0 si 1. Este treaba calculatorului sa citeasca datele din fisier, sa le "decodifice" conform codului ASCII si sa afiseze pe ecran caracterele cu care sunteti familiarizati. Exista fisiere care nu contin un text, de exemplu fisierele executabile. Mediul de programare Turbo
Pascal de care va folositi ca sa cititi, eventual sa modificati continutul acestui fisier, este pe hard-disk sub forma de fisier, cu numele
"turbo.exe". El este un program care contine, printre altele, descrierea instructiunilor (in 0 si 1) pe care, la lansarea sa in executie, masina trebuie sa le execute, una dupa alta. Desigur, pentru descrierea acestor instructiuni in 0 si 1, exista de asemenea un mecanism de codificare.
Incercati sa vedeti un asemenea fisier. Este indoielnic ca va va comunica ceva.

INTREBARI SI EXERCITII:

1. Convertiti din baza 2 in baza 10 secventa 1100 0011b. Considerati ambele cazuri, numar cu semn si numar fara semn in reprezentarea cu semn si in cea in cod complementar.

2. Imaginati o metoda de conversie din baza 10 in baza 2 si demonstrati matematic corectitudinea ei. (indicatie: folositi teorema impartirii cu rest)

3. Construiti o tabela cu trei coloane: in prima completati cu cifrele bazei 16, in a doua cu numerele corespondente reprezentate in baza 2, iar in ultima cu numerele corespunzatoare in baza 10.

4. Utilizind tabela mentionata in intrebarea 4, convertiti in baza doi numerele FFh, A4h, 8Bh, 23h.

5. Utilizind aceeasi tabela, convertiti in baza 16 numerele
10101110b, 00111010b, 11011000b.

6. Aratati ca numarul de configuratii posibile reprezentabile pe n biti este 2 la puterea n.

7. Schimbati semnul urmatoarelor numere, in cod complementar:
0100 1100b, 1101 0100b, 0111 1111b specificind corespondentele lor in baza 10.

8. Efectuati urmatoarele operatii in cod complementar:
24h + A8h, FEh + 997Bh, FD45h-20h.

9. Presupunind ca puteti reprezenta numere intregi pozitive pe numai un octet, in care din cazurile urmatoare obtineti depasire?
09h + 7Ch, 07h + F9h, 87h + F5h.

10. Presupunind ca puteti reprezenta numere intregi in cod complementar pe numai un octet, in care din cazurile urmatoare obtineti depasire?
A6h + F1h, 16h + 7Ch, 64h - FFh.

11. Fiind data o codificare in care toate caracterele reprezentind cifre se afla in pozitii consecutive (si asa este in codificarea ASCII) si ca lui 0 ca si caracter ii corespunde codul 30h, stabiliti o formula cu ajutorul careia sa puneti in corespondenta caracterele exprimind cifrele sistemului zecimal cu valorile lor numerice (in baza 10).

12. In aceleasi conditii ca in problema precedenta, stabiliti o formula cu ajutorul careia sa convertiti un sir de caractere exprimind un numar la valoarea sa numerica, in baza 10.

13. Cite cifre 1 sunt in reprezentarea binara a numarului zecimal
512 + 64 + 16 + 8 + 1 ?

14. Cite cifre 1 sunt in reprezentarea binara a numarului zecimal
9 * 256 + 3 * 16 + 1 ?

15. Scrieti formula de calcul pentru transformarea din codul ASCII corespunzator unei litere mici in codul ASCII corespunzator literei mari, stiind ca literele mari se afla inaintea literelor mici, pe pozitii consecutive. Sunt suficiente datele primite pentru a raspunde?

16. Daca ar trebui codificata o multime de 108 simboluri, pe citi biti va trebui sa facem reprezentarea codului unui simbol ?

17. Cite cifre semnificative (fara cifre 0 la stinga) are reprezentarea binara a valorii 2^3? Dar valoarea 2^9? Generalizati pentru 2^n.

18. Presupunind ca aveti nevoie sa lucrati in sistemul numeric in baza 8, cu cifre in multimea A0, 1, 2, ... , 7S (numit octal), construiti tabelele operatiilor de adunare si inmultire.
Efectuati urmatoarele conversii din sistemul octal in sistemul zecimal:
32o + 62o +12o, 17o+45o, 56o - 34o.

Laborator 2

/////////////////////////////////
Sistemul de operare DOS. Comenzi
/////////////////////////////////

___ Cuvinte cheie ___

fisier, director, director radacina, director curent, director parinte, interpretor de comenzi, comenzi interne, comenzi externe, indirectarea intrarii/iesirii standard filtre DOS

___ Introducere ___

Sistemul de operare DOS este destinat gestionarii resurselor hardware si software ale microcalculatoarelor cu arhitectura compatibila IBM PC, bazate pe microprocesoarele din familia 8086. Este un sistem de operare monoutilizator (un singur utilizator il poate folosi la un moment dat) si monotasking (la un anumit moment, poate rula un singur proces si el utilizeaza toate resursele masinii) si asigura o interfata relativ simpla om - sistem de calcul. Versiunea pe care dv. o veti utiliza este MS-DOS V3.30.
Dupa ce sistemul de operare a fost incarcat, se incarca si se preda controlul fisierului executabil COMMAND.COM. Acest program este numit interpretor de comenzi si este destinat prelucrarii comenzilor DOS, actionind ca o interfata intre utilizator si sistemul de operare.
In cele ce urmeaza vor fi descrise pe scurt comenzile sistemului de operare MS-DOS cel mai des utilizate.

___ Fisiere si directoare DOS ___

Un fisier este un mod de inmagazinare si organizare a datelor pe un dispozitiv de stocare extern (de exemplu disc dur, disc flexibil, banda magnetica, etc.). Orice fisier este identificat printr-o specificare de fisier.

In DOS, aceasta specificare contine si secventa "numea.extensiei"
(ceea ce apare scris intre paranteze drepte are semnificatia de "optional", deci prezenta extensiei nu este obligatorie), unde:
- nume este numele fisierului, compus din 1-8 caractere;
Aceste caractere pot fi oricare dintre caracterele ASCII, mai putin
. " / \ a i : < > + = ; , si cele cu codul mai mic decit 21h.

- extensie este numele extensiei fisierului, compus din
1-3 caractere, precedate de un punct. Caracterele nepermise in numele unei extensii sunt aceleasi ca in numele unui fisier

De notat ca diferenta intre literele mari si cele mici este irelevanta, atita timp cit literele mici din numele unui fisier sunt convertite la litere mari.
De asemenea, numele unui fisier trebuie sa fie suficient de sugestiv asupra continutului sau (mai ales pentru cel care il foloseste). De exemplu, fisierul pe care il cititi acum are numele "lab2.txt", relevant asupra faptului ca el contine caractere ASCII (este fisier text - txt) si ca se refera la al doilea laborator ASO.

Presupunind ca la un moment dat ajungeti sa manevrati un numar foarte mare de fisiere, este foarte posibil sa aveti nevoie sa le grupati, functie de anumite criterii. Sistemul de operare DOS va pune la dispozitie posibilitatea de a grupa fisierele, organizindu-le in directoare. Practic, un director este tot un fisier, dar informatia sa se refera la numele fisierelor pe care le contine. Orice disc formatat contine macar un fisier director, numit director radacina si notat cu "\". Directorul radacina poate sa contina numele altor directoare (pe linga nume de fisiere, eventual), iar acestea pot contine la rindul lor subdirectoare, s.a.m.d., numarul fiind limitat doar de spatiul pe disc. Este evident ca structura directoarelor pe disc este o structura de arbore. Numele directoarelor respecta aceleasi reguli ca numele de fisiere.

Fiecare dintre dv. lucreaza intr-un anumit director, complet specificat la prompterul sistem. Acesta poarta numele de director curent.

Este acum momentul sa introducem ce inseamna o specificare completa de fisier :
ad:i acalei numea.exti unde nume si ext au fost detaliate mai sus, iar
- d: - este unitatea de disc pe care se afla fisierul, specificata printr-o litera. De exemplu, unitatea de disc flexibil de 3 inch pe statiile pe care lucrati are atribuita litera "a". Daca unitatea de disc nu este specificata, atunci se considera implicit a fi cea afisata in prompterul sistem.
- cale - este calea (pe structura arborescenta) catre directorul in care se afla fisierul specificat. Aceasta cale este formata dintr-un sir de nume de directoare, separate prin caracterul
"\" (backslash). In cazul in care cautarea se face incepind cu directorul radacina, primul caracter tiparit este "\". Daca acesta lipseste, cautarea se face incepind cu directorul curent.
Exista o restrictie la numele unei cai: ea nu trebuie sa depaseasca 63 de caractere.

Observatie: pot exista doua fisiere sau doua directoare cu acelasi nume daca ele au cai de specificare diferite.

Exista mai multe nume rezervate pentru echipamente standard. Amintim doar CON, nume atribuit tastaturii (ca intrare) sau monitorului, ca iesire.
Aceste nume rezervate pot fi folosite in locul numelor de fisiere, in orice comanda DOS.

In cele ce urmeaza, vom vorbi despre caracterele speciale (asa numitele
wildcard-uri, inlocuitori a orice) care pot apare in numele unui fisier, in anumite contexte. De exemplu, dati comanda DIR. Rezultatul va fi afisarea unei liste a fisierelor si directoarelor continute in directorul curent. Dar poate ca pe dv. nu va intereseaza intreaga lista ci doar citeva fisiere care au caracteristici comune (in numele lor). De pilda, v-ar putea interesa doar lista fisierelor executabile (cu extensia ".exe") ori fisierele al caror nume incepe cu secventa "ab", s.a.m.d. Exista doua caractere speciale destinate acestui scop: "*" si "?". Pentru a explica semnificatia lor ne vom folosi tot de comanda DIR. De exemplu:

dir ab?de.exe

va lista toate intrarile din directorul curent care au numele de fisier compus din 5 caractere, incepind cu AB, urmatorul caracter putind fi oricare, urmat de DE si avind extensia EXE.
Prezenta caracterului * intr-un nume de fisier sau extensie de fisier indica fapul ca, incepind cu pozitia marcata de *, orice sir de caracter poate apare.
De exemplu:

dir ab*.*

va lista toate intrarile din directorul curent care incep cu AB si au orice extensie.

___ Comenzi DOS ___

Sistemul de operare DOS actioneaza ca o interfata utilizator - resurse sistem, comunicarea realizindu-se prin intermediul tastaturii. Comenzile introduse prin tastatura pot fi editae, inainte de a fi transmise interpretorulu de comenzi COMMAND.COM . Practic, la introducerea unei linii comanda are loc urmatoarea succesiune de evenimente: textul introdus prin claviatura este pastrat intr-o zona tampon, pina la apasarea tastei ENTER; dupa apasarea tastei ENTER, continutul zonei tampon este transmis interpretorului de comenzi pentru prelucrare si, in acelasi timp, acest continut este copiat intr-o alta zona tampon, numita sablon. Deci sablonul contine intotdeauna ultima linie de comanda introdusa.
De mentionat ca exista mai multe facilitati de editare a liniei de comanda, astfel incit introducerea comenzilor sa se faca cit mai usor.
Citeva din aceste functii sunt specificate in ce urmeaza:

F1 - copie un caracter din sablon si il afiseaza
F2 - urmat imediat de un caracter, copie toate caracterele din sablon pina la cel specificat
F3 - copie si afiseaza toate caracterele care au mai ramas in zona tampon
F4 - urmat de un caracter, face salt peste toate caracterele din sablon pina la cel specificat
DEL - salt peste un caracter din sablon, fara a muta cursorul. etc.

Comenzile DOS sunt de doua tipuri: comenzi interne si comenzi externe.
Comenzile interne se executa imediat, deoarece fac parte din sistemul de operare si sint incarcate odata cu acesta. Comenzile externe se afla pe disc, sub forma de fisiere executabile. Deci executia lor este precedata de incarcarea lor in memorie. Orice fisier cu extensia ".exe", ".com" ".bat" este, tipic, fisier executabil, deci comanda externa. Atita timp cit comenzile externe se afla pe disc sub forma de fisiere, ele pot fi apelate printr-o specificare de fisier (observatie: in cazul acesta particular extensia nu este necesar a fi specificata). Daca fisierul executabil este gasit, comanda este executata; altfel veti primi mesajul
"Bad command or file name".

In cele ce urmeaza, aveti descrise citeva dintre comenzile sistemului de operare DOS cel mai des utilizate.

___ Comenzi de lucru cu fisiere ___

COPY - comanda interna

Descriere: permite copierea unuia sau mai multor fisiere; optional, numele fisierelor pot fi schimbate ori se poate realiza concatenarea unor fisiere. De asemenea, comanda COPY poate fi folosita pentru transferul datelor intre oricare dintre echipamentele periferice.

Forma generala: copy ad:iacaleinume_fisier_sursaa.exti
ad:iacaleianume_fis_destinatiea.extii copy ad:iacaleinume_fisier_sursaa.exti
a+ad:iacaleianume_fis_destinatiea.extii...i
ad:iacaleianume_fis_destinatiea.extii

Exemple: copy a:test.txt copie fisierul test.txt de pe unitatea "a" in directorul curent, cu acelasi nume, test.txt copy a:\subdir\test1.txt c:\subdir1 copie fisierul test1.txt de pe unitatea "a", din directorul "subdir" directorul "subdir1" aflat pe unitatea "c" copy program.bak program.pas copie fisierul din directorul curent numit "program.bak" in acelasi director, dar cu numele program.pas. copy *.pas a:\programe copie toate fisierele cu extensia ".pas" din directorul curent pe unitatea "a", in directorul "programe" copy prog1.pas+prog2.pas+prog3.pas final.pas creeaza un fisier nou, numit "final.pas" al carui continut va fi concatenarea fisierelor prog1.pas, prog2.pas si prog3.pas copy prog1.asm+prog2.asm adauga continutul fisierului "prog2.asm" la sfirsitul lui
"prog1.asm"; deci rezultatul este in "prog1.asm".


DEL - comanda interna

Descriere: sterge unul sau mai multe fisiere

Forma generala:
DEL ad:iacaleianume_fisiera.extii

Exemple: del prog.exe sterge fisierul "prog.exe" din directorul curent del a:\surse\*.pas sterge toate fisierele cu extensia ".pas" aflate pe unitatea "a", in directorul "surse" del \test sterge toate fisierele ca intrari ale subdirectorului "test" al directorului radacina. del *.* sterge toate fisierele din directorul curent. Sistemul de operare emite un mesaj "Are you sure(Y/N)?" pentru a verifica daca intr-adevar utilizatorul doreste stergerea fisierelor. Daca da, se apasa Y (yes); altfel N (no).

DIR - comanda interna

Descriere: afiseaza toate intrarile, sau numai cele specificate, intr-un fisier director. Informatia afisata include numele unitatii de disc, informatii legate de dimensiunea fisierelor (in octeti), data si ora la care au fost create ori modificate ultima oara, precum si dimensiunea spatiului liber pe disc.

Forma generala:
DIR ad:iacaleianume_fisieria.extia/Pia/Wi

Parametrul /P determina executia unei pauze atunci cind ecranul este plin; continuarea se face prin apasarea oricarei taste.
Parametrul /W produce o afisare condensata a listei intrarilor din director, continind doar numele fisierelor si subdirectoarelor.

MORE - comanda externa

Descriere: este un filtru care citeste date de la echipamentul standard de intrare si le trimite la echipamentul standard de iesire. Cind ecranul este plin, se executa o pauza semnalata de mesajul --More--; apasarea oricarei taste are ca efect reluarea afisarii.

Forma generala:

ad:iacaleiMORE

Exemple: more <test.asm afiseaza continutul fisierului "test.asm" ecran cu ecran.

REN - comanda interna

Descriere: schimba numele unui fisier; dupa redenumire, fisierul va ramine in acelasi director.

Forma generala:
REN ad:iacaleinume_fisiera.exti nume_fisiera.exti

Exemple: ren a:prog.pas aplic.pas redenumeste fisierul "prog.pas" de pe unitatea "a", in "aplic.pas"

TYPE - comanda interna

Descriere: afiseaza continutul unui fisier la dispozitivul standard de iesire. Observatie: comanda se aplica unui singur fisier, deci folosirea caracterelor * si ? nu este permisa. De obicei aceasta comanda se foloseste pentru afisarea unor fisiere ASCII de dimensiune mica.

Forma generala:
TYPE ad:iacaleinume_fisiera.exti

___ Comenzi de lucru cu directoare ____


CD (Change Directory) - comanda interna

Descriere: permite schimbarea directorului curent

Forma generala:
CD ad:iacalei

Exemple: cd \ schimba directorul curent in directorul radacina cd .. schimba directorul curent in directorul parinte al actualului director curent cd a:\subdir1\subdir2 schimba directorul curent pe unitatea "a", pe cale director_radacina->subdir1->subdir2.

MD (Make Directory) - comanda interna

Descriere: permite crearea unui director nou.

Forma generala:
MD ad:iacalei

Exemple: md \subdir creeaza o intrare noua in directorul radacina de pe unitatea curenta pentru subdirectorul "subdir" md subdir creeaza o intrare noua in directorul curent pentru subdirectorul
"subdir"

PATH - comanda interna

Descriere: permite specificarea unei liste de cai pe care pot fi cautate fisiere. Motivatia este imediata: de obicei, fisierele executabile - comenzi externe ale sistemului de operare DOS se afla intr-un director numit "DOS". Apelul unei comenzi ar trebui facut prin specificarea completa a numelui fisierului, adica incluzind unitatea de disc si calea.
Daca fisierele de comenzi nu sunt precedate de un nume de cale, cautarea lor este facuta doar in directorul curent. Prin comanda
PATH se inlesneste cautarea unui fisier si in alte cai, astfel incit sa nu mai fie necesara specificarea completa a caii.

Forma generala:
PATH ad:iacaleia;ad:iacalei...i

Observatie: elementele listei de directoare sunt separate prin ";".
Cautarea in directoare se face in ordinea in care au fost specificate in lista. Directorul curent nu este modificat.

Exemple:

path afiseaza lista directoarelor in care se face cautarea, lista anterior setata printr-o comanda PATH. path c:;a:\subdir determina cautarea in directorul curent al unitatii "c:", apoi in subdirectorul "subdir" al directorului radacina, de pe unitatea
"a:"


RD (Remove Directory) - comanda interna

Descriere: sterge un director

Forma generala:
RD ad:icale

Observatie: directorul care va fi sters trebuie sa fie vid (sa nu contina nici un fisier; practic, acest lucru poate fi usor vazut cu un DIR pe calea spre directorul in cauza, care va afisa doar doua intrari: "." si ".."). Ultimul director specificat in cale va fi sters.

Exemple: rd \subdir1\subdir2 va sterge subdirectorul "subdir2" al subdirectorului "subdir1" al directorului radacina de pe unitatea de disc curenta.

TREE - comanda externa

Descriere: listeaza toate caile de pe discul specificat, optional si numele fisierelor din fiecare subdirector.

Forma generala:
ad:iacaleiTREEad:ia/Fi

Numele de unitate si calea introduse inaintea numelui comenzii reprezinta locul unde se afla fisierul "tree.com" (de mentionat ca aceasta cale nu mai trebuie specificata daca ea a fost anterior prinsa intr-o comanda PATH). Parametrul ad:i de dupa comanda
TREE specifica unitatea de disc a carei structura de directoare se doreste a fi vizualizata. Daca se utilizeaza optiunea /F, vor fi listate si numele fisierelor - intrare in fiecare subdirector.

___ Indirectarea intrarii/iesirii standard ___

Implicit, echipamentul de intrare standard pe care il folositi este tastatura, iar cel de iesire este monitorul. Comanda DIR, de exemplu, afiseaza la iesirea standard lista fisierelor si directoarelor dintr-o cale specificata. Sistemul de operare DOS va pune la dispozitie posibilitatea de a indirecta intrarea sau iesirea standard. De exemplu, puteti trimite iesirea comenzii DIR intr-un fisier cu numele "fisier.txt" astfel: dir >fisier.txt
Fisierul in cauza va contine ceea ce in mod normal ar fi afisat pe monitor, deci iesirea standard a fost indirectata.

De asemenea, mai multe programe pot fi inlantuite, iesirea unuia fiind intrare pentru urmatorul. Inlantuirea este notata prin caracterul
"|". De exemplu, comanda dir|sort determina ca iesirea generata de comanda DIR sa fie tratata drept intrare pentru comanda SORT (descrisa mai jos). De fapt, aceasta comanda va genera lista intrarilor sortate (!) ale directorului curent.
Un alt exemplu: dir|sort > fis.txt va trimite lista fisierelor sortata in fisierul "fis.txt".
In cazul comenzilor care asteapta introducerea unor date de la tastatura, intrarea standard poate fi indirectata. De exemplu, sort <fis1.txt citeste datele din "fis1.txt", le sorteaza, apoi le trimite la iesirea standard sort <fis1.txt >fis2.txt face acelasi lucru, doar ca iesirea standard este indirectata spre fisierul
"fis2.txt".

___ Filtre DOS ___

Exista anumite comenzi DOS care citesc date de la echipamentul standard de intrare, le modifica, apoi afiseaza rezultatul la echipamentul standard de iesire. Aceste comenzi se numesc "filtre". Exista 3 filtre DOS:
SORT - care sorteaza date text, FIND - care cauta intr-un fisier aparitia unui sir de caractere specificat, MORE (detaliata mai sus).

SORT - comanda externa

Descriere: filtru care citeste datele de la echipamentul standard de intrare, le sorteaza, apoi le scrie la echipamentul standard de iesire.

Forma generala:
ad:iacaleiSORT a/Ria/+ni
Sortarea este facuta crescator in ordinea codurilor ASCII, la nivel de linie de text. Parametrul /R determina efectuarea sortarii in ordine descrescatoare. Parametrul /+n, cu n intreg pozitiv, determina inceperea sortarii din coloana n (daca nu este specificat, se incepe sortarea din coloana 1); dimensiunea maxima a fisierului care poate fi sortat este de 63 Kocteti.

Exemple: sort /r <nesort.txt >sortat.txt sorteaza in ordine descrescatoare liniile fisierului "nesort.txt" si trimite iesirea in fisierul "sortat.txt" dir|sort /+3 >list.srt determina sortarea iesirii comenzii DIR din coloana 3, si redirectarea iesirii in fisierul "list.srt".

FIND - comanda externa

Descriere: trimite la echipamentul standard de iesire toate liniile din fisierele specificate in linia de comanda care contin un sir de caractere specificat

Forma generala:
ad:iacaleiFIND a/Via/Cia/Ni "sir" aad:iacaleinume_fisa.exti ...i
Sirul de caractere cautat este scris intre ghilimele (in cazul in care sirul insusi contine caracterul ", acesta trebuie dublat).
Comparatia tine cont de diferenta intre literele mici si cele mari.
Parametrul /V determina afisarea tuturor liniilor care nu contin sirul specificat. Parametrul /C determina afisarea unui contor cu numarul de aparitii al sirului specificat in fiecare fisier, fara a mai afisa liniile care contin sirul specificat. Parametrul /N determina o numerotare a liniilor care contin sirul.Numarul de linie se afiseaza in fata fiecarei linii scrise. Primul caracter CTRL/Z
(care marcheaza sfirsit de fisier) va determina sfirsitul cautarii.

Exemple: find "test" fis1.txt fis2.txt fis3.txt afiseaza toate liniile din fisierele "fis1.txt", "fis2.txt" si
"fis3.txt" (in aceasta ordine) care contin sirul "test".

INTREBARI SI EXERCITII

1. Mentionati care este directorul dv. curent?
2. Copiati un fisier de la tastatura, apoi afisati-i continutul, utilizind comenzi ale sistemului de operare DOS (nota: dupa ce ati terminat de introdus textul, tipariti CTRL-Z, caracter ce marcheaza sfirsitul unui fisier ASCII, apoi ENTER).
3. Copiati fisierul "lab2.txt" in directorul dv. curent.
4. Creati un subdirector al directorului curent, numit TEMPORAR, schimbati directorul curent astfel incit sa puteti avea acces la intrarile in acest director si apoi mutati in el fisierul lab2.txt copiat anterior.
5. Stergeti directorul TEMPORAR.
6. Completati raspunsurile exercitiilor din laboratorul precedent in trei fisiere diferite (de exemplu, in fisierul r1.txt, raspunsurile la exerci tiile 1-6, in r2.txt, la 7-12, in r3.txt la 13-18), folosindu-va de un editor oarecare. La sfirsit, concatenati cele trei fisiere in r1.txt.
7. Concatenati fisierele r1.txt, r2.txt, r3.txt intr-un fisier nou, cu un nume la alegerea dv.
8. Afisati continutul fisierului creat la exercitiul 7, folosind comenzile
TYPE si MORE. Ce sesizati?
9. Care este directorul parinte al directorului radacina?
10. Care dintre comenzile urmatoare sunt comenzi interne si care externe?
DIR, CD, TREE, COPY, MORE
11. Folositi comanda PATH, astfel incit cautarea fisierelor sa se poata face si in directorul dv. curent.

Laborator 3

///////////////////////////////////////////////
Introducere in structura microprocesorului 8086
///////////////////////////////////////////////

Cuvinte cheie
AAAAAAAAAAAAAAA memorie, capacitatea unei memorii, ordine de memorare a octetilor intr-un cuvint, octet high (MSB - Most Significant Byte)
(cel mai semnificativ octet) octet low (LSB - Least Significant Byte)
(cel mai putin semnificativ octet), adresa, continut, adresa fizica, adresa logica, segment, deplasament, registru

Introducere
AAAAAAAAAAAAA

A descrie un microcomputer inseamna a-i descrie componentele functionale. Descrierea acestor componente, precum si a interactiunilor dintre ele este numita "arhitectura" calculatorului. In general, aceasta se refera la citi registri are un calculator, ce functii au, cita memorie poate fi conectata, cum este ea adresata, precum si facilitati de intrare/iesire.
In general, un microsistem de calcul contine urmatoarele componente principale:
- unitatea centrala (UC), constituita din microprocesor
(CPU - Central Processor Unit). CPU este un circuit integrat ce contine circuitele care controleaza functiile calculatorului, registri, indicatori, etc.
- memoria, folosita ca dispozitiv de stocare a datelor si a instructiunilor.
- sistemul de intrari/iesiri (I/O), format din ansamblul porturilor de intrare/iesire si a circuitelor de control pentru interfata cu echipamentele periferice.
Conexiunea intre CPU si memorie si sistemul I/O este realizata prin intermediul magistralelor (BUS - in engleza).

Structura memoriei
AAAAAAAAAAAAAAAAAAAA

Pentru ca un program sa fie executat, el trebuie incarcat in memoria computerului, care va stoca atit instructiunile cit si datele programului.
Instructiunile si datele sunt pastrate in format binar.
Memoria unui computer este alcatuita dintr-o secventa continua de locatii direct adresabile, fiecare locatie fiind descrisa prin 2 componente:
- adresa locatiei de memorie;
- continutul locatiei de memorie;

ÚAAAAAAAAAAA¿
ADRESA AAAAA>³ CONTINUT ³
AAAAAAAAAAAAÙ

Pentru a accesa continutul unei locatii de memorie, unitatea centrala a unui sistem de calcul va trebui sa comunice subsistemului de memorie adresa fizica pentru acea locatie. Nu pot exista doua locatii de memorie cu aceeasi adresa.
Fiecare sistem de calcul are caracteristic dimensiunea (in biti) a celei mai mici locatii de memorie direct adresabila. Exista sisteme de calcul care acceseaza locatiile de memorie la nivel de :
- 1 bit (bit - adresabil);
- 1 octet (byte - adresabil);
- 1 cuvint (word - adresabil).

Pentru a accesa o locatie de memorie, unitatea centrala (CPU) va comunica modulului de memorie adresa acestei locatii utilizind ADDRESS-BUS-ul
(magistrala de adrese). Dimensiunea ADDRESS-BUS - ului da capacitatea de memorie (dimensiunea ei) a unui sistem de calcul. O unitate centrala poate accesa 2^n locatii de memorie, unde n este dimensiunea ADDRESS-BUS - ului.
In general, dimensiunea memoriei este exprimata in Kiloocteti(Ko) sau
Megaocteti (Mo), unde:

1Ko = 2^10 octeti (1024 octeti)
1Mo = 2^20 octeti (1024 Ko)

De exemplu o unitate centrala care are o magistrala de adrese de dimensiune 20 va putea accesa 2^20 locatii de memorie (2^20 = 1Mo );

Ordinea de memorare a octetilor pentru valori multioctet
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

In cazul valorilor reprezentate pe mai mult de un octet ( ex: cuvinte, dublu cuvinte ) este importanta ordinea in care sunt memorati octetii acestei valori. Inainte de a enumera conventiile de ordonare a octetilor unei valori multi-octet, sa introducem doi termeni mult uzitati: cel mai semnificativ octet (octet high) si cel mai putin semnificativ octet (octet low). In cadrul unui cuvint (format din doi octeti) cei doi sunt notati dupa cum urmeaza:

cuvint: b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ
| || |
\ / \ /
\________________________/ \__________________________/
| |
  cel mai semnificativ octet cel mai putin semnificativ octet

Conventiile de ordonare a octetilor unei valori multi-octet sunt:
- BIG ENDIAN: octetul mai semnificativ este memorat in locatia de memorie cu adresa cea mai mica;
- LITTLE ENDIAN: octetul mai semnificativ este memorat in locatia de memorie cu adresa cea mai mare.

Exemplu:
Daca se va memora valoarea pe 16 biti 1234H in memorie la adresa A si consideram ca cea mai mica locatie adresabila are dimensiunea de 1 octet, dispunerea octetului cel mai semnificativ (12H) si a octetului mai putin semnificativ (34H) ar putea fi in cele 2 moduri:

BIG ENDIAN LITTLE ENDIAN
ÚAAAAAAAAA¿ ÚAAAAAAAAA¿
³ 12H³ 34H³ ³ 34H³ 12H³
AAAAAAAAAAÙ AAAAAAAAAAÙ
A A+1 A A+1

Adresarea memoriei la microprocesorul Intel 8086
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Cea mai mica locatie direct adresabila de microprocesorul INTEL 8086 este octetul (deci unitatea centrala este byte-adresabila), iar conventia de ordonare a octetilor in cuvint este LITTLE ENDIAN. Iata un exemplu:

³ ³ ...³
³ AAAAAa
³ ³ 0C ³ octet cel mai putin semnificativ ---- ³ AAAAAa | --> cuvintul F70Ch creste ³ F7 ³ octet cel mai semnificativ ---------- adresa AAAAAa
³ ³ ...³
³ AAAAAa
³ ³ 3B ³ octet cel mai putin semnificativ ---- ³ AAAAAa | --> cuvintul 2F3Bh
³ ³ 2F ³ octet cel mai semnificativ ---------- ³ AAAAAa
 ³ ...³

In cazul unui sistem de calcul ce utilizeaza ca unitate centrala un microprocesor INTEL 8086, fiecare locatie de memorie are 2 tipuri de adresa:
- adresa fizica;
- adresa logica;

Adresa fizica este o valoare pe 20 de biti, identificind in mod unic fiecare locatie din spatiul de adresare al microprocesorului. Asadar, adresa fizica poate lua valori in domeniul
00000(H) - FFFFF(H)

Deci, pentru a putea reprezenta o adresa fizica a unei locatii de memorie, avem nevoie de o secventa de 20 de biti. Dar 8086 a fost proiectat sa efectueze operatii aritmetice pe numai 16 biti si sa manipuleze date pe
16 biti. In aceste conditii, este necesar un mecanism aditional pentru lucrul cu memoria. Acesta este mecanismul de segmentare.
Un segment este o unitate logica de memorie, de cel mult 64 Ko
(2^16 octeti) lungime, format din locatii continue de memorie. Fiecare segment incepe la o adresa multiplu de 16 (deci ultimii 4 biti dintr-o adresa fizica - pe 20 biti - au valoarea 0).
Nu exista restrictii asupra locatiilor segmentelor, in sensul ca ele pot fi adiacente, disjuncte, partial suprapuse sau suprapuse in intregime.
Deci o locatie de memorie fizica poate fi continuta in unul sau mai multe segmente logice.
In orice moment, un program poate accesa continutul a patru segmente:
- segmentul de cod
- segmentul curent de date
- segmentul curent de stiva
- extrasegmentul curent

Vom vedea imediat ca fiecare dintre aceste segmente are cite un registru dedicat in microprocesor.
Problema care se pune acum este: cum anume putem obtine valoarea adresei fizice a unui octet in memorie (pe 20 biti) daca lucram cu mecanismul de segmentare. Deja am subliniat diferenta intre doua tipuri de adrese: fizica
(in domeniul 00000h ... FFFFFh) si logica (adresele cu care lucreaza efectiv programele).
O adresa logica are 2 componente, fiecare de 16 biti (1 cuvint), considerate ca valori intregi fara semn:
- baza segmentului (adresa primei locatii de memorie continuta de segment; reamintim, ea este multiplu de 16);
- deplasament sau offset (deplasamentul este valoarea, in octeti, a locatiei destinatie relativ la inceputul segmentului; evident, cea mai mica locatie din segment are deplasamentul 0);
Adresa logica este scrisa in forma
SEGMENT:OFFSET

Exemple de adrese logice:
1000:4563(H), 3462:8952(H), AF00:45AD(H)

Transformarea ADRESA LOGICA -> ADRESA FIZICA este transparenta acum pentru programator.
ADRESA FIZICA = SEGMENT * 16 + DEPLASAMENT sau
ADRESA FIZICA = SEGMENT * 10(H) + DEPLASAMENT

Exemplu:
Adresa logica
1000:4563(H) va fi transformata de microprocesor in adresa fizica:
1000(H) * 10(H) + 4563 (H) = 10000(H) + 4563(H) = 14563(H)

Din formulele de mai sus, se poate trage urmatoarea concluzie:
O ADRESA FIZICA POATE FI OBTINUTA DIN MAI MULTE ADRESE LOGICE DIFERITE !!!

Inainte de a incheia acest capitol, sublinem urmatorul aspect: microprocesorul Intel 8086 acceseaza intotdeauna memoria pentru cuvinte memorate la adresa para. In aceste conditii, un cuvint memorat la adresa para este citit printr-o singura operatie de acces la memorie, pe cind un cuvint memorat la adresa impara necesita doua operatii de acces la memorie (care transfera doua cuvinte la adrese pare, din fiecare din acestea un octet, cel
"nedorit", fiind ignorat). Este evident deci, ca citirea cuvintelor memorate la adresa para este mai rapida.

INTREBARI SI EXERCITII:
AAAAAAAAAAAAAAAAAAAAAAAA

1. Cite locatii de memorie pot fi accesate de o unitate centrala prevazuta cu 12 linii de adrese.
2. Cite locatii de memorie pot fi accesate de o unitate centrala prevazuta cu 20 linii de adrese.
3. Stiind ca o unitate centrala poate accesa 65536 locatii de memorie, cite linii de adresa are?
4. Care este valoarea segmentului din adresa logica
245F : 5634 (H) ?
Dar valoarea offset-ului?
5. Calculati adresa fizica ce este calculata de un microprocesor INTEL 8086 pe baza adresei logice:
F000:FFF0 (H)
6. Calculati adresa fizica ce este calculata de un microprocesor INTEL 8086 pe baza adresei logice:
FFFF:0000 (H)
7. Gasiti 3 exemple de adresa logica care sa identifice locatia de memorie de la adresa fizica:

37AF2 (H)
8. Care este dimensiunea maxima a unui segment de memorie la un microprocesor
INTEL 8086? Argumentati.
9. Care din urmatoarele segmente au portiuni comune in memorie cu segmentul de adresa 35F2(h) a. 4053 (H) b. 3110 (H) c. 8173 (H) d. 4610 (H)
10. Daca un microprocesor INTEL 8086 depune in memorie, la adresa fizica
89654(H) valoarea pe 16 biti ABCD(H), care va fi continutul locatiei de memorie cu adresa fizica 89655(H)?
11. Incepind de la adresa fizica A0000(H), este memorat sirul de caractere
"LABORATOR ASO". Care va fi continutul locatiei de memorie de la adresa fizica A000C(H) ?

REGISTRI
AAAAAAAA

Registrul este o locatie in interiorul unitatii centrale si este utilizat pentru pastratrea datelor si adreselor locatiilor de memorie in timpul executiei instructiunilor. Accesul la continutul unui registru este mult mai rapid decit accesul la continutul locatiilor de memorie. Numarul registrilor unei unitati centrale depinde de tipul unitatii centrale. Spre deosebire de locatiile de memorie care sunt identificate prin adrese, registrii unei unitati centrale sunt identificati prin numele lor.

REGISTRII microprocesorului INTEL 8086
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Microprocesorul INTEL 8086 are urmatoarele categorii de registri: a) Registri generali.
Exista 8 registri generali care pot fi impartiti in 2 seturi:
- registri de date : AX, BX, CX, DX
- registri de pointer si index : SP, BP, SI si DI
Toti registrii sunt pe 16 biti ( 1 cuvint ).

Registrii de date pot fi accesati separat pentru octetul high si octetul low astfel incit pot fi priviti ca fiind alcatuiti din 2 registri de 8 biti. Astfel, registrul AX poate fi accesat in partea high cu numele AH iar in partea low cu numele AL. Analog, registrii BX, CX, DX pot fi accesati si pe octet sub numele: BH, BL, CH, CL, DH, DL.
Registrii de pointer si de index pot fi utilizati doar ca registri de
16 biti.

b15 b8 b7 b0 b15 b0
ÚAAAAAAAAAAAAAAAAAAA¿ ÚAAAAAAAAAAAAAAAAAAA¿
³ AX ³ ³ SI ³
AAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAÙ
³ AH AL ³
AAAAAAAAAAAAAAAAAAAAÙ

b15 b8 b7 b0
ÚAAAAAAAAAAAAAAAAAAA¿ ÚAAAAAAAAAAAAAAAAAAA¿
³ BX ³ ³ DI ³
AAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAÙ
³ BH BL ³
AAAAAAAAAAAAAAAAAAAAÙ

b15 b8 b7 b0
ÚAAAAAAAAAAAAAAAAAAA¿ ÚAAAAAAAAAAAAAAAAAAA¿
³ CX ³ ³ SP ³
AAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAÙ
³ CH CL ³
AAAAAAAAAAAAAAAAAAAAÙ

b15 b8 b7 b0
ÚAAAAAAAAAAAAAAAAAAA¿ ÚAAAAAAAAAAAAAAAAAAA¿
³ CX ³ ³ BP ³
AAAAAAAAAAAAAAAAAAAAa AAAAAAAAAAAAAAAAAAAAÙ
³ CH CL ³
AAAAAAAAAAAAAAAAAAAAÙ

b) Registri de segment
Reamintim ca spatiul de memorie este impartit in segmente logice de maximum 64 Ko. In orice moment, unitatea centrala are acces la 4 segmente.
Adresa fiecarui astfel de segment este pastrata in unul din registrii de segment ai microprocesorului. Fiecare registru de segment este de 16 biti
(1 cuvint) si nu poate fi accesat la nivel de octet.

CS : pastraza adresa segmentului de cod (segmentul de unde sunt citite instructiunile pentru a fi executate).

SS : pastreaza adresa segmentului de stiva. Operatiile cu stiva sunt efectuate in locatiile de memorie delimitate de acest segment.

DS : pastreaza adresa segmentului de date; in aceasta zona de memorie sunt pastrate datele si variabilele programului.

ES : pastreaza adresa extrasegmentului; extra segmentul este, cel mai adesea, utilizat tot pentru pastrarea datelor unui program.

c) Pointerul de instructiuni
Pointerul de instructiuni (IP) este un registru de 16 biti (1 cuvint), ce contine deplasamentul (offset-ul) in segmentul de cod (identificat de valoarea ce se gaseste in registrul CS) de unde va citi unitatea centrala urmatoarea instructiune. Programele nu au acces direct la pointerul de instructiuni.

d) Registrul indicatorilor de conditie ( Flags )
Registrul indicatorilor de conditie contine o serie de biti care reflecta rezultatul unor operatii aritmetice si logice, precum si biti care controleaza direct modul de executie a instructiunilor.

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³-- ³-- ³-- ³-- ³OF ³DF ³IF ³TF ³SF ³ZF ³-- ³AF ³-- ³PF ³-- ³CF ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ

Carry Flag (CF)
AAAAAAAAAAAAAAAA reflecta transportul in exterior al bitului cel mai semnificativ al rezultatului unei operatii aritmetice. Valoarea bitului CF poate fi modificata si de instructiunile de deplasare si rotire.

Exemplu:
Daca in registrul AL avem valoarea 80(H) iar in registrul CL valoarea
87(H),iar microprocesorul executa o instructiune de adunare a registrului
AL cu registrul CL, rezultatul va fi 07H iar flagul CF va fi pozitionat
(va avea valoarea 1).

Parity Flag(PF)
AAAAAAAAAAAAAAAA va fi pozitionat (valoarea 1) daca rezultatul ultimei operatii aritmetice efectuate de microprocesor are numar par de biti 1.

Flagul de Transport Auxiliar (AF)
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA este pozitionat daca a existat un transport de la nivelul inferior la nivelul superior al semioctetului rezultatului unei operatii aritmetice.

Exemplu:
Daca in registrul AL avem valoarea 10011000(B) iar in registrul DL avem valoarea 01001100(B) si microprocesorul va executa o operatie de adunare a continutului registrului AL cu continutul registrului DL:

* *!! S-au marcat prin * rangurile bitilor la
1 0 0 1 1 0 0 0 + a caror sumare exista transport de la
0 1 0 0 1 1 0 0 rangul precedent.
AAAAAAAAAAAAAAAAAAAAA
1 1 1 0 0 1 0 0

Se observa ca exista transport de la rangul b3 la rangul b4 deci de la semioctetul inferior la semioctetul superior. In acest caz,
AF va deveni 1.

Zero Flag (ZF)
AAAAAAAAAAAAAAAA va avea valoarea 1 daca rezultatul unei operatii aritmetice este 0.

Sign Flag (SF)
AAAAAAAAAAAAAAAA reflecta semnul rezultatului unei operatii aritmetica; deoarece nume rele binare negative sint reprezentate in cod complementar fata de 2,
SF va reflecta valoarea bitului cel mai semnificativ al rezultatului:
0 daca rezultatul este pozitiv;
1 daca rezultatul este negativ;

Utilizarea celor doi indicatori de stare si control va fi explicata pe parcursul laboratoarelor ce vor urma.

INTREBARI SI EXERCITII:
AAAAAAAAAAAAAAAAAAAAAAAAA

1. Daca in registrul AX exista valoarea 4532(H), ce valoare exista in registrul AL?
2. Daca registrul AH contine valoarea 34(H) iar registrul AL contine valoarea 12(H), ce valoare se gaseste in registrul AX?
3. Daca registrul AL contine valoarea 214(10) iar registrul AH contine valoarea 39(10), ce valoare se gaseste in registrul AX?
4. Care este valoarea maxima intrega pozitiva care poate fi incarcata in registrul BL.
5. Care este valoarea maxima intrega pozitiva care poate fi incarcata in registrul DX?
6. Daca registrul AX contine valoarea 86FF(H), iar microprocesorul executa o instructiune de adunare la registrul AL a valorii 1, ce valoare se va gasi in AX in urma executiei acestei instructiuni?
Care va fi valoarea flagurilor CF, ZF, SF, AF ?

Laborator 4

///////////////////////////////////////
Primul program in limbaj de asamblare
///////////////////////////////////////

Cuvinte cheie
AAAAAAAAAAAAAAAAAAA

asamblor, compilator, mnemonica, directiva SEGMENT, directiva ASSUME, directivele DB, DW, DD, instructiunea MOV, instructiunea INT, operatorul OFFSET

1. Introducere
AAAAAAAAAAAAAA

Un limbaj de programare este format dintr-un set de simboli, un set de reguli de sintaxa care guverneaza modul in care acesti simboli pot fi combinati, si o semantica ce asociaza diferitelor combinari de simboli un inteles. Exista foarte multe limbaje de programare; totusi ele pot fi clasificate dupa dupa criteriul "nivelului" unui limbaj de programare. Astfel, nivelul "cel mai de jos" se refera la acele limbaje de programare care sunt cel mai aproape de o masina concreta. Mergind de la nivelul cel mai de jos spre cel inalt, avem:
Limbaje masina,
Limbaje asamblare,
Limbaje de nivel inalt

Limbajele masina sunt cele care pot fi intelese direct de un calculator. Un program in limbaj masina este un sir de numere binare care reprezinta instructiunile programului, locatiile de memorie si datele necesare rezolvarii unei probleme specifice. Ce este important de subliniat este faptul ca orice program scris intr-un limbaj de programare, altul decit limbajul masina, trebuie translat (pentru a putea fi executat) in limbajul pe care calculatorul il intelege, deci in limbaj masina.
Limbajele de asamblare se afla la un nivel mai ridicat decit cele masina, dar sunt inca de nivel "low". Un limbaj de asamblare permite descrierea instructiunilor sub forma de mnemonice (simboli abreviati) ca
ADD, MOV, SUB, MUL, etc., permite folosirea unor date numerice cu valori zecimale, octale, hexazecimale, manevrarea variabilelor. Desigur, un program scris in asamblare trebuie tradus in limbaj masina inainte de a fi executat. Acest lucru este realizat de un program special, numit asamblor.
Limbajele de nivel inalt sunt cele care pun la dispozitia programatorului un set de simboli si posibilitati de combinare a acestora, intr-o forma mai apropiata de limbajul uman. Ele au fost dezvoltate pentru a-i permite programatorului sa-si concentreze atentia in special asupra problemei de rezolvat si mai putin asupra detaliilor legate de masina pe care lucreaza. Translarea unui program din cod sursa - limbaj de nivel inalt in limbaj masina este realizata de un program special, numit compilator.

Apare acum urmatoarea intrebare: de ce sa programam in limbaj de asamblare? Intrebare de bun simt daca ne referim doar la citeva din avantajele limbajelor de nivel inalt: timpul necesar implementarii unei solutii la o problema este incomparabil mai mic fata de implementarea in asamblare; independenta fata de masina (limbajele de nivel inalt cele mai raspindite sunt portabile, deci un program sursa scris pe o masina poate fi compilat si executat si pe alta); programele sunt usor de depanat si corectat. Cu toate acestea, foarte multe compilatoare genereaza cod ineficient si folosesc ineficient memoria. In plus, uneori poate fi deranjant pentru programator sa nu poata accesa direct componentele microprocesorului: registri, indicatori, set de instructiuni speciale.
Solutia optimala in scrierea unui program este de a dezvolta unele rutine intr-un limbaj de nivel inalt, iar rutinele al caror timp de rulare este mare sau care sunt critice din punct de vedere al spatiului folosit sa fie scrise in asamblare.

Orice microprocesor are un set de instructiuni pe care le poate executa,instructiuni care executa (in general) operatii asupra unor operanzi.
In momentul lansarii unui program (prin tiparirea numelui sau la linia de comanda), sunt incarcate in memorie instructiunile pe care masina trebuie sa le execute. Microprocesorul le citeste din memorie, le decodifica si apoi le executa.
Instructiunile microprocesorului 8086 sunt grupate in urmatoarele categorii: instructiuni pentru transfer de date, instructiuni aritmetice, instructiuni logice, instructiuni pentru siruri de caractere, instructiuni de intrerupere, instructiuni pentru indicatori si instructiuni de sincronizare.
Incepind cu laboratorul de astazi si cu cele ce vor urma, vom prezenta pe rind instructiunile relationate cu o problema sau cu mai multe, pe care le vom rezolva impreuna, urmind ca intr-un laborator viitor sa adunam intr-un sumar informatii despre tot setul de instructiuni (in scopul consultarii si aducerii aminte). Aceleasi comentarii sunt valabile si pentru setul de intreruperi, apelurile sistem, modurile de adresare ale operanzilor instructiunilor.

2. Hello, world!
AAAAAAAAAAAAAAAA

In cele ce urmeaza, este descris un program foarte simplu, care nu face altceva decit sa afiseze un sir de caractere, anume "Hello, world!".

;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
; Cod sursa asamblare pentru afisarea sirului "Hello, world!"

my_data segment ; definesc segmentul in care tin
; datele necesare programului
HelloMessage DB 'Hello, world!',13,10,'$'
; definesc o variabila care identifica sirul
; pe care vreau sa-l afisez si o initializez. my_data ends ; marchez sfirsitul definitiei segmentului
; de date

my_text segment ; definesc segmentul de cod assume cs:my_text, ds:my_data start:

mov ax, my_data ; incarca registrul DS cu adresa de inceput mov ds, ax ; a segmentului my_data

mov ah,9 ; pregatesc registrul ah pentru
; apelul functiei sistem de tiparire
; a unui sir de caractere mov dx,OFFSET HelloMessage ; dx va contine deplasamentul la locatia
; de memorie la care este stocat
; sirul "Hello, world" int 21h ; afiseaza "Hello, world"

mov ah,4ch ; pregatesc registrul ah pentru
; apelul functiei sistem care termina int 21h ; programul my_text ends ; sfirsitul definitiei segmentului
; de cod end start ; sfirsitul programului
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Orice program are unul sau mai multe segmente de date care contin datele necesare prelucrarii in executie, precum si unul sau mai multe segmente de cod. Segmentele se definesc folosind directiva SEGMENT, conform sintaxei:

nume SEGMENT atip_aliniereiatip_de_combinareiaclasai
; declaratii ale datelor nume ENDS

Pentru moment, nu vom insista asupra a ce inseamna tip_aliniere, tip_de_combinare si clasa. Deocamdata sa remarcam faptul ca orice definitie de segment se sfirseste (obligatoriu) cu nume ENDS si sa subliniem citeva aspecte: in cadrul unui segment de date se definesc (eventual se initializeaza) de obicei constante, variable, etichete, articole, structuri, etc. iar in cadrul unui segment de cod se descriu, sub forma de mnemonice, instructiunile pe care microprocesorul trebuie sa le execute la momentul rularii programului.
Observatie: in interiorul definitiei unui segment poate fi inclusa definitia altuia, ca in exemplul urmator:

code1 segment assume cs:code1, ds:data1
... data1 segment
... data1 ends
... code1 ends

Este important de subliniat ca cele doua segmente nu se vor suprapune in nici un caz fizic (practic, asamblorul va concatena prima portiune a segmentului "code1" cu cea de dupa definitia lui "data1", iar
"data1" va rezida


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta