Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

 

Режими адресації

Операнди команд можуть бути як регістрами, так і елементами пам'яті. Деяка архітектура, наприклад Pdp-11 і VAX, допускає довільне поєднання регістрів і елементів пам'яті в одній команді. Зокрема, допустимі команди пересилки з пам'яті в пам'ять і арифметичні операції, обидва (в двоадресної Pdp-11) або всі три (в триадресного VAX) операнди яких розташовано в пам'яті. У іншій архітектурі, наприклад в х86 і Мс680хо лише один операнд команди може розміщуватися в пам'яті, а другою завжди зобов'язаний бути регістром (втім, обидва ці процесора мають і окремі команди пам'ять-пам'ять, наприклад інструкції групової пересилки даних). В RISC-процессоров арифметичні операції дозволені лише над регістрами, а для звернень до пам'яті виділені спеціальні команди LD (LOAD, завантажити) і ST (Store, зберегти).
Залежно від підходу, вживаного в конкретній системі команд, архітектура підрозділяється на пам'ять-пам'ять, регістр-пам'ять і регістр-регістр. Архітектура регістр-регістр приваблива тим, що дозволяє зробити довжину команди фіксованою (адресне поле можуть мати лише команди Ld/st і команди виклику і переходу) і за рахунок цього спростити роботу дешифратора і логіки попередньої вибірки команд. При невеликій довжині адреси (як в старих комп'ютерів і сучасних мікроконтроллерів) цією перевагою володіють і архітектура регістр-пам'ять.
Навпаки, процесори з великим адресним простором і архітектурою пам'ять-пам'ять і регістр-пам'ять вимушені мати команди змінної довжини. В процесорів VAX довжина команди міняється від одного (безадресна команда) до 61 байта (шестиадресна команда, всі операнди якої використовують найскладніший з допустимих режимів адресації). Втім, межею екстравагантності в цьому сенсі є Intel 432, команди якого мали довжину, некратну байту. Адресація команд в 1432 відбувалася з точністю до біта.
У міру зростання адресного простору адресні поля команд, що звертаються до пам'яті, займають всі велику і велику частку коди. Це є додатковою стимул-реакцією до заміни, де це можливо, звернень до пам'яті на звернення до регістрів. Завдяки цьому ж, код RISC-процессоров, що активно використовують регістри, не дивлячись на набагато більшу довжину код команд (якщо в х86 найбільш широко використовувані операції кодуються двома байтами, то в типового RISC всі команди мають довжину 4 байти), ненамного перевершує за об'ємом еквівалентний код для CISC-процессоров. У міру переходу до 64-розрядним адресам, виграш в об'ємі коди може стати перевагою RISC-архитектур.
На основі сказаного вище, у читача могло скластися враження, що єдиним способом вказівки адреси операнда в пам'яті є приміщення цієї адреси в адресне поле команди. Насправді це не так, або, точніше, не завжди так — залежно від режиму адресації, адреса операнда може обчислюватися різними, інколи досить складними способами, з врахуванням значень одного або декількох регістрів, і як з використанням адресного поля, так і без нього.
Більшість сучасних процесорів підтримують багаточисельні режими адресації. Як і при роботі з регістрами, це може реалізуватися двома шляхами: ортогональним, коли режим адресації кодується бітовим полем в коді команди, і неортогональним, коли різні режими адресації відповідають різним командам.
Оскільки різні режими адресації можуть як використовувати адресне поле, так і не використовувати його, щоб реалізувати ортогональну систему з командами фіксованої довжини, потрібно проявити неабияку фантазію.

Режими адресації VAX
В процесорів VAX операнди команд кодуються одним байтом. Старші 4 біта операнда вказують режим адресації, младшие— номер регістра. Якщо режим передбачає використання адресних полів, ці поля слідують за операндом. При деяких режимах можливе використання декількох адресних полів і довжина одного операнда, таким чином, може доходити до 10 байт (мал. 2.6).

Мал. 2.6. Формати одно-, двух- і триадресною команд процесора VAX

Режими адресації SPARC
В процесорів SPARC адресацію здійснюють лише чотири групи команд — LD (завантаження слова з пам'яті в регістр), ST (збереження значення регістра в пам'яті), JMPL (перехід за вказаною адресою і збереження поточної адреси в регістрі) і команди умовного переходу. Всі останні команди маніпулюють регістрами і константами. Команда завдовжки 32 біта має три бітові поля: два задають 5-розрядні номери регістрів, третє — або регістр, або 13-розрядне ціле число (див. мал. 2.3). Команди LD, SP і JMPL мають такий же формат і дозволяють використовувати як адресу або суму двох регістрів, або регістра і 13-розрядного значення, що інтерпретується як знакове число в двійково-додатковій кодуванню. Це перекриває далеко не всі перераховані далі режими адресації. Багато поширених режимів адресації на SPARC доводиться реалізувати за допомогою декількох команд.

Навіть класична повністю ортогональна архітектура — Pdp-11, VAX, Mc680xo — мають принаймні одне відхилення від повної ортогональності: режим адресації коротким зсувом відносно лічильника команд (див. разд. Адресація з використанням лічильника команд  використовуваний в цій архітектурі в командах умовного переходу і недоступний в інших командах.


:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017