
- •Мови, рівні і віртуальні машини
- •Сучасні багаторівневі машини
- •Поняття архітектури пк
- •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. Обчислення формул в зворотнім польськім записі
- •Питання до лекції
9.5. Непряма регістрова адресація
При такім способі операнд, який визначається береться з пам’яті чи відправляється в пам’ять, але адреса не фіксується в команді. Замість цього адреса міститься в регістрі. Якщо адреса використовується таким чином, він називається вказівником. Перевага непрямої адресації заключається в тім, що можна звертатись до пам’яті не маючи в команді повної адреси. Крім цього, при різних виконаннях даної команди можна використовувати різні слова пам’яті.
Щоб зрозуміти чому може бути корисним використання різних слів при кожнім виконанні команди уявимо собі цикл, який проходить по 1024 – елементному одномірному масиві цілих чисел для обрахунку суми елементів в регістрі R1. Поза цим циклом який-небуть інший регістр, наприклад R2, може вказувати перший елемент масиву, а ще один регістр, наприклад R3, може вказувати першу адресу після масиву. Масив містить 1024 цілих числа по 4 байта кожне. Якщо масив починається з А, то перша адреса після масиву буде А+4096. Типова програма асемблера, яка виконує цей обрахунок для двохадресної машини показана на лістингу 9.1.
Лістинг 9.1 - Програма на асемблері для обрахунку суми елементів масиву.
MOV R1,#0 ;накопичення суми в R1, на початку 0
MOV R2,#A ;R2= адреса масиву А
MOV R3,#A+4096 ;R3= адреса першого слова після А
LOOP: ADD R1,(R2) ;отримання операнда через регістр R2
ADD R2,#4 ; збільшення R2 на одне слово (4 байта)
CMP R2,R3 ; перевірка на завершення
BLT LOOP ; якщо R2<R3, продовжити цикл
В цій маленькій програмі ми використали декілька способів адресації. Перші три команди використовують регістрову адресацію для першого операнда (пункт призначення) і непряму адресацію для другого операнда (константа, позначена символом #). Друга команда поміщає в R2 не дані, що знаходяться в А, а адресу А. Саме це і повідомляє асемблеру знак #. Потім третя команда поміщає в R3 перше слово після масиву.
Цікаво зазначити, що саме тіло циклу не містить ніяких адресів пам’яті. В четвертій команді використовується регістрова і непряма адресації. В п’ятій команді використовується регістрова і непряма адресації, а в шостій – два рази регістрова. Команда BLT могла би використовувати адрес пам’яті, але більш привабливим є визначення адреси з допомогою 8-бітного зміщення, зв’язаного з самою командою BLT. Таким чином, повністю уникнувши адреси пам’яті, ми отримали короткий і швидкий цикл.
Теоретично є ще один спосіб виконання цього обчислення без використання непрямої регістрової адресації. Цей цикл міг би містити команду для при бавлення А до регістру R1, наприклад
ADD R1,A
Тоді при кожному кроці команда повинна збільшуватися на 4. Таким чином, після одного кроку команда буде виглядати наступним чином:
ADD R1,A+4
і так далі до завершення циклу.
Програма, яка сама змінюється подібним чином, називається програмою, яка змінюється. Ця ідея була запропоноване Джоном фон Непманом і використовувалася в старих комп’ютерах, де не було непрямої регістрової адресації. В наш час програми, які, змінюються вважаються незручними і дуже важкими для розуміння. Крім цього, їх виконання не можна розділити між декількома процесорами. Вони навіть не можуть правильно виконуватися на машинах з розділеною кеш-пам’ятю першого рівня, якщо в кеш-пам’яті команд немає спеціальної схеми для опрацьованого запису.