Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тема: Формати команд. Адресовий простір ЕОМ




Лабораторна робота №3

Команда складається з коду операції і деякої додаткової інформації, наприклад, звідки надходять операнди і куди повинні відправлятися результати. Процес визначення місцезнаходження операндів (тобто їхньої адреси), називається адресацією.

В одних машинах усі команди мають однакову довжину; в інших - команди можуть бути різної довжини. Команди можуть бути коротше слова, довше слова або бути рівними слову по довжині. Якщо всі команди однієї довжини, то це спрощує декодування, але часто вимагає більшого простору, оскільки всі команди повинні бути такої ж довжини, як сама довга команда.

Критерії розробки для форматів команд

Під час вибору форматів команд машини, розроблювачі повинні розглянути ряд факторів. Має величезне значення здатність додавати нові команди до набору і використовувати інші можливості, що з'являються протягом визначеного періоду часу, але тільки в тому випадку, якщо архітектура і компанія, що створила цю архітектуру, існують досить довго.

Ефективність конкретної архітектури команд залежить від технології, що застосовувалася при розробці комп'ютера. За тривалий період часу ця технологія буде піддана значним змінам, і деякі характеристики архітектури команд виявляться невдалими. Наприклад, якщо доступ до пам'яті здійснюється швидко, то підійде стекова архітектура (як у JVM), але якщо доступ до пам'яті повільний, тоді бажано мати багато регістрів (як у UltraSPARC II).

Якщо мова йде про однакові машини, то краще мати короткі команди, ніж довгі. Програма, що складається з n 16-бітних команд, займає в два рази менше простору пам'яті, ніж програма з n 32-бітних команд. Оскільки ціни на пам'ять постійно падають, цей фактор не мав би значення в майбутньому, якби програмне забезпечення не розросталося набагато швидше, ніж відбувається зниження цін на пам'ять.

Проте, мінімізація розміру команд може ускладнити їхнє декодування і перекриття. Є ще одна дуже важлива причина мінімізації довжини команд: пропускна здатність пам'яті (число бітів у секунду, що пам'ять може надавати). Значний ріст швидкості роботи процесора за останнє десятиліття не відповідає збільшенню пропускної здатності пам'яті. Обмеження тут зв'язані з нездатністю системи пам'яті передавати команди та операнди з тією ж швидкістю, з якою процесор може обробляти їх. Пропускна здатність пам'яті залежить від технології розробки.

Другий критерій розробки — достатній обсяг простору у форматі команди для вираження всіх необхідних операндів. Машина з 2N операціями і з усіма командами менш N бітів неможлива. У цьому випадку в коді операції не було б досить місця для того, щоб указати, яка потрібна команда.

Третій критерій зв'язаний з числом бітів в адресному полі. Для одержання оптимальної дискретності пам'яті вимагаються більш довгі адреси і, отже, більш довгі команди. Одна крайність — це організація пам'яті, при якій адресується кожен біт (наприклад, Burroughs B1700). Інша крайність — це пам'ять, що складається з дуже довгих слів (наприклад, серія CDC Cyber містила 60-бітні слова).

Сучасні комп'ютерні системи вимагають, щоб адреси були в окремих байтів, але при звертанні до пам'яті завжди зчитується одне, два, а іноді навіть чотири слова відразу. У результаті зчитування одного байта з пам'яті на машині UltraSPARC II викликається відразу мінімум 16 байтів, а іноді і весь рядок кеш-пам'яті в 64 байта.

Адресовий простір ЕОМ

Як правило, у форматі команди адресне поле чи поля займають небагато місця. Але програмісту бажано мати можливість визначати у такому полі адресу в адресному просторі оперативної чи навіть віртуальної пам'яті значного обсягу. Для того щоб надати йому таку можливість, розроблено багато методів, чи режимів адресації. Найбільш широко розповсюджені такі методи адресації:

• безпосередній;

• прямий;

• непрямий;

• регістровий;

• непрямий через регістр;

• зі зсувом;

• стековий.

На мал. 3.1 схематично показана сутність кожного з режимів. У цьому розділі ми будемо використовувати наступні позначення:

· А — вміст адресного поля в коді команди;

· R — вміст адресного поля в коді команди, що посилається на визначений регістр процесора;

· ЕА — виконавча адреса комірки, в якій знаходиться операнд;

· О — значення операнда;

· (X) — вміст комірки X.

У табл. 3.1 показано, які обчислення варто виконувати для визначення виконавчої адреси в кожному з перерахованих режимів адресації.

 

Практично у всіх існуючих моделях комп'ютерів передбачено декілька режимів адресації. Тому виникає питання, яким чином вузол керування процесора довідається, який саме режим адресації заданий у конкретній машинній команді. Існує кілька методів рішення цієї задачі. Часто за визначеним кодом операції "закріплюється" і визначений режим адресації. Альтернативний варіант передбачає, що у форматі команди виділяється декілька бітів під поле режиму адресації.Код у цьому полі і визначає режим адресації при виконанні конкретної команди.

Друге зауваження стосується інтерпретації обчисленої виконавчої адреси (ЕА). У системах, що не працюють з віртуальною пам'яттю, виконавча адреса є або адресою в оперативній пам'яті, або ідентифікатором визначеного регістра процесора. У системах з віртуальною пам'яттю виконавчою адресою є або віртуальна адреса, або ідентифікатор регістра. Відображення сформованої виконавчої адреси на фізичний адресний простір — це функція механізму підтримки сторінкової організації, що працює без втручання програміста.

Безпосередня адресація

Найпростіший з погляду програміста режим — безпосередня адресація. У цьому режимі в код команди включається значення операнда:

О=А.

Цей режим часто застосовується для визначення і використання константи чи установки вихідного значення перемінної. Як правило, операнд є цілим числом у додатковому коді, і лівий розряд поля операнда в команді є знаковим. При завантаженні операнда в регістр знак розширюється вліво для заповнення вільних розрядів регістра за звичайним правилом.

Достоїнством безпосереднього режиму є те, що для вибірки операнда після вибору команди з пам'яті не потрібно виконувати ніяких додаткових операцій з пам'яттю. У результаті заощаджується один такт звернення до пам'яті чи такт звернення до кешу в циклі виконання команди. Недолік цього режиму — малий діапазон значень операнда, пов'язаний з обмеженою довжиною адресного поля в команді, яке займає в цьому випадку код операнда. Як правило, у більшості сучасних комп'ютерів довжина адресного поля значно менше довжини слова.

Пряма адресація

Режим прямої адресації також є одним з найпростіших. Адресне поле при цьому містить виконавчу адресу операнда:

ЕА=А.

При виконанні команди з таким режимом адресації потрібно лише одне додаткове звернення до пам'яті для вибірки операнда і не потрібні ніякі спеціальні обчислення. Природне обмеження цього режиму — можливість працювати в невеликому (по сучасних мірках) адресному просторі.

Непряма адресація

Оскільки довжина адресного поля в коді команди в сучасних комп'ютерах звичайно значно менше довжини машинного слова, пряма адресація дозволяє задати адресу в обмеженому діапазоні. Одне з рішень, що допомагає справитися з цим обмеженням, — тримати в адресному полі не виконавчу адресу операнда, а посилання на нього, тобто адресу слова в пам'яті, у якому міститься виконавча адреса операнда. Такий метод називається непрямою адресацією:

ЕА=(А).

Ми уже відзначали, що дужки в цьому вираженні означають вміст. Істотне достоїнство зазначеного методу полягає в тому, що при довжині машинного слова N біт можна в цьому режимі адресувати 2N адрес у пам'яті. Але за це доводиться платити — при виконанні команди для вибірки операнда потрібно два додаткових звертання до пам'яті: одне — для витягу з пам'яті його адреси, а друге — для витягу значення.

В описах деяких міні-ЭВМ 80-х років цей режим називається режимом абсолютної адресації.

Хоча самі адреси операндів у цьому режимі належать адресному простору обсягом 2N слів, кількість різних операндів не може перевищувати 2ДО, де ДО — розрядність адресного поля в коді команди. Як правило, це обмеження істотної ролі не відіграє, і їм можна зневажити. У середовищі віртуальної пам'яті всі комірки, що містять виконавчу адресу, можна зосередити в нульовій сторінці процесу. Оскільки розмір адресного поля в команді невеликий, у ньому міститься адреса комірки, що розміститься в нульовій сторінці. Єдине обмеження полягає в тому, що розмір сторінки повинний бути не менше 2К.

Дуже рідко зустрічається в практиці проектування процесорів варіант багаторівневої, чи каскадної, непрямої адресації.

ЕА=(...(А)...).

У цьому варіанті один біт у слові адреси приділяється для ознаки непрямої адреси (прапор I). Якщо прапор I дорівнює 0, то слово (точніше всі його біти за винятком прапора) містить виконавча адреса, а в противному випадку — непрямий, і необхідно перейти на наступний рівень вкладеності непрямої адресації. Як показала практика, цей варіант не дає істотних переваг при програмуванні, а платити за нього доводиться збільшенням кількості звертань до пам'яті при вибірці операнда.

Регістрова адресація

Регістрова адресація багато в чому подібна прямій, за винятком того, що код в адресному полі містить ідентифікатор регістра процесора (посилання на регістр), а не виконавчу адресу в пам'яті:

EA=R.

Як правило, розмір адресного поля з посиланням на регістр не перевищує 3-4 біт, що дозволяє адресувати 8 чи 16 регістрів загального призначення процесора.

Достоїнства регістрового режиму — малий розмір адресного поля у форматі команди і відсутність додаткових звертань до пам'яті при виконанні команди. Час вибірки операнда з регістра процесора значно менше часу звертання до оперативної пам'яті. Недолік режиму — можливість вибірки операнда тільки з декількох регістрів.

Вибирати, які змінні варто переписати в регістр для роботи з ними за допомогою регістрового методу адресації, а які залишити в оперативній пам'яті, повинен програміст. У більшості сучасних процесорів мається досить великий набір регістрів, що дозволяє програмістам, які користуються мовою асемблера (це, в основному, розроблювачі компіляторів), створювати ефективні програми.

Непряма адресація через регістр

Вище ми провели аналогію між режимами регістрової і прямої адресації. Точно таку ж аналогію можна провести і між режимами непрямої адресації через регістр і "чистої" непрямої. В обох випадках головна відмінність полягає в тому, що в адресному полі команди міститься посилання на регістр замість адреси в пам'яті. У режимі непрямої адресації через регістр виконавча адреса утвориться в такий спосіб:

EA=(R).

Достоїнства і недоліки цього режиму ті ж, що і в режиму непрямої адресації, — обмежений діапазон адрес у команді компенсується тим, що в комірці, на яку посилається поле, можна розмістити код адреси довжиною в машинне слово. Але на відміну від "чистої" непрямої адресації, адресація через регістр скорочує кількість звертань до пам'яті при виконанні команди з двох до одного.

Адресація зі зсувом

Цей режим поєднує можливості прямої адресації і непрямої адресації через регістр. Різні варіанти режиму називаються по-різному, але основний механізм одержання виконавчої адреси практично той самий:

EA=A+(R).

Цей метод адресації вимагає, щоб у коді команди було два адресних поля, причому принаймні одне з них дозволяло зберігати явну адресу. Значення одного адресного поля — А — використовується безпосередньо при обчисленні виконавчої адреси операнда. Значення другого адресного поля, чи неявно задане посилання, обумовлене кодом операції, вказує на регістр, вміст якого складається з А для визначення виконавчої адреси. Ми зупинимося тільки на трьох варіантах режиму адресації зі зсувом:

• відносна адресація;

• адресація через регістр бази;

• індексна адресація.

 

Відносна адресація

У режимі відносної адресації регістром, що неявно вказується, є лічильник програми (PC, Program Counter), тобто для обчислення виконавчої адреси складається вміст адресного поля команди й адреса поточної команди. При виконанні цієї операції вміст адресного поля звичайно інтерпретується як число в додатковому коді. Таким чином, у команді фактично зберігається зсув операнда в пам'яті щодо самої команди.

Відносна адресація базується на концепції локальності посилань. Якщо більшість операндів розміщена недалеко від команд, у яких вони використовуються, застосування режиму відносної адресації дозволяє зберегти біти поля адреси в команді.

Адресація через регістр бази

У цьому режимі вміст полів коду команди інтерпретується в такий спосіб: зазначений регістр містить адресу в пам'яті, а адресне поле — зсув щодо цієї адреси (звичайно розглядається як ціле число без знака). Посилання на регістр можуть бути явними чи неявними.

Режим адресації через регістр бази також враховує властивість локалізації посилань, властивим програмам, і є типовим засобом реалізації сегментації пам'яті. У деяких моделях процесорів існує спеціальний базовий регістр, який використовується у цьому режимі неявно. В інших процесорах програмісту надається можливість самостійно вибрати регістр для збереження адреси сегмента і явно вказати його в команді. В останньому випадку, якщо довжина адресного поля Кбіт, а кількість доступних програмісту регістрів N, в одній команді можна використовувати операнд, розташований в одній з N областей пам'яті обсягом слів кожний.

Індексна адресація

При індексній адресації інформація в коді команди інтерпретується в такий спосіб: вміст адресного поля вказує адресу в оперативній пам'яті, а вміст зазначеного в команді регістра містить позитивний зсув щодо цієї адреси. Оскільки вміст адресного поля розглядається як адреса в пам'яті, воно звичайно має більшу довжину, ніж в аналогічній команді, що використовує адресацію через регістр бази.

Індексна адресація найчастіше застосовується при однаковій обробці елементів масивів. Нехай, наприклад, у пам'яті, починаючи з адреси А, зберігається масив чисел. Припустимо, що до кожного елемента масиву потрібно додати одне й те саме число. Для цього потрібно вибрати елемент масиву з пам'яті, додати до нього задану константу і результат записати по тій же адресі. Послідовність виконавчих адрес елементів масиву — А, А+1, А+2,... і т.д. до кінця масиву. Така процедура досить просто реалізується за допомогою індексного режиму адресації. Значення початкової адреси масиву А поміщається в адресне поле команди і призначається регістр (найчастіше його називають індексним регістром), у якому перед початком виконання процедури встановлюється 0. Після обробки кожного елемента масиву значення віндексному регістрі збільшується на 1.

Оскільки це дуже розповсюджений спосіб застосування індексної адресації в програмі, у відповідних командах часте обчислення виконавчої адреси завершується збільшенням (чи зменшенням на 1) значення в індексному регістрі. Такий спосіб роботи з індексним регістром одержав найменування автоіндексації. Якщо для індексації в процесорі спеціально виділені деякі регістри, їхнє автоматичне збільшення виконується неявно при кожному звертанні. Якщо ж індексний регістр використовується як будь-який регістр загального призначення, операція автоіндексації повинна бути специфікована окремим бітом у коді команди. Автоіндексація з позитивним збільшенням описується в такий спосіб:

EA=A+(R) R<- (R) +1.

У деяких моделях процесорів підтримується і непряма адресація, і індексна, і можна сполучати їх в одній команді. При цьому можливі два варіанти виконання подібних команд: індексація застосовується після вибірки адреси, заданої побічно, чи перед вибіркою.

Якщо індексація виконується після вибірки адреси, заданої побічно (такий варіант називається постіндексацією),виконавча адреса формується в такий спосіб:

EA=(A) + (R).

Спочатку вміст адресного поля використовується для витягу адреси з пам'яті, а потім отримана адреса індексується вмістом індексного регістра. Цей метод застосовується при звертанні до одного з декількох блоків даних однакового формату. Наприклад, операційна система повинна обробляти блоки керування процесом для кожного з активних процесів. Виконувані при цьому операції для всіх процесів ті самі, незалежно від того, який саме блок обробляється в сучасний момент. Тоді адресні поля у всіх командах програми обробки блоку повинні вказувати на комірку пам'яті, у яку варто завантажувати адресу блоку керування поточного процесу. Індексний регістр буде містити зсув усередині цього блоку.

У варіанті предіндексації виконавча адреса обчислюється в такий спосіб:

EA=(A+(R)).

Спочатку, як при звичайній індексній адресації, до вмісту адресного поля додається вміст індексного регістра, але результат використовується не як виконавча адреса операнда, а як адреса комірки, в якій знаходиться виконавча адреса операнда. Цей метод часто застосовується при обробці таблиць переходів. У визначеній точці програми може знадобитися передати керування по різним адресам в залежності від різноманітної умови. Таблиця адрес переходів може бути розміщена в пам'яті, починаючи з адреси А. Індекс у цій таблиці задає її елемент, який варто вибрати як адресу переходу.

Як правило, у той самий набір команд не включаються команди і з предіндексацією, і з постіндексацією.




Поделиться с друзьями:


Дата добавления: 2015-04-24; Просмотров: 593; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.046 сек.