Vous êtes sur la page 1sur 32

5-1

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:

Identificator = Expresie, unde Expresie este prelucrat n forma:


Identificator + Constant Prelucrarea (Parsing-ul) se mai numete analiz sintactic

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

st %r2, %r0, [A]

! 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

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

Limbaje i main

- Instruciuni pentru micarea datelor


- Instruciuni aritmetice - Instruciuni pentru controlul execuiei - Variabile locale, globale (C) - Adrese cunoscute la: - Asamblare variabile statice - Execuie (stiv) variabile automatice
Arhitectura calculatoarelor

5-9

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

Limbaje i main

- Instruciuni pentru micarea datelor


struct point{ int x; int y; int z; } struct point pt; pt.x; // x la adresa pt

// y la adresa pt + 4 ld [pt + 4], %r1


// z la adresa pt + 8
Arhitectura calculatoarelor

5-10

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

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

sll %r6, 2, %r6


ld [A + %r6], %r1
Arhitectura calculatoarelor

! %r6 = %r6 * 4
! %r1 = valoare

5-11

Maparea de ctre compilator n ASM a celor trei clase de instruciuni


goto etichet ba etichet

Limbaje i main

- Instruciuni aritmetice (evident) - Instruciuni pentru controlul execuiei

if (expr) instr1 else instr2 // Daca expr este %r1==%r2

subcc %r1, %r2, %r0 bne Else ! Instr1 ba Gata Else: ! Instr2 Gata: !
Arhitectura calculatoarelor

5-12

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

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

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

Limbaje i main

- Instruciuni pentru controlul execuiei - do instr while (expr);

True: add %r3, 1, %r3 Test:subcc %r1, %r2, %r0 be True

Arhitectura calculatoarelor

5-14

Maparea de ctre compilator n ASM a celor trei clase de instruciuni

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

Asambloarele ofer urmtoarele:


Permit programatorului s specifice locaia datelor i a codului de la execuie.

Ofer mijloace de iniializare a datelor din memorie nainte de execuia programului


Furnizeaz mnemonici n limbaj de asamblare pentru toate instruciunile main i pentru toate modurile de adresare i traduc instruciunile valide din limbaj de asamblare n echivalentul lor n limbaj main.
Arhitectura calculatoarelor

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

Exemplu de program n asamblare


Vom asambla manual un program simplu scris n lb. de asamblare ARC

Programul adun dou numere

Arhitectura calculatoarelor

5-18

Limbaje i main

Formatul instruciunilor i formatul PSR pentru ARC

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

Crearea tabelei de simboluri

Arhitectura calculatoarelor

5-22

Limbaje i main

Programul asamblat

Arhitectura calculatoarelor

5-23

Link-editarea: Folosind.global i .extern

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

Link-editare i ncrcare: Tabela de simboluri

Tabelele de simboluri pentru exemplul precedent:

Arhitectura calculatoarelor

5-25

Limbaje i main

Exemplu de program ARC

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

Intel MMX (MultiMedia eXtensions)


Adunare vectorial a 8 octei prin instruciunea Intel PADDB mm0, mm1 :

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

Regitrii vector Intel i Motorola

5-30

Limbaje i main

Instruciunile aritmetice MMX i AltiVec

Arhitectura calculatoarelor

5-31

Limbaje i main

Compararea a doi vectori de octei MMX pentru egalitate

Arhitectura calculatoarelor

5-32

Limbaje i main

Atribuire condiional a unui vector de octei MMX

Arhitectura calculatoarelor

Vous aimerez peut-être aussi