
- •Мови, рівні і віртуальні машини
- •Сучасні багаторівневі машини
- •Поняття архітектури пк
- •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. Обчислення формул в зворотнім польськім записі
- •Питання до лекції
Питання до лекції
Рівень архітектури команд
Привілейований режим та режим призначений для користувача
Моделі пам'яті
семантика пам'яті
Загальний огляд рівня архітектури команд
Властивості рівня команд
Що таке рівень команд?
Регістри
Регістри спеціального та загального призначення
Команди
Загальний огляд рівня команд машини Pentium II
Режими роботи процесора
Загальний огляд рівня команд системи ULTRASPARC II
Загальний огляд віртуальної машини Java
Типи даних
Числові типи даних
Нечислові типи даних
Типи даних машини UltraSPARC II
Типи даних віртуальної машини Java
Формати команд
9. Адресація
Розробка кодів операцій є важливою частиною архітектури команд. Проте значне число бітів програми використовується для того, щоб визначити, звідки потрібно брати операнди, а не для того, щоб дізнатися, які операції потрібно виконати. Розглянемо команду ADD, яка вимагає специфікації трьох операндів: двох джерел і одного пункту призначення. (Термін «операнд» звичайно використовується стосовно всіх трьом елементів, хоча пункт призначення - це місце, де зберігається результат.) Так або інакше команда ADD повинна повідомляти, де знайти операнди і куди помістити результат. Якщо адреси пам'яті 32-бітові, то специфікація цієї команди вимагає крім коду операції ще три 32-бітові адреси. Адреси займають значно більше бітів, чим коди операції.
Два спеціальні методи призначені для зменшення розміру специфікації. По-перше, якщо операнд повинен використовуватися кілька разів, його можна перемістити в регістр. У використанні регістра для змінної є подвійна користь: швидкість доступу збільшується, а для визначення операнда потрібна менша кількість бітів. Якщо є 32 регістри, будь-якою з них можна визначити, використовуючи всього лише 5 бітів. Якщо при виконанні команди ADD використовуються тільки регістрові операнди, для визначення всіх трьох операндів необхідно тільки 15 бітів, а якби ці операнди знаходилися в пам'яті, знадобилося б цілих 96 бітів.
Проте використання регістрів може викликати іншу проблему. Якщо операнд, що знаходиться в пам'яті, повинен спочатку завантажуватися в регістр, то необхідно більше число бітів для визначення адреси пам'яті. По-перше, для переносу операнда в регістр потрібна команда LOAD. Для цього потрібен не тільки код операції, але і повна адреса пам'яті, а також потрібно визначити цільовий регістр. Тому якщо операнд використовується тільки один раз, поміщати його в регістр не варто.
На щастя, численні вимірювання показали, що одні і ті ж операнди використовуються багато разів. Тому більшість нової архітектури містить велику кількість регістрів, а більшість компіляторів доходять до величезних розмірів, щоб зберігати локальні змінні в цих регістрах, усуваючи таким чином численні звернення до пам'яті. Це скорочує і розмір, і час виконання програми.
Другий метод вважає визначення одного або декількох операндів неявним чином. Для цього існує декілька технологій. Один із способів — використовувати одну специфікацію для вхідного і вихідного операндів. Тоді як звичайна триадресна команда ADD використовує форму
DESTINATION=SOURSE1+SOURSE2.
двоадресну команду можна скоротити до форми
REGISER2=REGISTER2+50URSE1.
Недолік цієї команди полягає в тому, що вміст REGISTER2 не збережеться. Якщо первинне значення необхідне пізніше, його потрібно спочатку скопіювати в інший регістр. Компроміс тут полягає в тому, що двоадресні команди коротші, але вони не так часто використовуються. У різних розробників різні переваги. У Pentium II, наприклад, використовуються двоадресні команди, а в UltraSPARC II — триадресні.
Ми скоротили число операндів команди ADD з три до два. Продовжимо скорочення далі. Перші комп'ютери мали тільки один регістр, який називався акумулятором. Команда ADD, наприклад, завжди додавала слово з пам'яті до акумулятора, тому потрібно було визначати тільки один операнд (операнд пам'яті). Ця технологія добре працювала для простих обчислень, але коли були потрібні проміжні результати, акумулятор доводилося записувати назад в пам'ять, а пізніше викликати знову. Отже, ця технологія нам не підходить.
Отже, ми перейшли від триадресної команди ADD до двоадресної, а потім до одноадресної. Що ж залишається? Нуль адрес? Так. У розділі 4 ми побачили, як машина IJVM використовує стек. Команда IADD не має адрес. Вхідні і вихідні операнди не показуються явним чином. Нижче ми розглянемо стекову адресацію детальніше.