1 / 25

Programare in limbaj de asamblare

Programare in limbaj de asamblare. Instructiuni MMX. Tehnologia MMX. MMX – Multi-Media eXtension Obiectiv: cresterea vitezei de prelucrare a informatiilor audio, video, grafica, etc. Achizitia, prelucrarea si generarea in timp-real a informatiilor multimedia

della
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 Instructiuni MMX

  2. Tehnologia MMX • MMX – Multi-Media eXtension • Obiectiv: • cresterea vitezei de prelucrare a informatiilor audio, video, grafica, etc. • Achizitia, prelucrarea si generarea in timp-real a informatiilor multimedia • Dezvoltarea de aplicatii multimedia la care timpul de executie (reactie) este critic • Componente MMX: • Registre MMX (8), MM0 .. MM7; 64biti/registru • Instructiuni MMX (57) • Tipuri de date impachetate • Unitate de executie MMX

  3. Tehnologia MMX – caracteristici generale • Ideea de baza: • Executia in paralel a unei instructiuni pe un set de date • Paralelism de tip SIMD – Single Instruction Multiple Data (simulare) • Tehnologia MMX este eficienta daca: • Datele au o structura de tip vector, matrice, sau o alta structura cu grad ridicat de regularitate • Aceeasi secventa de operatii se aplica in mod identic pe fiecare element al structurii • Aceeasi secventa de prelucrare se executa de un numar foarte mare de ori (ex: pe un milion de pixeli ai unei imagini) • Timpul de executie este critic

  4. Tipuri de date MMX Octeti impachetati (Packed byte): 8 octeti, 64 biti 63 8 7 0 Cuvinte impachetate (Packed word): 4 cuvinte, 64 biti Dublu-cuvinte impachetate (Packed dword): 2 dcuvinte, 64 biti Cuadruplu-cuvant (Quadword): 1 qcuvant, 64 biti

  5. Sintaxa instructiunilor MMX • <instructiune>:= <mnemonica> [<destinatie>,<sursa>] • <mnemonica>:=P<operatie><sufixe> • <sufixe>:= [US|S|SS][B|W|D|Q][B|W|D|Q] • Sufixele indica tipul datelor si modul de efectuare a a operatiilor aritmetice: • US – unsigned, saturation • S, SS – signed, saturation (in lipsa – wrapearound) • B, W, D, sau Q – byte, word, dword, qword; daca apar 2 litere atunci sursa este de tipul primei litere iar destinatia de tipul celei de a doua litere • Exemplu: paddusw MM4, mem1 psubusb MM4, mem1

  6. Operatii aritmetice cu Saturare si cu Intoarcere (wraparound) • Tehnici de solutionare a depasirilor de capacitate (superioara sau inferioara): • Prin “intoarcere” • Prin saturare Exemplul 1: operatii cu numere fara semn (octeti): Intoarcere: Saturare: F0h+20h = 10h F0h+20h = FFh 80h -A0h = 20h 80h -A0h=00h Exemplul 2: operatii cu numere cu semn (octeti): 127+1= - 127 127+1= 127 - 128 – 1 = 127 - 128 – 1 = -128 (simulare)

  7. Operatii aritmetice cu saturare • Exemplul 3: paddsw 7f38+1707 = 7fff - saturare • Exemplul 4: paddusw 7f38+1707 = 963f - nu este saturare 7 f 3 8 + 1 7 0 7 7 f f f Cu semn Fara semn 9 6 3 f

  8. Instructiunile MMX • EMMS • Adunare si scadere • Instructiuni de deplasare (shift) • Instructiuni logice • Instructiuni de multiplicare • Instructiuni de comparare • Instructiuni de impachetare/despachetare • Instructiuni de transfer

  9. Instructiuni MMX • Instructiunea EMMS • Se foloseste dupa o secventa de instructiuni MMX si inainte de o instructiune in virgula flotanta pentru a evita generarea unei exceptii sau a unui rezultat incorect pt. operatii in virgula flotanta • Problema: • starea modulului MMX este o copie a starii unitatii flotante • dupa instructiuni MMX registrul tag al coprocesorului este alterat; poate genera o exceptie de tip stiva invalida • EMMS sterge starea MMX si astfel valideaza registrul tag (toate intrarile in stiva flotanta sunt validate)

  10. Instructiuni de adunare si scadere paddxx <destinatie>, <sursa> <destinatie>:= MMi <sursa>:=MMi | <variabila>

  11. Adunare si scadere - exemple paddb MM3,MM4 paddd MM2, MM1 MM3 8 0 7 F 0 1 0 1 8 0 F F 7 F 8 0 + + + + + + + + F F 1 7 3 8 F F 8 0 F F 7 F 7 F MM4 MM3 7 F 9 6 3 9 0 0 0 0 F E F E F F 8 0 7 F 0 1 0 1 8 0 F F 7 F 8 0 MM2 F F 1 7 3 8 F F 8 0 F F 7 F 7 F MM1 7 F 9 6 3 A 0 0 0 1 F E F E F F MM2

  12. Instructiuni de deplasare (shift) Shift left logic Shift right arithmetic Shift right logic psllx | psrax | psrl <destinatie>, <numar> Elementele destinatiei se deplaseaza la stanga sau la dreapta cu un <numar> de pozitii binare

  13. Instructiuni de deplasare - exemple psllw MM4, 3 1010111111111111 1010000000001111 1000000000000001 1000000000000001 0111111111111000 0000000001111000 0000000000001000 0000000000001000 psllq MM4, 3 1010111111111111 1010000000001111 1000000000000001 1000000000000001 0111111111111101 0000000001111100 0000000000001100 0000000000001000

  14. Instructiuni logice X=X AND Y X=(NOT X) AND Y X=X OR Y X=X XOR Y pand | pandn | por | pxor <destinatie>, <sursa> Operatia logica se executa bit cu bit

  15. Instructiuni logice - exemplu pand MM4, MM3 1010111111111111 1010000000001111 1000000000000001 1000000000000001 0111111111111101 0000000001111100 0000000000001100 0000000000001000 0010111111111101 0000000000001100 0000000000000000 0000000000000000

  16. Instructiuni de multiplicare multiply and add multiply and keep high multiply and keep low pmadd – multiply and add X31-0 = X15-0*Y15-0+X31-16*Y31-16 X63-32 = X47-32*Y47-32+X63-48*Y63-48

  17. Instructiuni de multiplicare pmadd MM3,MM4 MM3 + + * * * * MM4 MM3

  18. Instructiuni de multiplicare pmulh MM3,MM4 MM3 7 1 C 7 8 D 9 4 8 0 0 0 7 1 C 7 8 0 0 0 C F C B F F F F 0 4 0 0 MM4 C71C8000 158BF05C 00008000 01C71C00 MM3 C 7 1 C 1 5 8 B 0 0 0 0 0 1 C 7 pmull MM3,MM4 MM3 8 0 0 0 F 0 5 C 8 0 0 0 1 C 0 0

  19. Instructiuni de comparare compare equal compare greater (intregi cu semn) Exemplu: pcmpeqw MM3,MM4 0 0 0 0 1 2 3 4 F F F F 0 0 C B MM3 0 5 6 0 1 2 3 4 1 3 F F 0 0 C B MM4 0 0 0 0 F F F F 0 0 0 0 F F F F MM3

  20. Instructiuni de impachetare/despachetare pack signed, saturation pack signed to unsigned unpack high unpack low Impachetare: copierea unei structuri mai mari (ex: word) intr-o structura mai mica (ex: byte) cu saturare in caz de nevoie Despachetare: interclasarea elementelor celor doi operanzi – se foloseste pentru extinderea reprezentarii

  21. Instructiuni de impachetare/despachetareExemplu de impachetare packss MM3,MM4 8 0 B 1 0 0 6 C F F C 97 F 3 9 MM3 F F 8 0 F F 0 0 8 0 1 2 7 F C 1 MM4 8 0 8 0 8 0 7 F 8 0 6 C C 97 F MM3 ns s s s s ns ns s ns – nesaturat s - saturat 7F39 = 32569 > 7F00 = 32.512 => sat. FFC9 = - 37 > 8000 = -32.512 => nsat. 1111.1111.1100.1001 => 1100.1001

  22. Instructiuni de impachetare/despachetareExemplu de despachetare punpckhwd MM3,MM4 ; cuvant ->dublu-cuvant 8 0 B 1 0 0 6 C F F C 9 7 F 3 9 MM3 F F 8 0 F F 0 0 8 0 1 2 7 F C 1 MM4 F F 8 0 8 0 B 1 F F 0 0 0 0 6 C MM3

  23. Instructiuni de transfer move dword (32 biti) move qwordword (64 biti) movd | movq <destinatie>, <sursa> <destinatie> := MMi | <variabila_mem> |<registru_x86> <sursa> := MMi | <variabila_mem> |<registru_x86> exemple: movd MM2, var_32 ; se extinde cu 0 movd var_32, MM3 ; se copiaza partea low movq var_64, MM5

  24. Exemple de proceduri MMXProdusul scalar a doi vectori:  a(i)*b(i) et: movq MM0, [adr_v_a] movq MM1, [adr_v_b] pmaddwd MM0, MM1 paddd MM2, MM0 add adr_v_a, 8 add adr_v_b, 8 sub contor jnz et movq MM0, MM2 psrlq MM2, 32 paddd MM2, MM0 movd rez, MM2 a7 a6 a5 a4 a3 a2 a1 a0 MM0 b7 b6 b5 b4 b3 b2 b1 b0 MM1 a3 a2 a1 a0 * b3 b2 b1 b0 a3*b3+a2*b2 a1*b1+a0*b0 + +  ciclu anterior  ciclu anterior

  25. Exemple de programe MMXSuprapunerea selectiva a imaginilor 1. pcmpeqb MM1, MM3 2. pand MM4, MM1 3. pandn MM1, MM3 4. por MM4, MM1 1. 2. 3. 4.

More Related