Revision 25914907 of "MMX" on ukwiki

{{переписати}}
'''MMX''' ('''M'''ulti'''m'''edia E'''x'''tensions — [[Мультимедіа|мультимедійні]] розширення) — комерційна назва додаткового [[Архітектура системи команд|набору інструкцій]], що виконують характерні для процесів кодування / декодування потокових аудіо / відео даних дії за одну [[Машинна інструкція|машинну інструкцію]]. Вперше з'явився в процесорах [[Pentium MMX]]. Розроблений у першій половині [[1990-ті|1990-х]].

{{дослівний переклад|url=http://www.radiotex.narod.ru/mmx.htm}}

== Регістри MMX ==
Розширення MMX включає в себе вісім 64-[[біт]]них регістрів загального користування MM0-MM7. Для сумісності зі способами збереження стану [[процесор]]а в існуючих [[Операційна система|ОС]] Intel була змушена об'єднати в програмній моделі [[процесор]]а вісім [[Регістр процесора|регістрів]] MMX з [[мантиса]]ми восьми регістрів [[FPU]] ([[Математичний співпроцесор]]). Апаратно це можуть бути різні пристрої, але з точки зору програміста — це одні й ті ж регістри. Таким чином, не можна одночасно користуватися командами [[Математичний співпроцесор|Математичного співпроцесора]] і MMX.

== Типи даних MMX ==
Команди технології MMX працюють з 64-бітними [[Ціле число (тип даних)|цілочисельними даними]], а також з даними, упакованими в групи ([[вектор]]и) загальною довжиною 64 біта. Такі дані можуть перебувати в пам'яті або у восьми MMX-регістрах.

Команди технології MMX працюють з такими типами даних:
* Упаковані [[байт]]и (вісім байтів в одному 64-розрядному регістрі) ({{lang-en|packed byte}});
* упаковані [[машинне слово|слова]] (чотири 16-розрядних слова в 64-розрядному регістрі) (''packed word'');
* Упаковані подвійні слова (два 32-розрядних слова в 64-розрядному регістрі) (''packed doubleword'');
* 64-розрядні слова (''quadword'').

== Синтаксис ==
'' MMX ''- команди мають такий синтаксис:
<code>instruction [dest, src]</code>
Тут ''' instruction '''&nbsp;— ім'я команди, ''' dest ''' позначає вихідний операнд, ''' src '''&nbsp;— вхідний операнд.

У систему команд введено 57 додаткових інструкцій для одночасної обробки декількох одиниць даних.
Більшість команд мають [[підрядок|суфікс]], який визначає тип даних і використану арифметику:
* US (unsigned saturation)&nbsp;— {{нп|арифметика з насиченням|||Saturation arithmetic}}, дані без знака.
* S або SS (signed saturation)&nbsp;— арифметика з насиченням, дані зі знаком. Якщо у суфіксі немає ні S, ні SS, використовується циклічна арифметика (wraparound).
* B, W, D, Q вказують тип даних. Якщо у суфіксі є дві з цих букв, перша відповідає вхідному операнду, а друга&nbsp;— вихідно.
Нові інструкції включають такі групи:
* Команди пересилання даних (Data Transfer Instructions) між регістрами MMX і цілочисельними регістрами і пам'яттю;
* Команди перетворення типів
* Арифметичні операції (Arithmetic Instructions), що включають додавання і віднімання в різних режимах, множення і комбінацію множення і складання;
* Команди порівняння (Comparison Instructions) елементів даних на рівність чи за величиною;
* Логічні операції (Logical Instructions)&nbsp;— І, І-НЕ, АБО і виключаюче АБО, що виконуються над 64 бітними операндами;
* Зсувні операції (Shift Instructions) логічні і арифметичні;
* Команди управління станом (Empty MMX State) очищення MMX&nbsp;— установка ознак порожніх регістрів в слові тегів.
Інструкції MMX не впливають на флаги умов.
Регістри MMX, на відміну від регістрів FPU, адресуються фізично, а не відносно [[TOS]]. Будь-яка інструкція MMX обнуляє поле TOS регістра стану FPU.
Інструкції MMX доступні з будь-якого режиму процесора.

== Див. також ==
* [[Streaming SIMD Extensions|SSE]]
* [[SSE2]]
* [[SSE3]]

== Джерела ==
{{reflist}}

== Література ==
* Зубков С. В. Assembler для DOS, Windows, UNIX. 3-тє вид., Стер.&nbsp;— М.: ДМК Прес; СПб. : Питер, 2004.&nbsp;— 608 с.

== Посилання ==
* [https://web.archive.org/web/20090124124345/http://download.intel.com/design/PentiumII/manuals/24319002.PDF IA Software Developer's Manual, Vol 1] {{ref-en}} , Див. розділ 8 про програмування MMX
* [http://www.codenet.ru/progr/optimize/mmx.php Codenet.ru] {{ref-ru}} , Стаття про програмування ММХ

[[Категорія:Інструкції x86]]
[[Категорія:SIMD]]