Introduzione

Attenzione: questo documento contiene materiale tradotto da "Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference" disponibile dal sito Intel. Questo documento è incentrato sugli operatori Assembly introdotti con l'MMX.

EMMS - Resetta lo stato dei registri MMX

OpCode
0F 77

Instruction
EMMS

Description
Esce dalla modalità MMX

Cancella lo stack della FPU e marca come disponibili i registri MMX così da poter essere usati da successive operazioni Floating Point.

L'istruzione EMMS va usata alla fine delle operazioni MMX prima di chiamare qualsiasi procedura che potrebbe fare uso di istruzioni Floating Point.

MOVD - Copia 32 Bits

OpCode
0F 6E /r
0F 7E /r

Instruction
MOVD mm,r/m32
MOVD r/m32,mm

Description
Sposta una DoubleWord da r/m32 a mm
Sposta una DoubleWord da mm a r/m32

Copia una DoubleWorld (32 bits) dal secondo operando (sorgente) al primo operando (destinazione). I due operandi possono essere registri standard a 32 bit, registri MMX, locazioni di memoria, ma tuttavia i dati non possono essere trasferiti tra registri MMX, e tra locazioni di memoria, tantomeno tra un registro standard e un'altro registro standard.

Quando l'operando di destinazione è un registro MMX, i 32 bit dell'operando sorgente vengono scritti nei 32 bit inferiori dei 64 bit dell'operando MMX, e i restanti bit messi a zero. Quando la sorgente è un registro MMX, vengono copiati i soli 32 bit inferiori sulla destinazione.

MOVQ - Copia 64 Bits

OpCode
0F 6F /r
0F 7F /r

Instruction
MOVQ mm,mm/m64
MOVQ mm/m64,mm

Description
Sposta una QuadWord da mm,mm/m64 a mm
Sposta una QuadWord da mm a mm/m64

Copia una QuadWord (64 bit) tra il secondo operando (sorgente) al primo operando (destinazione). Gli operandi possono essere locazioni di memoria o registri MMX, tuttavia non è possibile copiare tra una locazione di memoria e un'altra direttamente.

PACKSSWB/PACKSSDW - Impacchetta con saturazione

OpCode
0F 63 /r
0F 6B /r

Instruction
PACKSSWB mm,mm/m64
PACKSSDW mm,mm/m64

Description
Mette 8 signed word da mm e mm/mm64 in 8 signed byte
Mette 4 signed doubleword da mm e mm/mm64 in 4 signed word in mm

PACKSSWB mette e satura 8 signed word (4 da mm, il primo operando, e 4 da mm/m64, il secondo operando) in 8 signed byte in mm (il primo operando). PACKSSDW mette e satura 4 signed doubleword (2 da mm e 2da mm/m64) in 4signed word in mm.

L'operando di destinazione per entrambe deve essere un registro MMX

PACKUSWB - Impacchetta in unsigned con saturazione

OpCode
0F 67 /r

Instruction
PACKUSWB mm,mm/m64

Description
Mette e satura 8 signed word in 8 signed byte

PACKUSWB mette le 4 signed word da mm e 4 signed word da mm/m64 in 8 unsigned byte di mm. Il risultato viene saturato a 255 se superiore a tale numero o 0 se inferiore.

L'operatore destinazione deve essere un operando MMX.

PADDB/PADDW/PADDD - Somma

OpCode
0F FC /r
0F FD /r
0F FE /r

Instruction
PADDB mm,mm/m64
PADDW mm,mm/m64
PADDD mm,mm/m64

Description
Somma gli 8 bytes di mm/m64 a quelli di mm
Somma le 4 words di mm/m64 a quelle di mm
Somma le 2 doublewords di mm/m64 a quelle di mm

Aggiunge le singole componenti (byte, word, doubleword) dell'operando sorgente (il secondo) alle rispetteve componenti dell'operando destinazione (il primo).

L'operando destinazione deve essere un registro MMX, mentre l'operando sorgente può essere un registro MMX o una locazione di memoria da 64bit.

Come la somma tra interi ADD, PADDB, PADDW, PADDD agisce indistintamente tra interi con o senza segno, ma al contrario non modifica nessuna flag. Infatti tutte le istruzioni MMX non hanno una corrispondente flag per indicare l'overflow, o un riporto, e un tale controllo, se richietsto, deve avvenire a priori via software.

PADDSB/PADDSW - Somma con saturazione

OpCode
0F EC /r
0F ED /r

Instruction
PADDSB mm,mm/m64
PADDSW mm,mm/m64

Description
Somma i bytes con segno di mm/m64 a quelli di mm
Somma le words con segno di mm/m64 a quelle di mm

Somma le compomponenti individuali (bytes o words) del operando sorgente (il secondo) con le rispettive componenti del operando destinazione (il primo). Se il risultato di ogni addizione esce fuori dal range viene saturato in maniera adeguata: i byte tra -128..127 e le word tra -32768..32767.

PADDUSB/PADDUSW - Somma tra unsigned con saturazione

OpCode
0F DC /r
0F DD /r

Instruction
PADDUSB mm,mm/m64
PADDUSW mm,mm/m64

Description
Somma i bytes senza segno di mm/m64 a quelli di mm
Somma le words senza segno di mm/m64 a quelle di mm

Somma le compomponenti individuali (bytes o words) del operando sorgente (il secondo) con le rispettive componenti del operando destinazione (il primo). Se il risultato di ogni addizione esce fuori dal range viene saturato in maniera adeguata: i byte tra 0..255 e le word tra 0..65535.

PAND - AND logico

OpCode
0F DB /r

Instruction
PAND mm,mm/m64

Description
AND logico tra le due quadword

Esegue un AND tra ogni bit dell'operando sorgente (il secondo) con i rispettivi bit dell'operando destinazione (il primo)

PANDN - AND e NOT logico

OpCode
0F DF /r

Instruction
PANDN mm,mm/m64

Description
AND logico tra le mm/m64 e NOT mm

Esegue un NOT logico sull'operando destinazione (il primo) e un AND tra ogni bit dell'operando sorgente (il secondo) con i rispettivi bit dell'operando destinazione appena invertiti.

PCMPEQB/PCMPEQW/PCMPEQD - Uguaglianza (confronto)

OpCode
0F 74 /r
0F 75 /r
0F 76 /r

Instruction
PCMPEQB mm,mm/m64
PCMPEQW mm,mm/m64
PCMPEQD mm,mm/m64

Description
Confronta i bytes in mm/m64 con i bytes di mm.
Confronta le words in mm/m64 con le words di mm.
Confronta le doublewords in mm/m64 con le doublewords di mm.

Confronta le rispettive componeti (bytes, words, doublewords) tra l'operando destinazione (il primo) con l'operando sorgente (il secondo). Se una coppia di elementi sono uguali i bit dell'elemento dell'operando destinazione sono tutti impostati a 1, altrimenti vengono impostati a 0.

PCMPGTB/PCMPGTW/PCMPGTD - Maggiore (confronto)

OpCode
0F 64 /r
0F 65 /r
0F 66 /r

Instruction
PCMPGTB mm,mm/m64
PCMPGTW mm,mm/m64
PCMPGTD mm,mm/m64

Description
Confronta i bytes in mm/m64 con i bytes di mm.
Confronta le words in mm/m64 con le words di mm.
Confronta le doublewords in mm/m64 con le doublewords di mm.

Confronta le rispettive componeti (bytes, words, doublewords) tra l'operando destinazione (il primo) con l'operando sorgente (il secondo). Se l'elemento del registro destinazione è più grande del rispettivo elemento del registro sorgente, i bit dell'elemento destinazione vengono messi a uno, altrimenti vengono impostati a 0.

PMADDWD - Moltiplica e Somma

OpCode
0F F5 /r

Instruction
PMADDWD mm,mm/m64

Description
Moltiplica le words in mm con le words in mm/m64. Somma le due doublewords ottenute e memoriza i risultati in mm.

Moltiplica le singole words con segno del registro destinazione con le rispettive words con segno del registro sorgente, ottenendo 4 doublewords di risultato, che vengono sommate due a due e salvate nel registro destinazione.

L'operando destinazione deve essere un registro MMX, mentre l'operando sorgente può essere un registro MMX o 64-bit in una locazione di memoria.

p 376

 


Pagina Aggiornata il 21  ottobre 2002