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

:: Меню ::

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

:: Друзі ::

Карта сайту
 

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

 

 

 

 

 

настенный блок с лентой
 

Вироджені режими адресації

До цієї групи відносяться режими, в яких доступ до операнда не містить адресації як такий.
Першим з таких режимів є операнд-регістр. Режим цей концептуально украй простий і додаткових коментарів не потребує.
Другий режим — операнд-константа. У документаїіях по багатьом процесорам цей режим називають літеральною (literal) і негайною (immediate) адресацією.
Здавалося б, важко придумати простішою і життєво необхідний режим. Проте повноцінно реалізувати такі операнди можна використовуючи або команди змінної довжини, або команди, які довше за слово (найчастіше це буває в процесорів гарвардської архітектури, наприклад, вже згадуваного PIC).

Літеральна адресація в системі команд SPARC
Розробники процесорів, яких не владнує жодне з названих умов, вимушені проявляти фантазію. Так, в RISC-процессоров SPARC і команда, і слово мають однакову дліну— 32 біта. Адресне поле такої довжини в команді неможливе — не залишається місця для коди операції. Вихід, запропонований розробниками архітектури SPARC, при першому знайомстві справляє дивне враження, але, як говорять в таких випадках, "не критикуйте те, що працює".
Триадресні команди SPARC можуть використовувати як операнди три регістри або два регістри і беззнакову константу завдовжки 13 біт. Якщо константа, яку ми хочемо використовувати в операції, уміщається в 13 біт, ми можемо просто використовувати цю можливість. На випадок, якщо значення туди не поміщається, надається команда sethi const22, reg, яка має 22-розрядне поле і встановлює старші біти вказаного регістра, рівними цьому полю, а молодші біти — рівними нулю.
Таким чином, якщо ми хочемо помістити в регістр 32-розрядну константу value, ми повинні робити це за допомогою двох команд: sethi %hi (value), reg; or %gO, %lo (value), reg; (відповідно до [docs.sun.com 806-3774-10], саме так реалізована асемблерна псевдокоманда set value, reg).
З точки зору займаної пам'яті, це анітрохи не гірше, ніж команда set value, reg, яка теж повинна була б займати 64 біта. Зате таке рішення дозволяє дотримати принцип: одна команда — одне слово, який полегшує роботу логіці випереджаючої вибірки команд.
Втім, для 64-розрядного SPARC v9 настільки елегантного рішення знайдено не було. Спосіб формування довільного 64-бітового значення вимагає додаткового регістра і цілої програми (приклад 2.1). Залежно від значення константи цей код може піддаватися оптимізації. Найлегше, звичайно, справа йде, якщо необхідне значення поміщається в 13 біт.

Приклад 2.1. Формування 64-розрядного значення на SPARC v9, цит. по [docs.sun.com 806-3774-10]

! reg — проміжний регістр, rd — цільовий.
sethi %uhi(value), reg
or reg %ulo(value), reg
sllx reg,32,reg ! зрушення на 32 біта
sethi %hi(value), rd
or rd, reg, rd
or rd %lo(value), rd

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

Короткі літерали VAX
В процесорів сімейства VAX є режим адресації, що дозволяє використовувати бітове поле, яке в інших режимах інтерпретується як номер регістра, як 4-бітового літерала. Разом з двома бітами режиму адресації цим способом можна задати 6-розрядний літерал, знаковий або беззнаковий залежно від контексту [Прохоров 1990].

Короткі літерали Мсбзохо
В процесорів сімейства Мс680хо літерал може мати довжину 1 або 2 байти. Крім того, надаються команди ADDQ і SUBQ, які дозволяють додати до вказаного операнда або відняти з нього ціле число в діапазоні від 1 до 8.

 

:: Реклама ::

 

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


 

 

 


Copyright © Kivik, 2017