MMX
![]() | Цю статтю потрібно повністю переписати відповідно до стандартів якості Вікіпедії. (серпень 2019) |
![]() | Ця стаття містить перелік джерел, але походження окремих тверджень у ній залишається незрозумілим через практично повну відсутність виносок. (серпень 2019) |
MMX (Multimedia Extensions — мультимедійні розширення) — комерційна назва додаткового набору інструкцій, що виконують характерні для процесів кодування / декодування потокових аудіо / відео даних дії за одну машинну інструкцію. Вперше з'явився в процесорах Pentium MMX. Розроблений у першій половині 1990-х.
Розширення MMX включає в себе вісім 64-бітних регістрів загального користування MM0-MM7. Для сумісності зі способами збереження стану процесора в наявних операційних системах Intel була змушена об'єднати в програмній моделі процесора вісім регістрів MMX з мантисами восьми регістрів математичного співпроцесора (FPU). Апаратно це можуть бути різні пристрої, але з точки зору програміста — це одні й ті ж регістри. Таким чином, не можна одночасно користуватися командами математичного співпроцесора і MMX.
Команди технології MMX працюють з 64-бітними цілочисельними даними, а також з даними, упакованими в групи (вектори) загальною довжиною 64 біта. Такі дані можуть перебувати в пам'яті або у восьми MMX-регістрах.
Команди технології MMX працюють з такими типами даних:
- Упаковані байти (вісім байтів в одному 64-розрядному регістрі) (англ. packed byte);
- упаковані слова (чотири 16-розрядних слова в 64-розрядному регістрі) (packed word);
- Упаковані подвійні слова (два 32-розрядних слова в 64-розрядному регістрі) (packed doubleword);
- 64-розрядні слова (quadword).
MMX - команди мають такий синтаксис:
instruction [dest, src]
Тут instruction — ім'я команди, dest позначає вихідний операнд, src — вхідний операнд.
У систему команд введено 57 додаткових інструкцій для одночасної обробки декількох одиниць даних. Більшість команд мають суфікс, який визначає тип даних і використану арифметику:
- US (unsigned saturation) — арифметика з насиченням[en], дані без знака.
- S або SS (signed saturation) — арифметика з насиченням, дані зі знаком. Якщо у суфіксі немає ні S, ні SS, використовується циклічна арифметика (wraparound).
- B, W, D, Q вказують тип даних. Якщо у суфіксі є дві з цих букв, перша відповідає вхідному операнду, а друга — вихідно.
Нові інструкції включають такі групи:
- Команди пересилання даних (Data Transfer Instructions) між регістрами MMX і цілочисельними регістрами і пам'яттю;
- Команди перетворення типів
- Арифметичні операції (Arithmetic Instructions), що включають додавання і віднімання в різних режимах, множення і комбінацію множення і складання;
- Команди порівняння (Comparison Instructions) елементів даних на рівність чи за величиною;
- Логічні операції (Logical Instructions) — І, І-НЕ, АБО і виключне АБО, що виконуються над 64 бітними операндами;
- Зсувні операції (Shift Instructions) логічні і арифметичні;
- Команди управління станом (Empty MMX State) очищення MMX — установка ознак порожніх регістрів в слові тегів.
Інструкції MMX не впливають на прапорці умов. Регістри MMX, на відміну від регістрів FPU, адресуються фізично, а не відносно TOS. Будь-яка інструкція MMX обнуляє поле TOS регістра стану FPU. Інструкції MMX доступні з будь-якого режиму процесора.
- Зубков С. В. Assembler для DOS, Windows, UNIX. 3-тє вид., Стер. — М.: ДМК Прес; СПб. : Питер, 2004. — 608 с.
- IA Software Developer's Manual, Vol 1 (англ.) , Див. розділ 8 про програмування MMX
- Codenet.ru [Архівовано 4 вересня 2019 у Wayback Machine.] (рос.) , Стаття про програмування ММХ