
- •Мови, рівні і віртуальні машини
- •Сучасні багаторівневі машини
- •Поняття архітектури пк
- •1.4. Розвиток комп’ютерної архітектури
- •Розвиток багаторівневих машин
- •Типи сучасних еом
- •Питання до лекції
- •2.1. Принципи розробки сучасних комп'ютерів
- •2.2. Паралелізм на рівні команд
- •2.3. Конвеєри
- •2.4. Суперскалярні архітектури
- •2.5. Паралелізм на рівні процесорів
- •2.6. Векторні комп'ютери
- •Блок управління
- •2.7. Мультипроцессори
- •2.8. Мультикомпьютери
- •Питання до лекції
- •3. Основи комп’ютерної організації : пам’ять
- •3.1. Ієрархічна структура пам'яті
- •3.2. Загальні відомості про пам'ять
- •3.4. Методи звертання до пам'яті
- •3.5. Модулі пам'яті
- •3.6. Ряди і банки пам'яті
- •3.8. Код з виправленням помилок
- •3. 9. Скільки потрібно пам'яті
- •Питання до лекції
- •4. Цифровий рівень побудови ом
- •4.1. Вентилі і булева алгебра
- •4.2. Булева алгебра
- •4.3. Реалізація булевих функцій
- •4.4. Еквівалентність схем
- •Основні цифрові логічні схеми Інтегральні схеми
- •4.5. Комбінаційні схеми
- •3 Входи і 8 виходів
- •4.6. Арифметичні схеми.
- •4.7. Тактові генератори
- •Питання до лекції
- •Цифровий рівень побудови ом.
- •5. Цифровий логічний рівень архітектури: пам’ять, мікропроцесори
- •5.2. Синхронні sr-защіпки
- •5.3. Синхронні d-защіпки
- •5.4. Тригери (flip-flops)
- •5.5. Регістри
- •5.6. Організація пам'яті
- •Тригер (б)
- •Кожний ряд представляє одне з 3-бітних слів. При операції зчитування і запису завжди зчитується або записується ціле слово
- •5.7. Мікросхеми пам'яті
- •5.9. Мікросхеми процесорів
- •Стрілочки указують вхідні і вихідні сигнали. Короткі діагональні лінії вказують на наявність декількох висновків.
- •Питання до лекції
- •6. Шини
- •6.1. Ширина шини
- •6.2. Синхронізація шини
- •6.3. Синхронні шини
- •6.5. Асинхронні шини
- •6.6. Арбітраж шини
- •6.7. Принципи роботи шини
- •Питання до лекції
- •7. Мікроархітектурний рівень
- •7.1. Приклад мікроархітектури
- •7.2. Тракт даних
- •В цьому розділі
- •Табліця 7.1. Деякі комбінації сигналів аллу і відповідні їм функції
- •7.3. Синхронізація тракту даних
- •7.4. Робота пам'яті.
- •7.5. Мікрокоманди
- •7.6. Управління мікрокомандами: Mic-1
- •7.7. Приклад архітектури команд: ijvm
- •7.8. Модель пам'яті ijvm
- •Питання до лекції
- •8. Рівень архітектури команд
- •8.1. Моделі пам'яті
- •8.2. Загальний огляд рівня архітектури команд
- •8.3. Властивості рівня команд
- •8.4. Регістри
- •8.5. Команди
- •8.6. Загальний огляд рівня команд машини Pentium II
- •8.8. Загальний огляд рівня команд системи ultrasparc II
- •8.9. Загальний огляд віртуальної машини Java
- •8.10. Типи даних
- •8.11. Числові типи даних
- •8.12. Нечислові типи даних
- •8.13. Типи даних процесора Pentium II
- •Підтримувані типи відмічені хрестом (х)
- •8.14. Типи даних машини UltraSparc II
- •8.16. Типи даних віртуальної машини Java
- •8.17. Формати команд
- •Питання до лекції
- •9. Адресація
- •9.1. Способи адресації
- •9.2. Безпосередня адресація
- •9.3. Пряма адресація
- •9.4. Регістрова адресація
- •9.5. Непряма регістрова адресація
- •Лістинг 9.1 - Програма на асемблері для обрахунку суми елементів масиву.
- •9.6. Індексна адресація
- •Листинг 9.2. Програма на мові асемблера для обчислення операції або від (Аі і Ві ) для масиву з 1024 елементів.
- •9.7. Відносна індексна адресація
- •9.8. Стекова адресація
- •9.9. Зворотній польський запис
- •9.10. Обчислення формул в зворотнім польськім записі
- •Питання до лекції
8.5. Команди
Головна особливість рівня, який ми зараз розглядаємо, — це набір машинних команд. Вони управляють діями машини. У цьому наборі завжди присутні команди LOAD і STORE (у тій або іншій формі) для переміщення даних між пам'яттю і регістрами і команда MOVE для копіювання даних з одного регістра в іншій. Завжди присутні арифметичні і логічні команди і команди для порівняння елементів даних і переходів залежно від результату.
8.6. Загальний огляд рівня команд машини Pentium II
У цьому розділі ми обговоримо три абсолютно різна архітектура команд: IA-32 компанії Intel (вона реалізована в Pentium II), Version 9 SPARC (вона реалізована в процесорах SPARC) і JVM (вона реалізована в picojava II). Ми не переслідуємо мету дати вичерпний опис кожній з цієї архітектури. Ми просто хочемо продемонструвати важливі аспекти архітектури команд і показати, як ці аспекти міняються від однієї архітектури до іншої. Почнемо з машини Pentium П.
Процесор Pentium II розвивався впродовж багатьох років. Його історія йде до найперших мікропроцесорів, як ми говорили у розділі 1. Основна архітектура команд забезпечує виконання програм, написаних для процесорів 8086 і 8088 (які мають одну і ту ж архітектуру команд), а в машині навіть містяться елементи 8080 — 8-розрядний процесор, який був популярним в 70-і роки. На процесор 8080, у свою чергу, сильно вплинули потреби сумісності з процесором 8008, який був заснований на процесорі 4004 (4-бітовій мікросхемі, що застосовувалася ще в кам'яному столітті).
З погляду програмного забезпечення, комп'ютери 8086 і 8088 були 16-розрядними машинами (хоча комп'ютер 8088 містив 8-бітову шину даних). Їх послідовник 80286 також був 16-розрядним. Його головним здобутком був більший об'єм адресного простору, хоча невелике число програм використовували його, оскільки воно складалося з 16 384 64 К сегментів, а не представляло собою лінійну 224-байтну пам'ять.
Процесор 80386 був першою 32-розрядною машиною, випущеною компанією Intel. Всі подальші процесори (80486, Pentium, Pentium Pro, Pentium II, Celeron і Хеоn) мають таку саму 32-розрядну архітектуру, яка називається IA-32, тому ми зосередимо нашу увагу саме на цій архітектурі. Єдиною істотною зміною архітектури з часів процесора 80386 було введення команд MMХ в пізніші версії системи Pentium і їх включення в Pentium II і подальші процесори.
Pentium II має 3 операційних режима, в двох з яких він працює як 8086. У реальному режимі всі особливості, які були додані до процесора з часів системи 8088, відключаються, і Pentium II працює як простий комп’ютер 8088. Якщо програма здійснює помилку, то відбувається повна відмова системи. Якби компанія Intel займалася розробкою людських істот, то всередину кожної людини був би поміщений біт, який перетворює людей назад на режим шимпанзе (примітивний мозок, відсутність мови, живлення в основному бананами і т. д.).
На наступному ступені знаходиться віртуальний режим 8086, який робить можливим виконання старих програм, написаних для 8088, із захистом. Щоб запустити стару програму 8088, операційна система створює спеціальне ізольоване середовище, яке працює як процесор 8088, за винятком того, що якщо програма дає збій, операційній системі передається відповідна інформація і повної відмови системи не відбувається. Коли користувач WINDOWS починає роботу з MS-DOS, програма, яка діє там, запускається у віртуальному режимі 8086, щоб програма WINDOWS не могла вмішуватися в програми MS-DOS.
Останній режим — це захищений режим, в якому Pentium II працює як Pentium II, а не як 8088. У цьому режимі доступні 4 рівні привілеїв, які управляються бітами в регістрі прапора. Рівень 0 відповідає привілейованому режиму на інших комп'ютерах і має повний доступ до машини. Цей рівень використовується операційною системою. Рівень 3 призначений для призначених для користувача програм. Він блокує доступ до певних команд і регістрів управління, щоб помилки якої-небудь призначеної для користувача програми не привели до поломки всієї машини. Рівні 1 і 2 використовуються рідко. Pentium II має величезний адресний простір. Пам'ять розділена на 16 384 сегменти, кожний з яких йде від адреси 0 до адреси 232-1. Проте більшість операційних систем (включаючи UNIX і всі версії WINDOWS) підтримують тільки один сегмент, тому більшість прикладних програм бачать лінійний адресний простір в 232 байтів, а іноді частина цього простору займає сама операційна система. Кожен байт в адресному просторі має свою адресу. Слова складаються з 32 бітів. Байти нумеруються справа наліво (тобто найперша адреса відповідає наймолодшому байту).
Регістри процесора Pentium II показані на мал. 5.3. Перші чотири регістри EAХ, EВХ, EСХ і EDX 32-бітові. Це регістри загального призначення, хоча у кожного з них є певні особливості. EAХ — основний арифметичний регістр; EВХ призначений для зберігання покажчиків (адрес пам'яті); EСХ зв’язаний з організацією циклів; EDX потрібен для множення і ділення — цей регістр разом з EAХ містить 64-бітові числа. Кожний з цих регістрів має 16-розрядний регістр в молодших 16 бітах і 8-розрядний регістр в молодших 8 бітах. Дані регістри дозволяють легко маніпулювати 16-бітними і 8-бітовими значеннями відповідно. У комп'ютерах 8088 і 80286 є тільки 8-бітові і 16-бітові регістри. 32-бітові регістри з'явилися в системі 80386 разом з приставкою Е (Extended — розширений).
Наступні три регістри також є регістрами загального призначення, але з більшим ступенем спеціалізації. Регістри ESI і EDI призначені для зберігання покажчиків, особливо для команд маніпулювання ланцюжками, де ESI вказує на вхідний ланцюжок, а EDI — на вихідний ланцюжок. Регістр EВР теж призначений для зберігання покажчиків. Особливо він використовується для вказівки на основу поточного фрейму локальних змінних, як і регістр LV в машині IJVM. Такий регістр звичайно називають покажчиком фрейму. Нарешті, регістр ESP — це вказівник стека.
Наступна група регістрів від CS до GS - сегментні регістри. Це електронні трилобіти-атавізми, що залишилися від процесора 8088, який звертався до 220 байтів пам'яті, використовуючи 16-бітові адреси. Досить сказати, що коли Pentium II встановлений на використання єдиного лінійного
Мал. 8.3 - Основні регістри процесора Pentium II
32-бітового адресного простору, їх можна сміливо проігнорувати. Регістр EIP - це лічильник програм (Extended Instruction Pointer - розширений покажчик команд). Регістр EFLAGS — це регістр прапора.