Формати даних та команди їх обробки процесорів Intel Pentium III і Intel p>
Pentium IV p>
АНОТАЦІЯ p>
У курсової роботі представлені дані про всілякі форматах данихпроцесорів Intel Pentium III і Intel Pentium IV. Так само наведено повнийсписок команд, реалізованих в даних процесорах, з коротким описом дляобробки цих даних. Більш докладно розглянуті команди блоку XMM: SSE -
Pentium III і SSE2 - Pentium IV, з докладним описом: для даних командпредсталено опис сінтксіса, правила побудови машинного коду, принципдії (для багатьох команд принцип дії для більшої наочностіпредставлений графічно, у вигляді схем), вплив команди на прапорипроцесора, можливі виключення виникає під час виконання команд. p>
ЗМІСТ p>
Введення. . . . . . . . . . . . . . . . p>
. . . . . . . . . . . . . 4 p>
1. Типи даних процесорів Pentium 3, Pentium 4. . . . . . p>
. . . . . . 5 p>
2. Математичний співпроцесор x87. . . . . . . .
. . . . . . . . 9 p>
3. Технологія MMX. . . . . . . . . . . .
. . . . . . . . . . . 12 p>
4. Розширення SSE і SSE2 - блок XMM. . . . . . . . .
. . . . . . 14 p>
5. Команди обробки даних. . . . . . . . . .
. . . . . . . . . 15 p>
6. Команди блоку XMM (SSE і SSE2). . . . . . . . .
. . . . . . . 31 p>
6.1. Команди блоку XMM (SSE - Pentium 3). . . . . . p>
. . . . . 33 p>
6.2. Команди блоку XMM (SSE2 - Pentium 4). . . . . p>
. . . . . . 50 p>
Література. . . . . . . . . . . . . . .
. . . . . . . . . . . . . 89 p>
ВСТУП p>
Метою курсової роботи «Формати даних та команди їх обробкипроцесорів Intel Pentium III, Intel Pentium IV »є поитка найбільшповно показати відмітні ознаки сучасних процесорів. У данійроботі автор не ставив собі завдання розписати кожну команду обробкиданих існуючу в даних процесорах, адже відмінна рисапроцесорів Intel полягає в тому, що найбільш пізні модифікаціїповністю сумісні з більш ранніми. У процесорах Intel Pentium III,
Intel Pentium IV нововведенням стали два блоки XMM (eXtended MultiMedia) --це SSE (Streaming SIMD (Single Istruction Multiply Data) Extensions) --введений в процесорі Intel Pentium III і SSE2 - введений в процесорі
Intel Pentium IV. Тому базові команди (існуючі в більш ранніхмодифікаціях Intel, починаючи з 8086), команди математичного співпроцесора
(FPU) і команди блоку MMX, що з'явилися вперше в процесорі Intel Pentiumрозглянуті лише оглядово. Так як розширення 3Dnow! блоку MMX, введенефірмою в процесорах AMD K6-2 на даний момент відсутня в процесорахфірми Intel, то воно зовсім не розглянуто в курсовій роботі. p>
1. Типи даних процесорів Pentium 3, Pentium 4 p>
Історія 32-розрядних процесорів Intel Pentium 3 і Pentium 4 почаласяз процесора Intel386. Він увібрав у себе всі риси своїх 16-розряднихпопередників 8086/88 і 80286 для забезпечення сумісності з величезнимоб'ємом програмного забезпечення, що існував на момент його появи.
Процесори можуть оперувати з 8 -, 16 - і 32-бітними операндами, рядкамибайт, слів і подвійних слів, а також з битами, бітовими полями і рядкамибіт. p>
Розглянуті процесори безпосередньо підтримують (використовують уяк операндів) знакові і беззнакові цілі числа, рядки байт, цифр ісимволів, бітові рядки, покажчики і числа з плаваючою точкою. У сімействіх86 прийнято, що слова записуються у двох суміжних байтах пам'яті, починаючи змолодшого. Адресою слова є адреса його молодшого байта. Подвійні словазаписуються в чотирьох суміжних байтах, знову-таки починаючи з молодшого байта,адреса якого і є адресою подвійного слова. Цей порядок називається
Little-Endian Memory Format. В інших родинах процесорів застосовують іЗворотній порядок - Big-Endian Memory Format, в якому адресою слова
(подвійного слова) є адреса його старшого байта, а молодші байтирозташовуються в наступних адресах. Для взаємного перетворення форматівслова є інструкція XCHG, подвійного слова - BSWAP (процесор 486 івище). p>
На рис.1. приведені формати даних, що обробляються целочисленнымблоком АЛП усіх 32-розрядних процесорів: p>
• Біт (Bit) - одиниця інформації. Біт в пам'яті задається базою (адресоюслова) і зміщенням (номером біта в слові). p>
• бітове поле (Bit Field) - група до 32 суміжних біт, що розташовуютьсяне більше ніж в 4 байтах. p>
• Бітова рядок (Bit String) - набір суміжних біт довжиною до 4 Гбіт. p>
• Байт (Byte) - 8 біт. p>
• Числа без знака: байт/слово/подвійне/учетверенное слово (Unsigned
Byte/Word/Double Word/Quade Word), 8/16/32/64 біт. P>
• Цілі числа зі знаком: байт/слово/подвійне/учетверенное слово
(Integer Byte/Word/Double Word/Quade Word). Одиничне значення самогостаршого біта (знак) є ознакою негативного числа, якезберігається в додатковому коді. p>
• Двійково-десяткові числа (BCD - Binary Coded Decimal): p>
• 8-розрядні упаковані (Packed BCD), що містять два десятковихрозряду в одному байті; p>
• 8-розрядні неупаковані (Unpacked BCD), що містять один десятковийрозряд у байті (значення біт 7:4 при складання і віднімання несуттєво,при збільшенні і поділі вони повинні бути нульовими). p>
• Строки байт, слів і подвійних слів (Bit String, Byte String, Word
String, Double Word String) довжиною до 4 Гбайт. P>
• Покажчики: p>
• довгий покажчик (48 біт) - 16-бітний селектор (або сегмент) і 32-бітне зсув; p>
• короткий покажчик - 32-бітне зсув; p>
• просто покажчик (32 біт, єдиний тип покажчика для 8086 і 80286) • 16-бітний селектор (або сегмент) і 16 -- бітне зсув. p>
16-розрядні процесори з наведених типів даних не підтримуютьучетверенние слова усіх типів, бітові поля і рядки, рядки подвійних слів,короткі та довгі покажчики. p>
Числа у форматі з плаваючою точкою та упаковані 80-бітові BCD-числаобробляються блоками FPU процесорів типу 486 і вище, а такожсопроцессорами 8087/287/387. Упаковані 64-бітні і 128-бітові даніобробляються процесорами з ММХ і SSE. Формати даних, що обробляютьсяблоками FPU/MMX і ХММ, представлені на рис. 2. P>
• Дійсні числа в форматі з плаваючою точкою: p>
• одинарної точності (Single Precision), 32 біт - 23 біт мантиса, 8 біт порядок; p>
• подвійної точності (Double Precision), 64 біт - 52 біт мантиса, p>
11 біт порядок; p>
• підвищеної точності (Extended Precision), 80 біт - 64 біт мантиса, 15 біт порядок. p>
• Двійково-десяткові 80-бітові упаковані числа (18 десяткових розрядів і знак). p>
• Упаковані дійсні числа одинарної точності у форматіплаваючою точкою, обробляються блоком ХММ. p>
• Упаковані цілі числа, знакові і беззнакові, обробляютьсяблоком ММХ: p>
• упаковані байти (Packed byte) - вісім байт; p>
• упаковані слова (Packed word) - чотири слова; p>
• упаковані подвійні слова (Packed doubleword) - два подвійних слова; p>
• учетверенное слово (Quadword) - одне слово. p>
Для 16-розрядних процесорів, природно, всі формати чисел дляблоків ММХ і ХММ недоступні. p>
Розглянемо більш детально блоки, згадані вище: блоки FPU, MMX, XMM,які архітектурі процесорів IA-32 х86 тримаються осібно. Вониприсутні не але всіх процесорах і навіть по схемотехнічне реалізаціїє прибудовами до центрального процесора з його набором звичайнихцілочисельних регістрів. Дані блоки призначені для прискоренняобчислень. p>
Математичний співпроцесор (FPU) дозволяє використовувати декількаформатів чисел з плаваючою точкою - FP-форматів. Операції з такими числамиможна виконувати і програмно засобами цілочисельного процесора, алеспівпроцесор виконує ці операції анпаратно у багато разів швидше. Блок ММХдає прискорення цілочисельних обчислень за рахунок одночасної обробкиоднією інструкцією цілого пакету чисел (пар чисел). Блок ХММ комбінує цідва прийоми - обробляє однією інструкцією пакет з чотирьох чисел у FP -форматі. Історично першим з'явився співпроцесор. Блок ММХ радисумісності з операційними системами "сховали" в той же обладнання,що і співпроцесор. Так з'явився комбінований блок, названий блоком
FP/MMX, або FPU/ММХ. І толисо блок ХММ, що використовується розширенням SSEпроцесорів Pentium 3, став повністю новим самостійним наборомрегістрів.
Рис. 1. Типи даних, що обробляються целочисленным АЛУ p>
Рис. 2. Типи даних, що обробляються блоками FPU/MMX і ХММ
При відсутності математичного співпроцесора прикладна програма все-такиможе використовувати інструкції FPU, але для цього операційна система повиннапідтримувати емуляцію співпроцесора. Емулятор співпроцесора - це програма -обробник переривання від співпроцесора або виключення # NM, яка повинна
"виловити" код операції, співпроцесора, визначити місцезнаходження даних івиконати необхідні обчислення, використовуючи цілочисельну арифметикуцентрального процесора. Зрозуміло, що емуляція буде виконуватися в багаторазів повільніше, ніж ті ж дії, що виконуються справжнім співпроцесором. Тимне менше емуляція дозволяє все-таки користуватися прикладними програмами,вимагають обчислень з плаваючою точкою. Для цього в реєстрі CR0 повиннобути встановлено поєднання прапорів ЕМ = 1, МР = 0. Для емуляції в IBM PCзазвичай встановлюють значення NE = 0. Тоді кожна інструкція FPUавтоматично буде викликати емулятор генерацією запиту переривання (а невинятку # NM, як було б при NE = 1). p>
Емуляція для блоків ММХ і ХММ не передбачається - ці блокипризначені для прискорення обчислень в додатках реального часу, івиконувати їх з вкрай низькою швидкістю емуляції було б простобезглуздо. Якщо встановлений прапор емуляції ЕМ = 1, то будь-яка інструкція ММХвикличе виключення # UD. p>
2. Математичний співпроцесор x87 p>
Математичний співпроцесор призначений для розширення обчислювальнихможливостей центрального процесора - виконання арифметичних операцій,обчислення основних математичних функції (тригонометричних, експоненти,логарифма) і т. д. У різних поколіннях процесорів він називався по-різному
- FPU (Floating Point Unit - блок чисел з плаваючою точкою) або NPX
(Numeric Processor eXtension - числове розширення процесора). P>
співпроцесор підтримує сім типів даних: 16 -, 32 -, 64-бітні цілічисла; 32 -, 64 -, 80-бітові числа з плаваючою точкою і 18-розрядні числа вдвійковій-десятковому форматі. Формат чисел з плаваючою точкою відповідаєстандартами IEEE 754 і 854. Застосування співпроцесора підвищуєпродуктивність обчислень в сотні разів. З програмної точки зоруспівпроцесор і процесор виглядають як єдине ціле. У сучасних (486 +)процесорах FPU розташовується на одному кристалі з центральним процесором.
Для процесорів 386 і нижче співпроцесор був окремою мікросхемою,підключається до локальної ніші основного процесора. У будь-якому разіспівпроцесор виконує тільки свої специфічні команди, а всю роботу подекодуванню інструкції і доставки даних здійснює CPU. Співпроцесорможе виконувати обчислення паралельно з центральним процесором,незалежно від переключення задач у захищеному режимі. Як і основнийпроцесор, співпроцесор може працювати в реальному або захищеному режимі іперемикати розрядність-16 або 32. Зміна режиму впливає на форматвідображення регістрів співпроцесора в оперативній пам'яті, при цьому форматвикористовуваних внутрішніх регістрів не змінюється. p>
Формати даних FPU p>
співпроцесор оперує даними в форматі з плаваючою точкою, якийдозволяє представляти істотно більше дійсних чисел, ніжцілочисельне АЛУ центрального процесора. Арифметичні операції (тутпід арифметичними розуміються операції, що змінюють значення операндів, атакож операції порівняння) в FPU виконуються над 80-бітними числами, передга полоненими у внутрішньому форматі розширеної точності (рис. 3). Форматдозволяє представляти наступні категорії чисел: p>
• нулі (позитивний і негативний) - обидва значення еквівалентні; p>
• денормалізованние кінцеві числа (позитивні та негативні); p>
• нормалізовані кінцеві числа (позитивні та негативні); p>
• нескінченність (позитивна і негативна). p>
Числа представляються в афінному просторі. Це означає, щоменше будь-якого кінцевого числа, а більше будь-якого кінцевого числа. p>
Рис. 3. Формат внутрішнього подання чисел. P>
Біт Sign визначає знак числа: 0 - позитивне, 1 - негативнечисло. Поле Exponent зберігає зміщене значення двійкового числа порядку
(biased exponent). Зсув дозволяє всі значення порядків допустимогодіапазону чисел представляти позитивним числом, при цьому значенню
000 ... 000 відповідають мінімальні (за модулем) числа, значенням 111 ... 110 --максимальні допустимі числа, а значенням 111 ... 111 - нескінченно великічисла. Нуль може бути позитивним чи негативним, залежно відбіта знака, при цьому і мантиса, і порядок у нього нульові. Мантиса
(Signficand) нормалізованого числа, відмінного від нуля, завжди має вигляд
"1, ххх .... ххх", тобто представляє величину, не меншу одиниці. Унескінченностей (теж позитивної та негативної) мантиса нульова.
Денормалізованние числа мають нульовий порядок (зміщене значення) імантиса виду "0, ххх ... ххх" (відмінну від нуля). Денормалізованние числа --це дуже малі величини, які представляються і обробляються зточністю меншою, ніж дозволяє розрядність регістрів співпроцесора. p>
Крім дійсних чисел (кінцевих нормалізованих іденормалізованних, нулів і нескінченностей) регістри співпроцесора можутьмістити не-числа NaN (Not a Number) чотирьох видів. p>
•-SNaN і + SNaN - порядок 111 ... 111, мантиса 1,0 ххх ... ххх
(ненульова). Ці "сигналізують" не-числа (signaling NaN) викликаютьвинятку співпроцесора, якщо з ними намагаються виконувати арифметичнідії. p>
•-QNaN і + QNaN - порядок 111 ... 111, мантиса 1,1 ххх ... ххх
(ненульова). Ці "тихі" не-числа (quiet NaN) не викликають винятків приарифметичних операціях. p>
Зовнішні операнди можуть бути представлені в одному з форматів,наведених на рис. 2. Характеристики форматів чисел, які підтримуютьсяспівпроцесором, наведені в таблиці. При їх завантаженні в FPU і збереженнірезультатів перетворення форматів у внутрішній і назад виконуютьсяавтоматично. У зовнішніх уявленнях дійсних чисел ціла частинамантиси завжди мається на увазі рівній одиниці. У розширеному форматі цілачастина задається явно (біт 63), вона має нульове значення тільки приподанні нулів і денормалізованних чисел. Зсув порядку складає
127 для одиночного, 1023 для подвійного і 16 383 для розширеногоречового форматів. Формати дійсних чисел представляють тількибезліч дискретних значень безлічі чисел, розташованих на безперервноїнескінченної числової осі. Діапазон і щільність значень залежать відвибраного формату подання. Зауважимо, що не всі десяткові дробиможуть бути представлені точно в двійковому коді. Так, наприклад, дріб 1/10 немає точного двійкового подання (аналогічно тому, що 1/3 =
0,33333 (3 )). p>
Таблиця. Формати чисел, які підтримуються співпроцесором p>
| Тип | Довжина | Точність | Діапазон нормалізованих значень |
| |, Біт | | |
| | | Двійковій | десятіч | Двійковий | десятковий |
| | | А | ва | | |
| Дійсні числа |
| Одіночно | 32 | 24 | 7 | | |
| ті | | | | | |
| (single | | | | | |
|) | | | | | |
| Подвійні | 64 | 53 | 15-16 | | |
| (double | | | | | |
|) | | | | | |
| Рассшір | 80 | 64 | 19 | | |
| енние | | | | | |
| (extend | | | | | |
| ed) | | | | | |
| Двійкові цілі |
| Слова | 16 | 15 | 4 | | |
| (word) | | | | | |
| Коротки | 32 | 31 | 9 | | |
| є | | | | | |
| (short) | | | | | |
| Довгі | 64 | 63 | 18 | | |
| (long) | | | | | |
| Упаковані двійковій-десяткові |
| BCD | 80 | - | 18 | - | | p>
співпроцесор контролює числа, що беруть участь в арифметичнихопераціях. При завантаженні денормалізованного операнда в регістр FPU і спробівиконання арифметичних інструкцій хоча б з одним денормалізованнимоперандом співпроцесор фіксує умова винятку # D. Денормалізованниечисла можуть з'являтися при виконанні обчислень, що в цьому випадку співпроцесорфіксує факт зникнення значущих розрядів і генерує виняток # U.
При спробі виконання арифметичних операцій з нечісламі, а також знедопустимими значеннями операндів (наприклад, витяг квадратного кореняз негативного числа) виробляється виключення # I. При переповненнівиробляється виключення # O, при спробі поділу на нуль ненульовогооперанда виробляється виключення # Z. p>
Якщо результат обчислення неможливо уявити точно в обраномуформаті, співпроцесор виконує округлення результату в бік сусідньогодопустимого значення. Правила округлення програмуються. Замістьавтоматичного виконання округлення співпроцесор може вироблятивиняток # Р. p>
3. Технологія MMX p>
Технологія ММХ орієнтована на програми мультимедіа, 2D/3D-графікyі комунікації. Це розширення базової архітектури з'явилося тільки післявиходу другого покоління процесорів Pentium. Основна ідея полягає ММХв обробці кількох елементів даних за одну інструкцію --так звана технологія SIMD (Single Instruction - Multiple Data).
Розширення ММХ використовує нові типи упакованих 64-бітових цілочисельнихданих: p>
• упаковані байти (Packed byte) - вісім байт; p>
• упаковані сліва (Packed word) - чотири слова; p>
• упаковані подвійні слова (Packed doubleword) - два подвійних слова; p>
• учетверенное слово (Quadword) - одне слово. p>
Ці типи даних можуть спеціальним чином оброблятися в 64-бітовихрегістрах ММХ0-ММХ7, що представляють собою молодші біти стека 80-бітовихрегістрів FPU. Кожна інструкція ММХ виконує дію відразу над усімкомплектом операндів (8, 4, 2 або 1), розміщених у адресуються регістрах.
Як і регістри FPU, ці регістри ММХ не можуть використовуватися для адресаціїпам'яті. Збіг регістрів ММХ і FPU накладає обмеження начергування кодів FPU і ММХ - турбота про це лежить на програмістівдодатків з ММХ. p>
Ще одна особливість технології ММХ - підтримка арифметики знасиченням (saturating arithmetic). Її відмінність від звичайної арифметики зциклічним переповненням (wraparound mode) полягає в тому, що привиникненні переповнення в результаті фіксується максимально можливезначення для даного типу даних, а перенесення ігнорується. У разіпереповнення знизу в результаті фіксується мінімально можливе значення.
Граничні значення визначаються типом (знаковий або беззнакові) ірозрядністю змінних. Такий режим обчислень зручний, наприклад, длявизначення кольорів. p>
У систему команд введено 57 додаткових інструкцій дляодночасної обробки декількох одиниць даних. Одночаснообробляється 64-бітове слово може містити як одну одиницю обробки,так і 8 однобайтних, 4 двухбайтних або 2 четирехбайтних операнда. Новіінструкції включають наступні групи: p>
• арифметичні (Arithmetic Instructions), куди входять додавання івіднімання в різних режимах, множення і комбінація множення і складання; p>
• порівняння (Comparison Instructions) елементів даних на рівністьабо за величиною; p>
• перетворення форматів (Conversion Instructions); p>
• логічні інструкції (Logical Instructions) - І, І-НІ, АБО івиключає АБО, що виконуються над 64-бітними операндами; p>
• зрушення (Shift Instructions) - логічні і арифметичні; p>
• пересилання даних (Data Transfer Instructions) між регістрами ММХ іцілочисельними регістрами або пам'яттю; p>
• очищення ММХ (Empty ММХ State) - встановлення ознак порожніх регістріву слові тегів. p>
Інструкції ММХ не впливають на прапори умов у слові стану FPU. p>
Регістри ММХ на відміну від регістрів FPU адресуються фізично, а нещодо значення покажчика стека ТОР. Більше того, будь-яка інструкція ММХобнуляє поле ТОР регістра стану FPU. У слові тегів вільному регіструвідповідає комбінація 11, інші комбінації вказують лише назайнятість регістра. Після кожної операції ММХ біти тегів регістрапризначення обнуляються. Невикористані в ММХ біти [79:64] регістрів FPUзаповнюються одиницями, так що помилкова обробка даних ММХ інструкцією
FPU призведе до виключення. P>
Інструкції ММХ не породжують нових винятків. Винятки привиконання інструкцій ММХ можуть виникати тільки у випадку порушення кордоніву зверненнях до пам'яті (як при обміні даними, так і при вибірціінструкції). Однак якщо попередня інструкція FPU породила умовавинятку, то воно відбудеться при виконанні інструкції ММХ. Після йогообробки інструкція ММХ може виконана. p>
З інструкціями ММХ можуть застосовуватися префікси заміни сегмента ізміни розрядності адреси (впливають на інструкції, які звертаються до пам'яті).
Використання префіксів зміни розрядності операнда і повторівзарезервовано (може призвести до непередбачуваних результатів). Префікс
Lock викликає виключення # UD. P>
Інструкції ММХ доступні з будь-якого режиму процесора. При перемиканнізавдань необхідно стежити за коректністю збереження контексту, як і прироботі з FPU. p>
Будь-яка інструкція ММХ викликає обнулення полів тегів всіх регістрів
FPU/ММХ, що для FPU означає наявність дійсних даних у всіхрегістрах. Подальша інструкція для FPU над "невірними" даними можепризвести до непередбачуваного результату, оскільки "вхідний контроль" данихздійснюється за станом тегів. Щоб застрахуватися від подібнихнеприємностей, після інструкцій ММХ і перед інструкціями FPU в програмнийкод вводять інструкцію EMMS, яка встановлює в слові тегів значення
FFFFh (всі регістри порожні). P>
Різниця в способі адресації регістрів (відносна для FPU і явнапряма в ММХ), обнуління тегів інструкціями ММХ і деякі інші нюансине дозволяють чергувати інструкції FPU і ММХ. Блок FPU/MMX може працюватиабо в одному, або в іншому режимі. Якщо, наприклад, в ланцюжок інструкцій
FPU потрібно вклинитися інструкції ММХ, після чого продовжити обчислення FPU, топеред першим інструкцією ММХ доводиться зберігати контекст (станрегістрів) FPU в пам'яті, а після цих інструкцій знову завантажувати контекст.
На ці збереження і завантаження витрачається процесорний час, в результатіможлива повна втрата виграшу від реалізації технології SIMD. Збігрегістрів ММХ і FPU виправдовують тим, що для збереження контексту ММХ приперемиканні задач не потрібно доробок в операційній системі - контекст
ММХ зберігається тим же способом, що і FPU, з яким вміли працюватиздавна. Таким чином, операційним системам було все одно, якийпроцесор встановлений - з ММХ або без. Але для того щоб реалізуватипереваги SIMD, додатки повинні "уміти" ними користуватися (і непрограти на перемиканнях). p>
Часте чергування кодів FPU і ММХ може знизити продуктивність зарахунок необхідності збереження та відновлення досить об'ємного контексту
FPU. P>
4. Розширення SSE і SSE2 - блок XMM p>
Процесори Pentium 3 мають так зване потокове розширення SSE
(Streaming SIMD Extensions). У ті часи, коли майбутній Pentium IIIназивали ще Kathmai, фірма Intel оголосила про нові інструкціях KNI (Kathmai
New Instruction), так що SSE - це синонім "староінтеловского" KNI. Новіпроцесори мають додатковий незалежний блок з восьми 128-бітовихрегістрів, названих ХММ0 ... ХММ7 (очевидно, eXtended MultiMedia), і регістрстану/управління MXCSR. У кожний з регістрів ХММ поміщаються чотири 32 --бітних числа в форматі з плаваючою точкою одинарної точності. Блокдозволяє виконувати векторні (вони ж пакетні) і скалярні інструкції.
Векторні інструкції реалізують операції відразу над чотирма комплектамиоперандів. Скалярні інструкції працюють з одним комплектом операндів --молодшим 32-бітним словом. При виконанні інструкцій з ХММ традиційнеобладнання FPU/MMX не використовується, що дозволяє ефективно змішуватиінструкції ММХ з інструкціями над операндами з плаваючою точкою. Тутблоки процесора міняються ролями - регістри ММХ, накладені на регістритрадиційного співпроцесора, використовуються для цілочисельних потоковихобчислень, а обчислення з плаваючою точкою (правда, тільки з одинарноюточністю, але для мультімедійпих додатків її вистачає) покладаються нановий блок ХММ. Крім інструкцій з новим блоком ХММ в розширення SSE входятьі додаткові цілочисельні інструкції з регістрами ММХ, а такожінструкції управління кешуванням. Нові інструкції з регістрами ММХ, які їх попередники з "класичного" ММХ, не допускають чергування зінструкціями FPU без перемикання контексту FPU/MMX. p>
З інструкціями SSE можуть використовуватися префікси заміни сегмента ізміни розрядності адреси (впливають на інструкції, які звертаються до пам'яті).
Використання префіксів зміни розрядності операнда зарезервовано
(може призвести до непередбачуваних результатів). Префікс Lock викликаєвиняток # UD. З префіксів повтору можна використовувати тільки безумовний
(REP) і тільки для "потокових" інструкцій (з ХММ), Решта застосуванняпрефіксів повтору можуть призвести до непередбачуваних результатів. p>
У процесорі Pentium 4 набір інструкцій отримав чергове розширення -
SSE2, в основному стосується додавання нових типів 128-бітових операндів дляблоку ХММ: p>
• упакована пара дійсних чисел подвійної точності; p>
• упаковані цілі числа: 16 байт, 8 слів, 4 подвійних слова або параучетверенних (по 64 біта) слів. p>
У процесор введені нові функції цілочисельний арифметики SIMD, 128 --розрядні для регістрів ХММ і такі ж 64-розрядні для регістрів ММХ; рядстарих інструкцій ММХ поширили і на ХММ (в 128-бітному варіанті);додані інструкції перетворень для нових форматів даних, а такожрозширені можливості "перемішування" даних у блоці ХММ. Крім того,розширена підтримка управління кешуванням і порядку виконання операційз пам'яттю. Інструкції SSE2 призначені для ЗD-графіки,кодування/декодування відео, а також шифрування даних. p>
5. Команди обробки даних p>
Система команд 32-розрядних процесорів є істотнорозширеною системою команд процесорів 8086/80286. Розширення стосуютьсязбільшення розрядності адрес і операндів, більш гнучкої системи адресації,появи принципово нових типів даних (бітові рядки та поля) ікоманд. p>
Команди (інструкції) містять одно-або двухбайтний код інструкції, заяким може випливати декілька байт, що визначають режим виконаннякоманди, і операнди. Команди можуть використовувати до трьох операндів (або ніодного). Операнди можуть перебувати в пам'яті, регістрах процесора абобезпосередньо в команді. Для 32-розрядних процесорів розрядність слова
(word) за замовчуванням може становити 32, а не 16 біт. Це поширюєтьсяна багато інструкцій, включаючи і рядкові. У реальному режимі і режимівіртуального процесора 8086 за замовчуванням використовується 16-бітна адресаціяі 16-бітові операнди-слова. У захищеному режимі режим адресації ірозрядність слів за замовчуванням визначаються дескриптором кодового сегмента.
Перед будь-якою інструкцією може бути вказаний префікс перемикання розрядностіадреси чи слова. При адресації пам'яті використання сегментного регістра,передбаченого командою, у ряді інструкцій може придушуватися префіксомзміни сегмента (Segment Override). p>
У системі команд налічується кілька сотень інструкцій, тому вданій роботі оглядово розглянуті всі команди обробки даних (блоківпроцесора АЛП, FPU, MMX, і XMM), а далі більш докладно описаніінструкції, що з'явилися в процесорах Pentium 3 (блок XMM - SSE) і Pentium
4 (блок XMM - SSE2). P>
Інструкції пересилання даних (див. табл) дозволяють передавати константиабо змінні між регістрами й пам'яттю, а також портами вводу-виводу врізних комбінаціях, але в пам'яті може знаходитися не більше одногооперанда. До цієї групи віднесено й інструкції перетворення форматів --Розширення та перестановки байт. Операції зі стеком виконуються словами зрозрядністю, яка визначається поточним режимом. При приміщенні в стек словапокажчик стека SP зменшується на число байт слова (2 або 4), привитяганні - збільшується. "Класичні" (8086) інструкції пересилання НЕвпливають на вміст регістру прапорів. Інструкції пересилання за результатамипорівняння (CMPXCHG) модифікують прапор ZF. Нові інструкції умовноїпересилання (CMOVxx) дозволяють скоротити число розгалужень у програмі. p>
Таблиця. Інструкції пересилання даних p>
Інструкція Опис p>
BSWAP Перестановка байт з порядку молодший-старший (LH) в порядок старший-молодший (HL) (486 +)
CBW/CWDE Перетворення байти AL в слово АХ (розширення знака AL в АН: p>
АН заповнюється бітом AL.7) або слова АХ в подвійне слово ЕАХ
CMOVA/CMOVNBE Пересилка, якщо вище "CF АБО ZF) = 0) (P6 +)
CMOVAE/CMOVNB Пересилка, якщо не нижче (CF = 0) (P6 +)
CMOVB/CMOVNAE Пересилка, якщо нижче (CF = 1) (P6 +)
CMOVBE/CMOVNA Пересилка, якщо не вище ((CF АБО ZF) = 1) (P6 +)
CMOVC Пересилка, якщо перенесення (CF = 1) (P6 +)
CMOVE/CMOVZ Пересилка, якщо дорівнює (ZF = 1) (P6 +)
CMOVG/CMOVNLE Пересилка, якщо більше (SF = (0F І ZF)) (P6 +)
CMOVGE/CMOVNL Пересилка, якщо більше або дорівнює (SF = 0F) (P6 +)
CMOVL/CMOVNGE Пересилка, якщо менше (ZF0F) (P6 +)
CMOVLE/CMOVNG Пересилка, якщо менше або рівне (SF0F або ZF = 0) (P6 +)
CMOVNC Пересилка, якщо немає переносу (CF = 0) (P6 +)
CMOVNE/CMOVNZ Пересилка, якщо не дорівнює (ZF = 0) (P6 +)
CMOVNO Пересилка, якщо немає переповнення (0F = 0) (P6 +)
CMOVNP/CMOVPO Пересилка, якщо немає паритету (непарність) (P6 +)
CMOVNS Пересилка, якщо невід'ємне (SF = 0) (P6 +)
CMOVO Пересилка, якщо переповнення (0F = 1) (P6 +)
CMOVP/CMOVPE Пересилка, якщо паритет (парність) (Р6 +)
CMOVS Пересилка, якщо негативно (SF = 1) (P6 +)
CMPXCHG r/in, r Обмін по результату порівняння байта, слова чи подвійного слова (486 +)
CMPXCHG8B m64 Обмін по результату порівняння учетверенного слова
(5 +)
CWD/CDQ Перетворення слова АХ в подвійне слово DX: AX (розширення знака, DX заповнюється бітом АХ. 15) або подвійного слова ЕАХ в учетверенное EDX: EAX
IN Введення з порту вводу-виводу в AL/(E) AX
MOV Пересилання (копіювання) даних
MOVSX Копіювання байта/слова із знаковою розширенням до слова/подвійного слова (386 +)
MOVZX Копіювання байта/слова з нульовим розширенням до слова/подвійного слова (386 +)
OUT Висновок в порт з AL/(E) AX
POP Витяг слова даних з стека в регістр або пам'ять, (E) SP інкрементіруется
POPA (POPAll) Витяг даних з стека в регістри Dl, SI, ВР, ВХ, DX, p>
CX, AX (286 +)
POPAD Витяг даних з стека в регістри EDI, ESI, ЕВР, ЕВХ, EDX, ЕСХ, p>
ЕАХ (386 +)
PUSH Приміщення слова з регістра чи пам'яті в стек після декремент (E) SP
PUSHA (PUSH All) Приміщення в стек регістрів АХ, CX, DX, BX, SP (початкове значення), ВР, SI, Dl (286 +)
PUSHAD Приміщення в стек регістрів ЕАХ, ЕСХ, EDX, ЕВХ, ESP (початкове значення), ЕВР, ESI, EDI (386 +)
XCHG Обмін даними (взаємний) між регістрами або регістром і пам'яттю p>
Інструкції вводу-виводу дозволяють пересилати як одиночний бант абослово між портом і регістром процесора (інструкції IN і OUT), так і блокбайт (слів) між портом і групою суміжних комірок пам'яті (інструкції
INSB/INSW і OUTSB/OUTSW з префіксом повтору, див. нижче). Безпосередняадресація порту в команді забезпечує доступ тільки до перших 256 адресамипортів, непряма (через регістр DX) - до всього простору введення-виведення
(64 Кбайт). Розрядність операнда та адреса повинні узгоджуватися зфізичними можливостями та особливостями поведінки адресується пристрою.
Під час роботи з пам'яттю такі нюанси до уваги брати звичайно недоводиться. p>
Інструкції двійкової арифметики виконують всі арифметичні діїз байтами, словами і подвійними словами, кодують знакові або беззнаковіцілі числа. Множення і ділення для 8086 можливі тільки з акумулятором,результат для 16-бітових операндів розширюється в регістрі DX. p>
Для 286 + можливо дво-і трехадресное множення з розширеному тільков старший байт (два байти для 386 +). p>
Таблиця. Інструкції двійкової арифметики p>
Інструкція Опис p>
ADC Додавання двох операндів з урахуванням перенесення від попередньої операції
ADD Додавання двох операндів
БМР Порівняння (віднімання без збереження результату - встановлення прапорів)
DEC декремент (віднімання 1, але не діє на прапор CF)
DIV Розподіл беззнакові
IDIV Розподіл знакова
IMUL Множення знакова
INC інкремент (складання з 1, але не діє на прапор CF)
MUL беззнакові множення
NEG Зміна знака операнда
SBB Віднімання з позичок
SUB Віднімання
XADD Обмін вмістом і складання (486 +) p>
Інструкції десяткової арифметики є доповненням до попередніх.
Вони дозволяють оперувати з неупакованих (біти [7:4] = 0, біти [3:0]містять десяткову цифру 0-9) або упакованими (біти [7:4] містятьстаршу, біти [3:0] - молодшу десяткову цифру 0-9) двоічнодесятічнимічислами. Арифметичні операції над цими числами вимагають застосуванняінструкцій корекції форматів. p>
Таблиця. Інструкції десяткової арифметики p>
Інструкція Опис p>
ААА Десяткова корекція після складання двох неупакованих чисел
AAD Десяткова корекція перед поділом неупакованого двозначного числа
ААМ Десяткова корекція після множення двох неупакованихчисел
AAS Десяткова корекція після віднімання двох неупакованихчисел
DAA Десяткова корекція AL після складання двох упакованихчисел
DAS Десяткова корекція AL після віднімання двох упакованихчисел p>
Інструкції AAD і ААМ допускають узагальнений формат виклику, при якомукорекція виконується але будь-якому модулю (а не тільки по модулю 10). p>
Інструкції логічних операцій виконують всі функції булевої алгебринад байтами, словами або подвійними словами. p>
Таблиця. Інструкції логічних операцій p>
Інструкція Опис
AND Логічне І
NOT Інверсія (перемикання всіх біт)
OR Логічне АБО
XOR виключає Або p>
Зрушення й обертання (циклічні зрушення) виконуються над регістром абооперандом в пам'яті. Число позицій, на яке проводиться зсув, беретьсябезпосередньо з операнда або регістра CL по модулю 8 для однобайтногооперанда і за модулем 16 або 32 для операнда-слова, в залежності відрозрядності даних (32 тільки для 386 +). Бити, виштовхує при зрушення,потрапляють під прапор CF. При зрушення вліво і простому зсуві вправозвільняються біти заповнюються нулями (інструкції SAL і SHL - синоніми).
При арифметичному зсуві вправо старший біт (знак) зберігає своєзначення. При циклічних зрушення виштовхуємо біти потрапляють і в прапор CF,і в освобождающі?? ся позиції. У зрушення можуть брати участь і два операнда
(інструкції SHLD і SHRD). p>
Таблиця. Інструкції зрушень p>
Інструкція Опис
RCL Циклічний зсув вліво через біт перенесення
RCR Циклічний зсув вправо через біт перенесення
ROL Циклічний зсув вліво
ROR Циклічний зсув вправо
SAL Зрушення арифметичний вліво
SAR Зрушення арифметичний (зі збереженням старшого біта) вправо
SHL Зрушення вліво
SHR Зсув вправо
SHLD Зрушення вліво і вставка даних в вакантні позиції p>
(386 +)
SHRD Зсув вправо і вставка даних в вакантні позиції p>
(386 +) p>
Інструкції обробки біт і байт дозволяють перевіряти (копіювати в CF)і встановлювати значення зазначеного операнда, а також шукати встановленийбіт. Бітові операції виконуються над 16-або 32-бітним словом пам'яті аборегістром. Інструкції BSF, BSR і ВТ не змінюють значення слова; ВТС, BTR і
BTS впливають на зазначений біт слова. Номер цікавить біта беретьсяз операнда по модулю 16 або 32, залежно від розрядності. p>
Операції з байтами забезпечують умовну установку значень 00h або
01h. Інструкція тестування може здійснюватись безпосередньо з байтом, словом абоподвійним словом. p>
Таблиця. Інструкції обробки біт і байт p>
Інструкція Опис
BSF Сканування біт (пошук одиничного) вперед
BSR Сканування біт тому
Вт Тестування біта (завантаження в CF)
ВТС Тестування і зміни значення біта
BTR Тестування і скидання біта
BTS Тестування та встановлення біта
SALC Умовна (по CF) установка А1 в FFh або OOh (не документовано, код D6h)
SETA/Установка байти в 01h, якщо вище ((CF АБО ZF) = 0), інакше в p>
00h
SETNBE
SETAE/Установка байти в 01 h, якщо не нижче (CF = 0),інакше в 00h
SETNB/
SETNC
SETB/Установка байти в 01h, якщо нижче (CF = 1), інакшев 00h
SETNAE/
SETC
SETBE/Установка байти в 01h, якщо не вище (CF АБО ZF) = 1, інакше в p>
00h
SETNA
SETE/Установка байти в 01h, якщо дорівнює (ZF = 1),інакше в 00h
SETZ
SETG/Установка байти в 01 h, якщо більше (SF = (OP І ZF)), інакше в 00h
SETNLE
SETQE/Установка байти в 01h, якщо більше або дорівнює (SF = OF), інакше в 00h
SETNL
SETL/Установка байти в 01h, якщо менше (ZFOF),інакше в 00h
SETNGE 00h
SETLE/Установка байти в 01h, якщо менше або рівне (SF0F або p>
ZF = 0), інакше в 00h
SETNG
SETNE/Установка байти в 01h, якщо не дорівнює (ZF = 0), інакше в 00h
SETNZ
SETNO Установка байти в 01h, якщо немає переповнення (0F = 0), інакше в 00h
SETNS Установка байти в 01 h, якщо невід'ємне (SF = 0), інакше в 00h
SETO Установка байти в 01h, якщо переповнення (0F = 1), інакше в p>
00h
SETPE/Установка байти в 01h, якщо паритет (парність), інакше в p>
00h
SETP
SETPO/Установка байти в 01 h, якщо немає паритету (непарність), інакше в 00h
SETNP
SETS Установка байти в 01 h, якщо негативно (SF = 1), інакше в p>
00h
SETC Установка байти в 01 h, якщо перенесення (CF = 1),інакше в 00h
SETNC Установка байти в 01 h, якщо немає переносу (CF = 0), інакше в p>
00h
TEST Перевірка біт (логічне І без запису результату - встановлення прапорів) p>
рядкові операції виконуються з операндами в пам'яті, що адресуютьсярегістрами DS: SI (DS: ESI) для джерела і ES: DI (ES: EDI) для приймача.
Операції можуть використовуватися з префіксами умовного або безумовногоповтору. Після кожної пересилання або порівняння індексні регістри (SI, DIабо обидва) участвующі