Режими адресації
Операнди команд можуть бути як регістрами, так і
елементами пам'яті. Деяка архітектура, наприклад 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 — мають принаймні одне відхилення від повної ортогональности:
режим адресації коротким зсувом відносно лічильника команд (див. разд.
Адресація з використанням лічильника команд
використовуваний в цій архітектурі в командах умовного переходу і недоступний
в інших командах.
|