Programare in limbaj de asamblare - PowerPoint PPT Presentation

About This Presentation
Title:

Programare in limbaj de asamblare

Description:

Programare in limbaj de asamblare Tehnici avansate de scriere a programelor Pseodo-operatori Expresii aritmetico-logice trebuie sa se evalueze in procesul de ... – PowerPoint PPT presentation

Number of Views:43
Avg rating:3.0/5.0
Slides: 26
Provided by: gyu5
Category:

less

Transcript and Presenter's Notes

Title: Programare in limbaj de asamblare


1
Programare in limbaj de asamblare
  • Tehnici avansate de scriere a programelor

2
Pseodo-operatori
  • Expresii aritmetico-logice
  • trebuie sa se evalueze in procesul de compilare
  • contin constante si variabile de compilare (ex
    )
  • Operatori aritmetici
  • operatori unari , -
  • ltoperatorgt ltexpresiegt
  • operatori binari ,, /, MOD,
  • ltexpresiegt ltoperatorgt ltexpresiegt
  • ex unu doi, varoperator_index

3
Pseodo-operatori
  • Operatori logici
  • AND, OR, NOT, SHR, SHL, XOR
  • ltexpresiegt ltoperatorgt ltexpresiegt
  • Operatori relationali (true0ffh, false0h))
  • EQ, NE, LE, GT, GE
  • ltexpresiegt ltoperatorgt ltexpresiegt
  • Exemple
  • mov ax, tablou(index SHL 2)
  • mov al, stare AND 00001111B
  • text db acesta este un text
  • l_text equ -text - contorul de locatii

4
Fortare de tip (coercion)
  • sintaxa
  • lttipgt ptr ltexpresiegt
  • exemple de utilizare
  • octet_LO db 55h
  • octet_HI db 66h
  • dublu dd 0
  • mov ax, word ptr octet_LO axlt6655h
  • mov word ptr dublu, bx
  • mov ax, ds
  • mov word ptr dublu, ax dublult dsbx
  • mov word ptr si, 5 nu se poate
    determina tipul datei

5
Operatori de tip
  • SEG, OFFSET
  • pt. determinarea adresei de segment si a adresei
    relative
  • exemple
  • sir db 33h, 44h, 55h, 66h
  • mov ax, seg var
  • mov ds, ax
  • mov si, offset var
  • mov al, si
  • SIZE, SIZEOF
  • determina nr. de octeti ai unei variabile tablou
  • LENGTH, LENGTHOF
  • determina nr. de elemente dintr-un tablou

6
Operatori de tip
  • LOW, LOWWORD
  • octetul/cuvantul inferior
  • HIGH, HIGHWORD
  • octetul/cuvantul superior
  • SHORT
  • jmp short ltexpresiegt
  • forteaza un depasament de salt de un octet (-128)

7
Asamblare conditionata
  • Directiva IF- ENDIF
  • pt. generarea de variante diferite
  • sintaxa
  • if ltexpresiegt
  • ltsecventa de instructiunigt
  • else este optional
  • ltsecventa de instructiunigt
  • endif
  • daca ltexpresiegt este diferita de 0 se asambleaza
    prima secventa, altfel a doua

8
Asamblare conditionata
  • Exemplu
  • se genereaza cod diferit pt. 8086 sau 80386
  • Processor 80386
  • .
  • if Processor eq 80386
  • shl ax, 4
  • else procesor 8086
  • mov cl, 4
  • shl ax, cl
  • endif

9
Asamblare conditionata
  • IFDEF, IFNDEF
  • sintaxa
  • ifdef ltsimbolgt
  • ltsecventa de instructiuni sau directivegt
  • endif
  • exemplu
  • DEBUG 0
  • ............
  • ifdef DEBUG
  • ltsecventa de depanaregt
  • endif

10
Macrouri
  • forme prescurtate de scriere a unor secvente de
    program care se repeta
  • sintaxa
  • ltnume_macrogt macro ltpar1gt ltpar2gt ...
  • ltsecventa de instructiunigt
  • endm
  • exemplu
  • mm_mov macro Dest, Source
    mm_mov x, y
  • mov ax, Source
  • mov Dest, ax
  • endm

11
Macrouri v.s. Proceduri
  • Macrouri
  • - la fiecare apel se copiaza secventa de
    instructiuni
  • - nu sunt necesare instructiuni de apel (CALL) si
    de revenire din rutina (RET)
  • - nu se foloseste stiva
  • - trnsferul de parametri - prin copierea numelui
  • Proceduri
  • - o singura copie pt. mai multe apeluri
  • - se folosesc instructiuni de apel si de revenire
  • - se utilizeaza stiva la apel si la revenire
  • - transferul de parametri se face prin registrii
    sau stiva

12
Problema etichetelor in macrouri
  • la copierea repetata etichetele se duplica
  • solutie etichete locale
  • Directiva LOCAL
  • ltnume_macrogt macro ltpar1gt ltpar2gt ...
  • local ltet1gt ltet2gt ..
  • ..................
  • ltet1gt
  • ....................
  • ltet2gt
  • endm

13
Avantajele si dezavantajele utilizarii macrourilor
  • Avantaje
  • pot fi create instructiuni noi
  • poate duce la o programare mai eficienta
  • executie mai eficienta in comparatie cu apelurile
    de proceduri
  • Dezavantaje
  • pot ascunde operatii care afecteaza continutul
    registrilor
  • utilizarea extensiva a macrourilor ingreuneaza
    intelegerea si mentenanta programului

14
Administrarea programelor mari
  • Directiva INCLUDE
  • sintaxa include ltnume_fisier_asmgt
  • Directivele PUBLIC, EXTERN, EXTRN
  • sintaxa
  • public ltnume1gt,ltnume2gt ..
  • extern ltnume1gtlttipgt, ltnume1gtlttipgt ....

15
Probleme de optimizare
  • Cand si ce se optimizeaza
  • regula 90/10 - 90 din timp se executa 10 din
    cod
  • consecinta - daca se elimina 90 din codul rar
    folosit imbunatatirea este de 10
  • ce se doreste?
  • timp redus sau memorie redusa
  • cum se masoara timpul ocupat al procesorului pt.
    fiecare modul - profiler
  • cand este bine sa se optimizeze
  • de la inceput
  • se optimizeaza si partea nesemnificativa
  • programul se scrie greu si se intelege si mai
    greu
  • la sfarsit
  • prea tirziu

16
Optimizarea este necesara ?
  • Contra-argumente
  • viteza mare a procesoarelor, a memoriilor a
    magistralelor
  • spatii de memorie foarte mari
  • Cand este necesara optimizarea
  • prelucrari de informatii multimedia
  • prelucrari de semnale
  • sisteme de control in timp-real, sisteme reactive

17
Trei tipuri de optimizare
  • Alt algoritm, mai bun
  • optimizare de nivel inalt
  • gasirea unui algoritm cu grad mai mic de
    complexitate O(n2) gtO(nlg(n))
  • Algoritm implementat mai bine
  • optimizare de nivel mediu
  • Minimizarea numarului de cicluri
  • optimizare de nivel scazut

18
Tehnici de optimizare
  • reducerea numarului de bucle imbricate
  • reducerea timpului de executie al buclei
    interioare
  • utilizarea poantorilor in adresarea elementelor
    unor structuri de date
  • parcurgerea structurilor de date prin
    incrementarea si decrementarea poantorilor in
    locul calcularii adresei emenentului
  • ex tabij
  • adr_elementij adresa(tab)ilung_rand j
  • utilizarea registrelor interneale procesorului in
    operatiile curente

19
Exemplu de optimizare
  • Problema filtrarea unei imagini de 100 de ori,
    rezolutie 256256 pixeli
  • Variante
  • program Pascal - 45s
  • program C - 29s
  • asamblare (V1) - 6s
  • s-au folosit deplasamente precalculate in locul
    calculului de adresa prin indecsi
  • asamblare (V2) - 4s
  • s-au folosit registre interne in locul
    variabilelor de memorie

20
Exemplu de optimizare
  • Variante (continuare)
  • asamblare (V3) 2,5s
  • s-a evitat recopierea imaginii intermediare in
    matricea initiala
  • asamblare (V4) 2,4s
  • s-a redus dimensiunea variabilelor de la intreg
    la caracter pt. a beneficia de mem. cache
  • asamblare (V5) 2,2s
  • s-a schimbat algoritmul de filtrare, s-au lutat
    in calcul numai 4 vecini ai pixelului in loc de 8
    (rezultatul este diferit)

21
Apelul procedurilor scrise in asamblare din
limbaje de nivel inalt
  • Cand se justifica
  • la accesul direct al unor resurse fizice (ex
    interfete de I/E, memoria video, etc.)
  • pentru cresterea eficientei unor secvente critice
  • functiile de acces la resurse au fost scrise
    (deja) in asamblare
  • Dificultati
  • alta filozofie de scriere a programelor (ex
    registre in loc de variabile, date simpe in locul
    celor structurate)
  • transferul parametrilor de apel si a rezultatelor

22
Apelul procedurilor scrise in asamblare din
limbaje de nivel inalt
  • Reguli
  • procedura scrisa in LA se va declara far si
    public
  • numele si tipul procedurii se va declara in LNI
    cu mentiunea EXTERN
  • parametrii de apel se transmit prin stiva
  • ordinea de scriere pe stiva coincide cu ordinea
    din lista de parametri
  • primul parametru este cel mai adanc in stiva (se
    afla la o adresa mai mare)
  • ultima data inregistrata pe stiva este un
    dublucuvant care reprezinta adresa de revenire
    din rutina

23
Reguli
  • valoarea returnata dupa apel se transmite dupa
    cum urmeaza
  • pt. un octet - in registrul AL
  • pt. doi octeti - in registrul AX
  • pt. patru octeti - in registrele DX (partea mai
    semnificativa) si AX(partea mai putin
    semnificativa
  • in cele mai multe LNI transmiterea parametrilor
    se face prin valoare
  • dupa revenirea din procedura indicatorul de stiva
    SP trebuie refacut la valoarea de dinaintea
    apelului
  • variabilele utilizate in comun (variabilele
    globale) vor fi declarate cu PUBLIC si
    respectiv EXTERN

24
Exemplu
  • Program PASCAL
  • .........
  • var
  • iint
  • jword
  • var_comint
  • function test(parword)intexternal
  • L test.obj include fisierul Test.obj
  • .....................
  • itest(j)

25
Exemplu (programul in asamblare)
  • .MODEL LARGE
  • DATA SEGMENT PUBLIC DATA
  • EXTERN VAR_COMFAR
  • ............
  • DATA ENDS
  • CODE SEGMENT PUBLIC CODE
  • ASSUME CSCODE
  • PUBLIC TEST
  • TEST PROC FAR
  • PUSH BP
  • MOV BP,SP
  • MOV AX, BP6 citeste par
  • .............
  • MOV BX, SEG VAR_COM
  • MOV DS, BX
  • MOV SI, OFFSET VAR_COM MOV AX, SI
  • ..........
  • MOV AX, REZ val. functiei
  • POP BP
  • RET 2 descarcare par. de pe stiva
  • CODE ENDS
  • END
Write a Comment
User Comments (0)
About PowerShow.com