1 / 25

Programare in limbaj de asamblare

Programare in limbaj de asamblare. Tehnici avansate de scriere a programelor. Pseodo-operatori. Expresii aritmetico-logice trebuie sa se evalueze in procesul de compilare contin constante si variabile de compilare (ex: $) Operatori aritmetici operatori unari: +, -

remy
Download Presentation

Programare in limbaj de asamblare

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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: +, - • <operator> <expresie> • operatori binari ,*, /, MOD, [] • <expresie> <operator> <expresie> • ex: unu + doi, var[operator_index]

  3. Pseodo-operatori • Operatori logici: • AND, OR, NOT, SHR, SHL, XOR • <expresie> <operator> <expresie> • Operatori relationali: (true=0ffh, false=0h)) • EQ, NE, LE, GT, GE • <expresie> <operator> <expresie> • 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: <tip> ptr <expresie> • exemple de utilizare: octet_LO db 55h octet_HI db 66h dublu dd 0 mov ax, word ptr octet_LO ; ax<=6655h mov word ptr dublu, bx mov ax, ds mov word ptr dublu, ax ; dublu<= ds:bx 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 <expresie> • forteaza un depasament de salt de un octet (+-128)

  7. Asamblare conditionata • Directiva IF- ENDIF • pt. generarea de variante diferite • sintaxa: if <expresie> <secventa de instructiuni> else ; este optional <secventa de instructiuni> endif • daca <expresie> 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 <simbol> <secventa de instructiuni sau directive> endif • exemplu: DEBUG = 0 ............ ifdef DEBUG <secventa de depanare> endif

  10. Macrouri • forme prescurtate de scriere a unor secvente de program care se repeta • sintaxa: <nume_macro> macro [<par1> [<par2> ...]] <secventa de instructiuni> endm • exemplu: mm_mov macro Dest, Source mm_mov x, y mov ax, Source mov Dest, ax endm

  11. 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 Macrouri v.s. Proceduri

  12. Problema etichetelor in macrouri • la copierea repetata etichetele se duplica • solutie: etichete “locale” • Directiva LOCAL <nume_macro> macro [<par1> [<par2> ...]] local <et1> [<et2> ..]] .................. <et1>: .................... <et2>: 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 <nume_fisier_asm> • Directivele PUBLIC, EXTERN, EXTRN • sintaxa: public <nume1>[,<nume2> ..]] extern <nume1>:<tip>[, <nume1>:<tip> ....]]

  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) =>O(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: tab[i][j] adr_elementij = adresa(tab)+i*lung_rand +j • utilizarea registrelor interneale procesorului in operatiile curente

  19. Exemplu de optimizare • Problema: filtrarea unei imagini de 100 de ori, rezolutie 256*256 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. Program PASCAL ......... var i:int; j:word; var_com:int; function test(par:word):int:external; $L test.obj {include fisierul Test.obj} ..................... i=test(j); Exemplu:

  25. .MODEL LARGE DATA SEGMENT PUBLIC ‘DATA’ EXTERN VAR_COM:FAR ............ DATA ENDS CODE SEGMENT PUBLIC ‘CODE’ ASSUME CS:CODE PUBLIC TEST TEST PROC FAR PUSH BP MOV BP,SP MOV AX, [BP+6] ; 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 Exemplu (programul in asamblare)

More Related