Echipa MMX (din pentium MMX, K6)

Comenzile de tehnologie MMX lucrează cu date întregi pe 64 de biți, și date ambalate în grupuri (vectori) din lungimea totală de 64 de biți. Astfel de date pot fi în memorie sau în opt MMX registre. Aceste registre sunt numite MM0, MM1. MM7. Echipele de tehnologie MMX funcționează cu următoarele tipuri de date:







  • ambalate octet (opt octeți într-un registru de 64 de biți)
  • Cuvinte ambalate (patru cuvinte de 16 biți în registru de 64 de biți)
  • cuvânt dublu ambalate (două cuvinte pe 32 de biți în registru de 64 de biți)
  • cuvinte pe 64 de biți.

În limba engleză, aceste tipuri de date sunt denumite, respectiv, octet ambalate, cuvânt ambalate, doubleword ambalate și quadword.

MMX-comenzi au următoarea sintaxă:

Aici instrucțiuni - un nume de comandă, dest reprezintă un operand de ieșire, src - operanzi de intrare.

Cele mai multe echipe au un sufix care identifică tipul de date utilizate și aritmetică:

  • SUA (saturație fără semn) - satureze aritmetică, date nesemnate.
  • S sau SS (semnat de saturație) - saturarea aritmetică, datele semn. Dacă nici un sufix S, sau SS, folosind aritmetică ciclică (wraparound).
  • B, W, D, Q indică tipul de date. Dacă există două dintre aceste litere în sufixul, primul corespunde operand de intrare, iar al doilea - de ieșire.

MMX-comenzile sunt executate în același mod procesor și un număr în virgulă mobilă. Prin urmare, performanța MMX-instruire (cu excepția EMMS) „rasfatati“ registre de stare cuvânt în virgulă mobilă. Următoarea MMX-comandă (denumire: mm - MMX-registru; M32, M64 - memorie volum 32 și 64 de biți, respectiv, imm - operanzi imediată; ir32 - registru întreg):

Procesorul de comandă asigură tranziția de la executarea MMX-instrucțiuni pentru executarea instrucțiunilor normale cu virgulă mobilă: stabilește valoarea 1 în toți biții cuvântului de stare.

mm PADDB, mm / M64; mm PADDW, mm / M64; PADDD mm, mm / M64

elemente de comandă stivă de date (bytes, cuvinte sau cuvinte duble) de intrare și de ieșire operanzi. În cazul în care suma este în afara intervalului acceptabil, atunci regulile aritmetice exces ciclic se calculează de la celălalt interval. nu se produce unități de „transfer“ de la un articol de date la altul.

mm PADDSB, mm / M64; PADDSW mm, mm / M64

Elemente de date Echipa rabatate (bytes sau cuvinte) de intrare și de ieșire operanzi. În cazul în care suma este dincolo de valoarea limită a intervalului admisibil, atunci rezultatul este considerat a fi valoarea limită.

mm PADDUSB, mm / M64; PADDUSW mm, mm / M64

Elemente de date Echipa rabatate (bytes sau cuvinte) de intrare și de ieșire operanzi. În cazul în care suma este dincolo de valoarea limită a intervalului admisibil, atunci rezultatul este considerat a fi valoarea limită.

mm PSUBB, mm / M64; mm PSUBW, mm / M64; PSUBD mm, mm / M64

comandă scade elementele de date (bytes, cuvinte sau cuvinte duble) ale operanzilor de intrare de la elemente de date de ieșire operanzi. Dacă rezultatul este în afara intervalului acceptabil, atunci regulile de număr corespunzător ciclice aritmetică a unităților numărate de cealaltă gamă. nu se produce unități de „transfer“ de la un articol de date la altul.

PSUBSB mm, mm / M64; PSUBSW mm, mm / M64

comandă scăzută a elementelor de date (bytes sau cuvinte) ale elementului de intrare a datelor de ieșire operanzi operand. În cazul în care diferența este dincolo de valoarea limită a intervalului admisibil, atunci rezultatul este considerat a fi valoarea limită.







mm PSUBUSB, mm / M64; PSUBUSW mm, mm / M64

elementele de comandă scade date de intrare operanzi din Operandul elementele de ieșire de date. În cazul în care diferența este dincolo de valoarea limită a intervalului admisibil, atunci rezultatul este considerat a fi valoarea limită.

PSLLW mm, mm / M64 / imm; PSLLD mm, mm / M64 / imm; PSLLQ mm, mm / M64 / imm

operează date de comandă schimbare elemente (16, 32 sau 64 de biți cuvinte) în operandul de ieșire a numărului de biți definite de intrare operand. biți semnificativi eliberați sunt umplute cu zerouri.

PSRAW mm, mm / M64 / imm; PSRAD mm, mm / M64 / imm

operează date de comandă schimbare elemente (cuvinte 16- sau 32-bit) în operandul de ieșire a numărului de biți definite de intrare operand. În cazul în care trecerea unui număr pozitiv, atunci biții cele mai semnificative rămase vacante sunt umplute cu zerouri, iar dacă este negativ, unitățile.

PSRLW mm, mm / M64 / imm; PSRLD mm, mm / M64 / imm; PSRLQ mm, mm / M64 / imm

operează date de comandă schimbare elemente (16, 32 sau 64 de biți cuvinte) în operandul de ieșire a numărului de biți definite de intrare operand. Cele mai semnificative biți părăsite sunt umplute cu zerouri.

comandă calculează la nivel de bit logic al operanzilor.

comandă calculează circulație (bitwise NU) ieșirea operandului, apoi un bitwise logic între intrare operand și convertește valoarea de ieșire.

comandă calculează la nivel de bit SAU logic al operanzilor.

comandă calculează XOR logic la nivel de bit al operanzilor.

PMADDWD mm, mm / M64

Echipa perechi multiplică cuvântul de 16 biți, cu semnul de intrare și de ieșire operanzi. Acest lucru oferă produs patru pe 32 de biți. Apoi, primul produs se adaugă la al doilea și al treilea la al patrulea. Sumele înregistrate în 32 de biți cuvinte de ieșire operanzi. Dacă toate cuvintele de pe un 8000h egal, rezultatul va fi 80000000h (singurul caz în care multiplicarea numerelor negative conduce la un rezultat negativ).

PMULHW mm, mm / M64

comandă pairwise multiplică cuvântul de 16 biți, cu semnul operanzii de intrare și o ieșire care furnizează produsul patru pe 32 de biți. MSBs de lucrări scrise în 16 biți cuvinte de ieșire operanzi. LSB lucrări sunt pierdute.

PMULLW mm, mm / M64

comandă pairwise multiplică cuvântul de 16 biți, cu semnul operanzii de intrare și o ieșire care furnizează produsul patru pe 32 de biți. LSB lucrări scrise în 16 biți cuvinte de ieșire operanzi. MSBs ale lucrărilor sunt pierdute.

mm PCMPEQB, mm / M64; mm PCMPEQW, mm / M64; PCMPEQD mm, mm / M64

compararea elemente de date câte două comenzi (bytes, 16- sau 32-biți cuvinte) de intrare și de ieșire operanzi. În cazul în care elementul de ieșire de date operanzi este egal cu un membru de intrare corespunzătoare, astfel de ieșire de unități de elemente operand umple. Dacă nu există nici o egalitate, acesta este umplut cu zerouri.

mm PCMPGTB, mm / M64; mm PCMPGTW, mm / M64; PCMPGTD mm, mm / M64

compararea elemente de date câte două comenzi (bytes, 16- sau 32-biți cuvânt cu semn) de intrare și de ieșire operanzi. Dacă ieșirea elementului de date operanzi este mai mare decât elementul de intrare corespunzător, astfel de ieșire unități elementului operanzi umple; dacă el nu este mai mare decât de intrare, atunci acesta este umplut cu zerouri.

PACKSSWB mm, mm / M64; PACKSSDW mm, mm / M64

comenzi converti elementele de date lungi (16-bit și 32-biți cuvânt cu semn) într-o perioadă mai scurtă (bytes sau cuvinte de 16 biți cu semn). Dacă valoarea inițială a fost în afara intervalului admisibil pentru tipul de date de ieșire, atunci rezultatul ambalajului este considerat aproape de valoarea limită a intervalului.

PACKUSWB mm, mm / M64

comandă convertește cuvântul de 16 biți din semnul celor doi operanzi într-un octet nesemnate și le scrie la operandul de ieșire. În cazul în care cuvântul original, cu semnul a fost mai FFh, rezultatul conversiei este considerată FFh. În cazul în care cuvântul original, cu un rezultat negativ al conversiei este considerată 00h.

PUNPCKHBW mm, mm / M64; mm PUNPCKHWD, mm / M64; PUNPCKHDQ mm, mm / M64

comandă pairwise combinate elemente de date sursă (bytes, cuvinte 16- sau 32-bit), care au fost în 32 de biți superiori ai ambelor operanzi. Elementele rezultate de date mai lungi scrise la operandul de ieșire. Valorile inițiale ale LSB operanzilor nu afectează rezultatul.

PUNPCKLBW mm, mm / M64; mm PUNPCKLWD, mm / M64; PUNPCKLDQ mm, mm / M64

comandă elemente de date sursă de perechi combinate (bytes, 16- sau 32-biți cuvânt) este în 32 de biți mici de ambii operanzi. Elementele rezultate de date mai lungi scrise la operandul de ieșire. Valorile inițiale ale majorității biți semnificativi ai operanzilor rezultatul nu este afectat.

MOVD mm, mm / M32 / ir32

copiază 32 de biți de biți de ordine joasă MMX-registru sau memorie, sau dintr-un registru întreg la inferior 32-bit MMX-registru (biți superioare sunt umplute cu zerouri).

MOVD M32 / ir32, mm

copiază 32 biți de biți de ordine joasă MMX în memorie sau un registru la număr întreg registru.