Sunteți pe pagina 1din 13

Partea I: Introducere în Sistemele de Calcul

A. Hardware
Hardware se referă la componentele fizice ale unui sistem de calcul. Acestea sunt părțile
tangibile ale computerului, spre deosebire de software, care este partea intangibilă.
Exemple:
● Periferice de Intrare: Acestea sunt dispozitive prin intermediul cărora interacționăm
cu computerul. Exemple: tastatura (pentru introducerea textului), mouse-ul (pentru
interacțiunea grafică)
● Periferice de Ieșire: Sunt dispozitive care prezintă rezultatele procesării
computerului. Monitorul afișează interfața grafică și informațiile, în timp ce o
imprimantă transformă documentele digitale în format fizic.
● Unitatea de Procesare Centrală (CPU): Creierul computerului, CPU-ul este
responsabil pentru executarea instrucțiunilor programelor și procesarea datelor.
● Memoria:
○ RAM (Memoria cu Acces Aleator): Este memoria temporară a computerului,
utilizată pentru stocarea datelor în timpul rulării programelor.
○ Memoria de Stocare: Exemple includ hard disk-ul și unitățile SSD, unde
datele sunt stocate permanent.

B. Software
Software reprezintă totalitatea programelor și sistemelor de operare care rulează pe
hardware și îi instruiesc cum să efectueze anumite sarcini. Este partea "intangibilă" a unui
sistem de calcul.
Tipuri de Software:
● Sisteme de Operare: Sistemul de operare (ex. Windows, Linux, macOS) este un
software fundamental care gestionează resursele hardware și oferă o interfață între
hardware și alte tipuri de software.
● Aplicații Software: Acestea sunt programele utilizate pentru efectuarea unor sarcini
specifice. Exemple: procesorul de text pentru redactarea documentelor, browserele
web pentru navigarea pe internet, programe de editare grafică, jocuri etc.

Partea II: Procesoare și Microprocesoare

A. Introducere în Procesoare

Rolul și Importanța Procesorului:


● Procesorul, adesea numit unitatea de procesare centrală (CPU), este inima oricărui
sistem de calcul. Este responsabil pentru executarea instrucțiunilor programelor și
pentru prelucrarea datelor, jucând un rol crucial în determinarea performanței
generale a sistemului.
● Funcționează ca un „creier” al computerului, interpretând și executând instrucțiuni,
coordonând și controlând operațiile altor componente hardware.
Evoluția Procesoarelor:
1971:
● Intel 4004: Primul microprocesor comercial, introdus de Intel. Acesta era un cip de 4
biți destinat calculatoarelor și altor dispozitive electronice.
Anii 1970:
● Intel 8008 și 8080: Microprocesoare mai avansate, cu 8 biți, care au permis
dezvoltarea primelor calculatoare personale.
Sfârșitul Anilor 1970:
● Intel 8086: Introdus în 1978, a fost primul din seria x86 (16 biti), punând bazele
arhitecturii dominante în calculatoarele personale.
Anii 1980:
● Intel 80386: Primul microprocesor Intel de 32 de biți, oferind capabilități mult mai
avansate, inclusiv suport pentru multitasking.
Anii 1990:
● Intel Pentium: A îmbunătățit performanța și eficiența, popularizând multitasking-ul și
aplicațiile multimedia.
Anii 2000: Era Multi-Core și Eficiență Energetică
● Introducerea Procesoarelor Multi-Core: Intel și AMD au început să producă
microprocesoare cu mai multe nuclee, oferind o creștere semnificativă a
performanței.
● Focalizarea pe Eficiență Energetică: Importanța eficienței energetice a crescut, în
special pentru dispozitive mobile și centre de date.
Anii 2010 și După:
● Procesoare cu și mai Multe Nuclee: Dezvoltarea a continuat cu adăugarea unui
număr tot mai mare de nuclee.
● Arhitecturi Heterogene: Combinația de nuclee de procesare de diferite tipuri pentru a
optimiza performanța și consumul de energie.
● Procesoare AI și Specializate: Dezvoltarea de cipuri specializate pentru inteligență
artificială și învățare automată.
Prezent și Viitor
● Tehnologii de Fabricație Avansate: Diminuarea continuă a dimensiunii tranzistorilor,
ajungând la procese de fabricație de 5nm și mai jos.
● Integrarea AI și 5G: Integrarea acceleratoarelor AI și suportul pentru 5G în
microprocesoare.
● Arhitecturi Chiplet: Tendințe spre design-uri modulare, unde diferite părți ale
procesorului sunt fabricate separat și apoi asamblate.
B. Microprocesorul 8086
Microprocesorul Intel 8086, unul dintre cele mai influente cipuri în evoluția calculatoarelor
personale, este compus din mai multe componente cheie care îi permit să execute
instrucțiuni și să proceseze date. Iată principalele sale componente:
Registrii:
- de uz general
● Registre de Date: AX, BX, CX, DX, fiecare putând fi împărțit în două registre
de 8 biți (exemplu: AX în AH și AL) pentru operațiuni de 8 biți.
● Registre de Index și Pointer: Source Index (SI), Destination Index (DI), Stack
Pointer (SP), Base Pointer (BP).
- de segment
● Registre de Segment: Code Segment (CS), Data Segment (DS), Stack
Segment (SS), Extra Segment (ES). Aceste registre sunt folosite pentru a
accesa memorii mari de 1MB, deși 8086 are un bus de adresă de 20 de biți.
- indicatorilor de stare (flags)
- pointer de instructiune (IP)
Instrucțiuni:
● Set de instrucțiuni pentru operațiuni de bază, manipularea datelor, controlul fluxului,
operațiuni de intrare/ieșire și altele.
Unitatea de Logică și Aritmetică (ALU):
● Realizează toate operațiile matematice și logice (adunare, scădere, etc.) și judecă
rezultatele operațiilor (de exemplu, dacă rezultatul este zero, negativ etc.).
Unitatea de Control (CU):
● Gestionează și coordonează activitățile microprocesorului, interpretând instrucțiunile
și generând semnalele necesare pentru execuția acestora.

Partea III: Limbaj de asamblare

A. Introducere în Limbajul de asamblare

Pentru a înțelege modul în care codul nostru interacționează cu un microprocesor, este


esențial să discutăm despre limbajul de mașină, limbajul nativ al microprocesorului, format
din secvențe de biți care comandă direct procesorul. În acest context, limbajul de asamblare
joacă rolul de punte între complexitatea criptică a limbajului de mașină și lumea programării
accesibile, traducând instrucțiuni uman-lizibile în codul binar pe care procesorul îl poate
executa eficient.
B. Limbajul de asamblare vs limbaje de programare

Limbaj de asamblare Alte limbaje

Nivelul de Abstracție ● limbaj de nivel scăzut ● limbaje de nivel înalt


● instrucțiuni care se traduc ● gestionează automat
direct în codul binar al aspecte precum
procesorului. alocarea memoriei și
colectarea gunoiului
(garbage collection)

Specificitatea Specific unui anumit tip de In general portabile și pot


Hardware-ului procesor sau familie de rula pe diferite platforme
procesoare hardware, datorită unui strat
intermediar, cum ar fi un
interpretor sau un
compilator care transformă
codul în instrucțiuni
executabile de procesor

Eficiență și eficiență maximă și performanțe mai puțin eficiente în


Performanță ridicate anumite cazuri, deoarece
abstracția adaugă un nivel
suplimentar între cod și
hardware, dar oferă
avantaje în termeni de
rapiditate de dezvoltare și
menținere

Accesibilitate și Necesită o înțelegere profundă a Sunt adesea mai ușor de


Ușurință în Utilizare arhitecturii computerului și este învățat și de utilizat, cu
considerat mai greu de învățat și sintaxă mai accesibilă și
de utiliza suport extins pentru diverse
biblioteci și framework-uri

Utilizare Practică drivere de dispozitive, sisteme de la dezvoltarea web și


înglobate, sau optimizări specifice aplicații mobile, până la
de performanță sisteme complexe de
software și analiza datelor
C. Rulare “Hello world!”

1. Deschide VSC (Visual Studio Code)


2. In zona de “extensii” instaleaza MASM/TASM (By: clcxsrolau)
3. Creeaza un fisier seminarHello.asm cu urmatorul continut:

.model small
.stack 100h
.data
mesaj db 'Hello world!',13,10,'$'
.code
start:
mov ax, @data
mov ds, ax

mov dx, offset mesaj

mov ah, 09h


int 21h

mov ah, 4Ch


int 21h
end start
4. Click dreapta pe fereastra de editare text
5. Ruleaza codul dand click pe Run ASM code
D. Analiza “Hello world!”
E. Directive de segment

DOSSEG
DOSSEG este directiva ce face ca segmentele dintr-un program să fie grupate conform
convenţiilor Microsoft de adresare a segmentelor.

.MODEL

.STACK
De exemplu, .STACK 200H defineşte o stivă de 512 octeţi.

.DATA
Directiva .DATA marchează începutul segmentului de date, adică locul în care vom plasa
variabilele de memorie. Reprezentativ aici este faptul că trebuie încărcat în mod explicit
registrul de segment DS cu valoarea "@data" înaintea accesării locaţiilor de memorie în
segmentul definit de .DATA. Având în vedere că un registru de segment poate fi încărcat fie
dintr-un registru general fie dintr-o locaţie de memorie dar nu poate fi încărcat direct cu o
constantă, registrul de segment DS este încărcat în general printr-o secvenţă de 2
instrucţiuni:
mov ax, @data
mov ds, ax
*(se poate folosi şi alt registru general în locul lui AX)

.CODE
Directiva .CODE marchează începutul segmentului de cod.
F. Registrii
De uz general
Regiștrii de segment
Registrul indicator de stare
Registrul pointer de instrucțiune
De segment

CS - referire la inceputul blocului de memorie in care se afla codul programatorului


DS - referire catre inceputul segmentului de date (.DATA)
ES - extra segment; nu are scop anume
SS - referire la inceputul segmentului de stiva
De uz general
AX
- operatii aritmetice, logice, deplasare date
- totdeuna operatiile de inmultire/impartire implica registrul AX

mov ah, 1
; Setează registrul AH (partea superioară a registrului AX) la valoarea 1
; AH este acum 1

inc ah
; Incrementează valoarea din AH cu 1
; Aceasta mărește valoarea din AH de la 1 la 2

mov al, ah
; Transferă valoarea actuală din AH în AL (partea inferioară a registrului AX)
; AL primește valoarea 2, care este valoarea curentă din AH

Impartire
mov ax, 15 ; Încarcă numărul de împărțit (15) în AX
mov bl, 4 ; Încarcă divizorul (4) în BL
div bl ; Împarte AX la BL
; După diviziune, AL conține rezultatul, iar AH restul

BX
- poate stoca adrese
- face referire la DS

mov bx, 3
; Setează registrul BX la valoarea 3
; BX este un registru general care poate fi folosit pentru adresare sau alte
scopuri
mov ah, [bx]
; Transferă valoarea din memoria la adresa indicată de BX în partea superioară
a registrului AX (AH)
; [bx] reprezintă conținutul memoriei la adresa specificată de valoarea din
BX, în acest caz adresa 3
; Această instrucțiune presupune că la adresa de memorie 3 există o valoare
validă
CX
- se ocupa cu numararea (contor)

mov cx, 3
; Setează registrul CX la valoarea 3
; CX este adesea folosit ca un contor în bucle, aici inițializându-l pentru 3
iterații

eticheta:
mov ah, 09h
; Setează funcția sistemului DOS pentru a afișa un șir de caractere
; AH = 09h este codul pentru funcția "Write String" a întreruperii 21h

int 21h
; Apelează întreruperea 21h a sistemului DOS
; Această întrerupere va procesa cererea în funcție de valoarea în AH,
; în acest caz, va afișa șirul de caractere indicat de DX (setat anterior)

LOOP eticheta
; Buclează înapoi la eticheta "eticheta"
; LOOP decrementează registrul CX și sare la eticheta dacă CX nu este 0

DX
- transfer de date intrare/iesire
- cand are loc o inmultire sau o impartire. dupa impartire restul impartirii se va afla in
DX, iar catul se va afla in AX (daca se imparte un numar pe 32 pe biti, la un numar
pe 16 biti)

Afisare mesaj (conform ultimelor doua randuri a mesajului stocat in DX)


mov dx, offset mesaj
; Setează registrul DX la adresa (offset) unde începe mesajul în memorie
mov ah, 09h
; Setează funcția sistemului DOS pentru a afișa un șir de caractere
; AH = 09h este codul pentru funcția "Write String" a intreruperii 21h

int 21h
; Apelează întreruperea 21h a sistemului DOS
; Acest apel de sistem va afișa șirul de caractere stocat la adresa indicată
de DX
Impartire
mov dx, 12h ; Plasați partea superioară a numărului de împărțit în DX
mov ax, 34h ; Plasați partea inferioară a numărului de împărțit în AX
mov bx, 4h ; Încărcați divizorul în BX
div bx ; Împărțiți DX:AX la BX. Rezultatul în AX, restul în DX

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