+ All Categories
Home > Documents > Programare in limbaj de asamblare

Programare in limbaj de asamblare

Date post: 31-Jan-2016
Category:
Upload: della
View: 99 times
Download: 1 times
Share this document with a friend
Description:
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 - PowerPoint PPT Presentation
25
1 Programare in limbaj de asamblare Instructiuni MMX
Transcript
Page 1: Programare in limbaj de asamblare

1

Programare in limbaj de asamblare

Instructiuni MMX

Page 2: Programare in limbaj de asamblare

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

Page 3: Programare in limbaj de asamblare

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

Page 4: Programare in limbaj de asamblare

4

Tipuri de date MMX

63 8 7 0

Octeti impachetati (Packed byte): 8 octeti, 64 biti

Cuvinte impachetate (Packed word): 4 cuvinte, 64 biti

Dublu-cuvinte impachetate (Packed dword): 2 dcuvinte, 64 biti

Cuadruplu-cuvant (Quadword): 1 qcuvant, 64 biti

Page 5: Programare in limbaj de asamblare

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, mem1psubusb MM4, mem1

Page 6: Programare in limbaj de asamblare

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)

Page 7: Programare in limbaj de asamblare

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

9 6 3 f

Cu semn

Fara semn

+

Page 8: Programare in limbaj de asamblare

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

Page 9: Programare in limbaj de asamblare

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)

Page 10: Programare in limbaj de asamblare

10

Instructiuni de adunare si scadere

Instructiune b w d q

padd X X X

padds X X

paddus X X

psub X X X

psubs X X

psubus X X

paddxx <destinatie>, <sursa>

<destinatie>:= MMi

<sursa>:=MMi | <variabila>

Page 11: Programare in limbaj de asamblare

11

Adunare si scadere - exemple

paddb MM3,MM4

paddd MM2, MM1

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

+ + + + + + + +

7 F 9 6 3 9 0 0 0 0 F E F E F F

MM3

MM4

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

7 F 9 6 3 A 0 0 0 1 F E F E F F

MM2

MM1

MM2

Page 12: Programare in limbaj de asamblare

12

Instructiuni de deplasare (shift)

Instructiune b w d q

psll X X X

psra X X

psrl X X X

psllx | psrax | psrl <destinatie>, <numar>

Elementele destinatiei se deplaseaza la stanga sau la dreapta cu un <numar> de pozitii binare

Shift left logic

Shift right arithmetic

Shift right logic

Page 13: Programare in limbaj de asamblare

13

Instructiuni de deplasare - exemple

1010111111111111 1010000000001111 1000000000000001 1000000000000001

psllw MM4, 3

0111111111111000 0000000001111000 0000000000001000 0000000000001000

1010111111111111 1010000000001111 1000000000000001 1000000000000001

psllq MM4, 3

0111111111111101 0000000001111100 0000000000001100 0000000000001000

Page 14: Programare in limbaj de asamblare

14

Instructiuni logice

Instructiune 64 biti

pand X

pandn X

por X

pxor X

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

Page 15: Programare in limbaj de asamblare

15

Instructiuni logice - exemplu

1010111111111111 1010000000001111 1000000000000001 1000000000000001

0111111111111101 0000000001111100 0000000000001100 0000000000001000

pand MM4, MM3

0010111111111101 0000000000001100 0000000000000000 0000000000000000

Page 16: Programare in limbaj de asamblare

16

Instructiuni de multiplicare

Instructiuni b w d q

pmadd

pmulh X

pmull X

pmadd – multiply and add

X31-0 = X15-0*Y15-0+X31-16*Y31-16

X63-32 = X47-32*Y47-32+X63-48*Y63-48

multiply and add

multiply and keep low

multiply and keep high

Page 17: Programare in limbaj de asamblare

17

Instructiuni de multiplicare

* *+* *+

pmadd MM3,MM4

MM3

MM3

MM4

Page 18: Programare in limbaj de asamblare

18

Instructiuni de multiplicare

pmulh MM3,MM4

MM3

MM3

MM4

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

C 7 1 C 1 5 8 B 0 0 0 0 0 1 C 7

C71C8000 158BF05C 00008000 01C71C00

MM38 0 0 0 F 0 5 C 8 0 0 0 1 C 0 0

pmull MM3,MM4

Page 19: Programare in limbaj de asamblare

19

Instructiuni de comparare

Instructiuni b w d q

pcmpeq X X X

pcmpgt X X X

compare equal

compare greater (intregi cu semn)

Exemplu: pcmpeqw MM3,MM4

MM3

MM3

MM4

0 0 0 0 1 2 3 4 F F F F 0 0 C B

0 5 6 0 1 2 3 4 1 3 F F 0 0 C B

0 0 0 0 F F F F 0 0 0 0 F F F F

Page 20: Programare in limbaj de asamblare

20

Instructiuni de impachetare/despachetare

Instructiuni b w d q

packss

packus

punpckh

punpckl

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

unpack high

unpack low

pack signed, saturationpack signed to unsigned

Page 21: Programare in limbaj de asamblare

21

Instructiuni de impachetare/despachetareExemplu de impachetare

MM3

MM4

8 0 B 1 0 0 6 C F F C 9 7 F 3 9

F F 8 0 F F 0 0 8 0 1 2 7 F C 1

packss MM3,MM4

MM3 8 0 8 0 8 0 7 F 8 0 6 C C 9 7 F 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

Page 22: Programare in limbaj de asamblare

22

Instructiuni de impachetare/despachetareExemplu de despachetare

MM3

MM4

8 0 B 1 0 0 6 C F F C 9 7 F 3 9

F F 8 0 F F 0 0 8 0 1 2 7 F C 1

punpckhwd MM3,MM4 ; cuvant ->dublu-cuvant

MM3 F F 8 0 8 0 B 1 F F 0 0 0 0 6 C

Page 23: Programare in limbaj de asamblare

23

Instructiuni de transfer

Instructiune 32biti 64 biti

movd X

movq X

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

Page 24: Programare in limbaj de asamblare

24

Exemple de proceduri MMXProdusul scalar a doi vectori: a(i)*b(i)

a7 a6 a5 a4 a1a2a3 a0

b7 b6 b5 b4 b1b2b3 b0

MM0

MM1

a1a2a3 a0 b1b2b3 b0*

a3*b3+a2*b2 a1*b1+a0*b0

ciclu anterior

+ +

ciclu anterior

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

Page 25: Programare in limbaj de asamblare

25

Exemple de programe MMXSuprapunerea selectiva a imaginilor1. pcmpeqb MM1, MM3

2. pand MM4, MM1

3. pandn MM1, MM3

4. por MM4, MM1 1.

2.

3.

4.


Recommended