Académique Documents
Professionnel Documents
Culture Documents
Limbaje i main
Arhitectura calculatoarelor
Limbaje i main
Arhitectura calculatoarelor
5-2
Limbaje i main
Coninuturi
1. Procesul de compilare 2. Procesul de asamblare 3. Link-editarea i ncrcare 4. Macro-uri 5. Studiu de caz: Extensii la setul de instruciuni Instruciunile Intel MMX
Arhitectura calculatoarelor
5-3
Limbaje i main
Procesul de compilare
Compilarea traduce un program scris ntr-un LP de nivel nalt ntr-un program echivalent funcional n ASM De ex. instruciunea: A = B + 4; Pai pentru compilarea acestei instruciuni n cod ASM Reducerea textului programului la simbolurile elementare ale limbajului
identificatori - A i B
notaii pentru valori constante - 4 delimitatori de program =, +. Acest proces al compilrii se numete analiz lexical.
Arhitectura calculatoarelor
5-4
Limbaje i main
Procesul de compilare
Prelucrarea simbolurilor pentru a recunoate structura programului. Pentru instruciunea A = b + 4, trebuie s fie recunoscut forma:
Arhitectura calculatoarelor
5-5
Limbaje i main
Procesul de compilare
Analiza numelor: asocierea numelor A i B cu anumite variabile din program i asocierea lor mai departe cu locaiile de memorie unde sunt localizate variabilele la execuie. Analiza tipurilor: determinarea tipurilor tuturor datelor din cadrul programului. n exemplul de mai sus, variabilele A i B i constanta 4 vor fi recunoscute ca fiind de tip int n unele limbaje.
Analiza numelor i a tipurilor se numete analiz semantic: determinarea nelesului componentelor program
Arhitectura calculatoarelor
5-6
Limbaje i main
Procesul de compilare
Generarea de cod: asocierea instruciunilor cu secvenele corespunztoare n limbaj de asamblare. n instruciunea A = B + 4, secvena n limbaj de asamblare este: ld [B], %r0, %r1 add %r1, 4, %r2 ! ncarc variabila B n registru. ! Calculeaz valoare expresiei
! Efectueaz atribuirea.
Arhitectura calculatoarelor
5-7
Limbaje i main
Procesul de compilare
- Pai opionali - Alocarea variabilelor la registre - Urmrirea utilizrii registrelor - Optimizarea programului - La crearea compilatorului se pune i informaia despre ISA n el. - Cross-compilatoare (nu e necesar ca ISA pe care ruleaz compilatorul s fie acelai cu ISA pe care l genereaz)
Arhitectura calculatoarelor
5-8
Limbaje i main
5-9
Limbaje i main
5-10
Limbaje i main
- Instruciuni pentru micarea datelor - int A[10] // index de la 0 la 9 - A[i] // i poate fi calculat la execuie - n Pascal: - A: array[-10 .. 10] of integer
- AdresaElement = Baz + (Index - Start)*Dimensiune sub %r3, %r4, %r6 ! %r6 = Index - Start
! %r6 = %r6 * 4
! %r1 = valoare
5-11
Limbaje i main
subcc %r1, %r2, %r0 bne Else ! Instr1 ba Gata Else: ! Instr2 Gata: !
Arhitectura calculatoarelor
5-12
Limbaje i main
- Instruciuni pentru controlul execuiei - while (expr) instr - Exemplu: while (%r1 == %r2) %r3 = %r3 + 1 ba Test True: add %r3, 1, %r3 Test:subcc %r1, %r2, %r0 be True
Arhitectura calculatoarelor
5-13
Limbaje i main
Arhitectura calculatoarelor
5-14
Limbaje i main
- Instruciuni pentru controlul execuiei - for (expr1; expr2; expr3) instr; - Echivalent cu: expr1; while(expr2){ instr; exp3;
Arhitectura calculatoarelor
5-15
Limbaje i main
Procesul de asamblare
Asamblare = Procesul de traducere a programului din limbaj de ASM n limbaj main
5-16
Limbaje i main
Procesul de asamblare
Permit etichete simbolice pentru reprezentarea adreselor i a constantelor. Furnizeaz mijloace programatorului pentru a specifica adresa de start a programului, dac exist una Permite operaii aritmetice la nivel asamblare Include un mecanism care permite ca variabilele s fie definite ntr-un program n limbaj de asamblare i s fie folosite ntr-un alt program, asamblat separat. Suporta macro-expansiune.
Arhitectura calculatoarelor
5-17
Limbaje i main
Arhitectura calculatoarelor
5-18
Limbaje i main
Arhitectura calculatoarelor
5-19
Limbaje i main
Codul asamblat
ld [x], %r1 ld [y], %r2 1100 0010 0000 0000 0010 1000 0001 0100 1100 0100 0000 0000 0010 1000 0001 1000
addcc %r1,%r2,%r3 1000 0110 1000 0000 0100 0000 0000 0010 st %r3, [z] 1100 0110 0010 0000 0010 1000 0001 1100
jmpl %r15+4, %r0 1000 0001 1100 0011 1110 0000 0000 0100 15 9 0 0000 0000 0000 0000 0000 0000 0000 1111 0000 0000 0000 0000 0000 0000 0000 1001 0000 0000 0000 0000 0000 0000 0000 0000
Arhitectura calculatoarelor
5-20
Limbaje i main
Referine nainte
Un exemplu de refereniere nainte:
Arhitectura calculatoarelor
5-21
Limbaje i main
Arhitectura calculatoarelor
5-22
Limbaje i main
Programul asamblat
Arhitectura calculatoarelor
5-23
Limbaje i main
.global este folosit n modulul n care este definit simbolul .extern este folosit n fiecare modul care se refer la simbol
Arhitectura calculatoarelor
5-24
Limbaje i main
Arhitectura calculatoarelor
5-25
Limbaje i main
Arhitectura calculatoarelor
5-26
Limbaje i main
Macro-definiii
O macro-definiie pentru push:
Arhitectura calculatoarelor
5-27
Limbaje i main
Macro-expansiune recursiv
Arhitectura calculatoarelor
5-28
Limbaje i main
Arhitectura calculatoarelor
5-29
Limbaje i main
Intel folosete ca alias termenul MMX pentru regitrii n in virgul mobil. Cei 8 regitrii pe 64 de bii pentru numere n virgul mobil au un dublu rol ca regitrii MMX
Motorola implementeaz 32 de regitrii vector pe 128 de bii ca un nou set, separat i distinct de regitrii pentru numerele n virgul mobil.
Arhitectura calculatoarelor
5-30
Limbaje i main
Arhitectura calculatoarelor
5-31
Limbaje i main
Arhitectura calculatoarelor
5-32
Limbaje i main
Arhitectura calculatoarelor