Головна

Способи адресації даних

  1.  A. Для остаточного висновку не вистачає даних.
  2.  Системи управління базами даних наступного покоління
  3.  I Створення таблиць бази даних
  4.  III. Опис зовнішніх схем баз даних
  5.  SKIP-технологія і криптопротоколів SSL, S-HTTP як основний засіб захисту з'єднання та даних, що передаються в мережі Internet
  6.  V Пошук, сортування та відбір даних
  7.  VII. Способи включення в хід дії нових осіб

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

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

Розглянемо основні способи адресації інформації, які використовуються в комп'ютерах.

пряма адресація. прямий доступ - Це номер комірки пам'яті, в якій зберігається операнд. Прямий доступ представляється в команді m-розрядної полем, де m = log2Е и Е - Ємність пам'яті, що адресується, що обчислюється в машинних елементах інформації - словах або байтах. прямий доступ А передається в пам'ять, і шляхом звернення до пам'яті з осередку А читається або в неї записується операнд. Пряма адресація - це основоположний спосіб адресації.

безпосередня адресація. У програмах досить часто використовуються цілочисельні константи: 0, 1, 2, ... Якщо використовувати пряму адресацію, то для розміщення константи необхідно виділяти осередок пам'яті і для вибірки константи виробляти одне звернення до пам'яті. Витрати пам'яті і часу зменшуються, якщо константу представляти безпосередньо в m-розрядної поле адреси. В цьому випадку для констант зі значеннями 0, 1, ..., 2m-1 Немає необхідності виділяти осередки пам'яті, а оскільки константа розміщена в команді, економиться одне звернення до пам'яті на кожну константу. Адреса, в якому розміщується значення константи, називається безпосереднім адресою. Безпосередня адресація дозволяє економити пам'ять і час, коли константа є цілим позитивним числом зі значенням, меншим 2m.

непряма адресація. При програмуванні деяких завдань широко використовуються покажчики, що визначають місце розташування операндів в пам'яті. покажчик - Це адреса операнда, що зберігається в певній комірці пам'яті. Значення покажчика може змінюватися в процесі виконання програми у міру обробки одних операндів і переходу до обробки інших, але адреса самого покажчика залишається постійним, забезпечуючи на кожному етапі обчислень звернення до відповідного операнду. У такому випадку адреса визначена в осередку з заданим адресою. Адреса, який визначає адресу операнда, називається непрямим адресою. Для доступу до побічно адресується операнду за допомогою прямих адрес необхідно зробити наведене нижче: 1) звернення до пам'яті за адресою А з метою вибірки адреси А1 операнда; 2) формування команди, що складається з коду операції і адреси операнда А1; 3) запис сформованої команди в відповідному полі пам'яті; 4) звернення до операнду за допомогою сформованої команди. Ця процедура програмується за допомогою чотирьох команд і породжує вісім звернень до пам'яті.

Щоб уникнути таких значних витрат пам'яті і часу, використовується непряма адресація. непрямий адреса Адо, вказаний в команді, обробляється наступним чином:

Ак ® Ак ® ... ® Ак ® А ®Операнд.

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

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

Спосіб адресації може вказуватися за допомогою спеціального поля - ознаки адресації (ПА). При використанні трьох способів адресації ознака адресації займає два розряду і має наступний зміст: ПА = 00 - пряма адресація; ПА = 01 - безпосередня адресація; ПА = 10 - непряма адресація. При цьому 1-адресна команда має такий вигляд:

               
   
 
 
 
   
,
 

де КО - код операції і А1 - Адреса в команді.

Використання безпосередній і непрямої адресації на додаток до прямих адресами сприяє зменшенню числа осередків пам'яті, необхідних для програми, і числа виконуваних операцій. Однак введення додаткових способів адресації призводить до збільшення довжини команди. Тому використання безпосередній і непрямої адресації виправдано тільки в тому випадку, коли економія пам'яті і часу, що отримується за рахунок додаткових способів адресації, перевищує витрати пам'яті, пов'язані з введенням в команди ознак адресації. Економія пам'яті і часу пропорційна частоті використання безпосередній і непрямої адресації і залежить від класу алгоритмів, що реалізуються комп'ютером. Безпосередня адресація використовується досить часто. Застосування непрямої адресації виправдано тільки в тих випадках, коли в алгоритмах широко використовуються інформаційні структури виду «адреса - адреса - ... - адреса - операнд».

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

Модифікуються адреси.Розглянуті способи адресації забезпечують доступ до простих змінними констант. Як операнди можуть використовуватися змінні з індексами, які є елементами масивів. Масив являє собою сукупність однотипних значень (слів або полів). елемент масиву xi виділяється ідентифікатором масиву х і індексом i, визначальним порядковий номер елемента в масиві. У програмі масив прийнято ідентифікувати адресою Bx першого елемента масиву x0, званим базовою адресою. Адреса [xi] елемента xi визначається значенням

[xi] = Bx + I, (3.4)

де i = 0, 1, ..., m. В команді з операндом xi може бути вказаний лише базовий адреса масиву Bx, І перед виконанням команди адресу повинен бути збільшений на значення індексу i. Процедура зміни адреси в команді називається модифікацією.

Модифікація може виконуватися програмно - сукупністю команд, що змінюють адресу в команді відповідно до (3.4). У 1-адресному комп'ютері для цього потрібно три додаткових команди і одна константа, що задає початкову форму модифікується команди. Отже, програмна модифікація адрес значно уповільнює процес обробки змінних з індексами і призводить до великих витрат пам'яті.

Витрати часу і пам'яті на обробку змінних з індексами значно знижуються за рахунок схемної модифікації адрес в процесорі. Для зберігання значень індексів використовується пам'ять процесора - регістри загального призначення РОН, ємністю Q = 2q - 1 слів (рис. 3.3). Модифікується адреса має наступну структуру:

 
 

де X - Адреса регістра загального призначення, в якому зберігається індекс і А1 - Адреса в основний пам'яті. Адреса операнда визначається наступним чином:

 
 

коли адреса А1 визначає просту змінну або константу, то модифікація виключається нульовим значенням поля Х. при Х?0 адреса А1 має сенс базового адреси масиву. У цьому випадку проводиться звернення до внутрішньої пам'яті за адресою Х і складання базової адреси А1 з індексом РОН [X], В результаті чого визначається адреса А операнда, що зберігається в основній пам'яті.

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

Розглянемо питання про необхідний числі індексів, які повинні знаходитися у внутрішній пам'яті процесора. На кожному етапі обчислень використовується обмежена кількість індексів - один, два або більше, яке визначається числом різних індексів, що фігурують в обчислюваному виразі. Імовірність того, що на етапі обчислень будуть використовуватися k = 1, 2, ... індексу, залежить від властивостей алгоритмів. Якщо ємність пам'яті, відведеної для зберігання індексів, Q , То в процесі обчислень виникає необхідність розвантажити пам'ять індексів шляхом переходами їх в основну пам'ять і завантажити в звільнилися осередку інші необхідні індекси. Для цього в програму включаються додаткові команди, що забезпечують передачу індексів між регістрами процесора і оперативної пам'яттю, що збільшує довжину програми і час обчислень. Чим більше ємність пам'яті індексів, тим менше ймовірність того, що необхідне для обчислень кількість індексів перевищить ємність реєстрової пам'яті процесора. Мінімально необхідне число індексів для модифікації адрес дорівнює 1. Збільшення ємності пам'яті індексів зменшує довжину програми і час обчислень, що є позитивним явищем, але поряд з цим збільшуються витрати обладнання в процесорі за рахунок збільшення ємності його реєстрової пам'яті і, що найголовніше, збільшується довжина поля Х, Т. Е. Довжина команди. Практика проектування комп'ютерів і програмування показує, що в загальному випадку в процесі обчислень одночасно використовуються не більше чотирьох - восьми індексів.

Відносна адресація. Комп'ютери загального застосування працюють в мультипрограммном режимі, який суттєво збільшує системну продуктивність комп'ютерів. В такому випадку в основній пам'яті комп'ютера, має розміщуватися декілька програм, що забезпечують хороше завантаження процесора, системи введення-виведення та інших пристроїв комп'ютера. Щоб забезпечити можливість розміщення програм і пов'язаних з ними даних в будь-якому місці основної пам'яті, необхідно все програми, одержувані шляхом трансляції з мов високого рівня в машинний код, розміщувати починаючи з адреси 0 і використовувати спеціальний механізм адресації - відносну адресацію. Приклад організації мультипрограммной обробки представлений на рис. 3.5. Організація мультипрограммирования покладається на операційну систему комп'ютера, тому  для розміщення програм операційної системи використовується область основний пам'яті від адреси В0 і довжиною L0. Потім в основний пам'яті розміщується програма А, Що починається з адреси В1 і має довжину L1, потім програма В, Що починається з адреси В2 і має довжину L2 і т. д. Адреси В0, В1, В2, ... Є базовими адресами програм, що визначають фізичний стан програм в основній пам'яті. Природно, що при зверненні до пам'яті процесор повинен додавати значення базової адреси до всіх адрес, що виконуються команд і даних, щоб забезпечити виконання команд і звернення до адресуються даними. Для забезпечення мультипрограммной обробки даних в процесор вбудовуються засоби, що забезпечують відносну адресацію команд і даних.

Відносна адресація ґрунтується на розміщенні в пам'яті процесора базових адрес і поданні всіх адрес, крім безпосередніх, у вигляді двох полів:

       
 
   
.
 

тут B -адреса регістра процесора, в якому розміщується базова адреса, і D - зміщення, що визначає порядковий номер операнда. Адреса операнда визначається сумою А = РОН [B] +D, Де РОН [B] - Вміст регістра пам'яті процесора з адресою В.

При використанні відносної адресації адреси операндів задаються значеннями D = 0, 1, ..., 2m-1 Щодо довільних базових адрес, які визначаються тільки побічно - адресами В регістрів пам'яті процесора, що містять значення базових адрес. При завантаженні програми в основну пам'ять у відповідні комірки пам'яті засилають базові адреси, що визначають місце розташування інформації в адресному полі основний пам'яті. При виконанні програми відносні адреси (3.7), зазначені в командах, обробляються процесором шляхом вибірки з пам'яті значення базової адреси РОН [B] І складання його зі зміщенням D. Сума визначає абсолютний базовий адреса - адреса комірки основної пам'яті, в якій зберігається операнд. При будь-якому розташування програми в пам'яті команди не змінюються, а змінюються лише значення в осередках реєстрової пам'яті процесора, відведених для зберігання базових адрес.

Ємність реєстрової пам'яті процесора, необхідна для розміщення базових адрес, - один базовий адреса для вказівки початку виконуваної програми і базові адреси для адресації масивів даних, кількість яких визначається властивостями алгоритму і в першу чергу - структурою даних, що обробляються програмою. Якщо на етапі обчислень використовується k базових адрес і ємність реєстрової пам'яті, відведена під базові адреси, Q , То в процесі обчислень виникає необхідність розвантажувати пам'ять базових адрес шляхом передачі їх в основну пам'ять і завантажувати в звільнилися осередку необхідні базові адреси. Як і у випадку з індексами, передачі базових адрес між реєстрової пам'яттю процесора і основною пам'яттю призводить до збільшення довжини і часу виконання програми. Чим більше ємність пам'яті базових адрес, тим менше ймовірність того, що кількість базових адрес, використовуваних на поточному кроці обчислень, перевищить ємність пам'яті. Отже, збільшення ємності пам'яті для зберігання базових адрес призводить до зменшення довжини і часу виконання програми. Проте одночасно з цим, збільшується довжина поля В в адресі (3.7), т. е. довжина команд, і витрати обладнання в процесорі.

Відносні модифікуються адреси. Щоб ефективно обробляти змінні з індексами при відносній адресації інформації, використовуються відносні модифікуються адреси з наступною структурою:

 
 

 тут B и Х - Адреси базового адреси та індексу відповідно і D - зміщення. Адреса (3,8) обробляється з метою обчислення адреси операнда А за схемою, показаної на рис.3.6. Адреса операнда визначається m-розрядної значенням

           
   
   
 
 . . .
 
 

 . . . Q
 . . .
 зсув D в (3.8) при Х?0 має сенс щодо базового адреси масиву, елементом якого є адресується операнд - змінна з індексом.

Сторінкова організація пам'яті.Комп'ютери загального застосування оснащуються оперативною пам'яттю великої ємності, що досягає 226 і більше байт, так що адреси можуть мати довжину від 26 біт і більше. При визначенні форматів команд прагнуть довжину команди узгодити з довжиною слова, оскільки представлення команди, наприклад, у вигляді двох слів може збільшити час вибірки команди з пам'яті. У комп'ютерах загального застосування довжина слова зазвичай дорівнює 32 або 64 бітам. Щоб звільнити частину слова для розміщення необхідних полів команди (коду операції, базового адреси, індексу і т.д.), необхідно зменшити довжину адреси, яку представляють в команді. Для цього використовується наступний прийом. Безліч адрес пам'яті розділяється на групи, що складаються з Р= 2р сусідніх адрес, званих сторінками пам'яті. Кількість слів або байтів в сторінці називається розміром сторінки.Для зменшення довжини команди адресу в команді видається тільки молодшими р розрядами, т. е. адресою слова в сторінці. Розмір сторінки зазвичай становить від 4 до 64 Кбайт, і для представлення адреси байта в команді потрібно від 12 до 16 біт, завдяки чому довжина адреси значно скорочується - в 3-6 разів. Такий спосіб адресації називається сторінкової адресацією пам'яті і використовується в комп'ютерах загального застосування, що працюють в мультипрограммном режимі (див. рис. 3.5). Обчислення адреси осередки пам'яті на основі інформації, що міститься в команді, відбувається наступним чином (рис. 3.7). У момент початку обробки k-й програми операційна система завантажує в регістр процесора адреса Вk і довжину Lk сегмента, відведеного в пам'яті для розміщення k-й програми і відповідних даних. Таким чином визначається місце розташування в пам'яті k-й програми Вk і довжина сегмента Lk, Яка визначається числом сторінок, відведених програмою. При обробці команд формується відносний адреса, що складається з трьох полів: базового адреси, що визначає місце розташування першого слова В в масиві, індексу Х, якщо X? 0, і зміщення D, Що визначає відносно адреси В становище простий змінної, константи і т. д. Сума базового адреси програми Вk, Базового адреси масиву В, індексу X, якщо X? 0, і зміщення D, Що визначає адресу в сторінці, утворюють виконавчий адресу, за якою проводиться звернення до пам'яті. Додатково зазначимо, що значення базової адреси і індексу вибираються за значеннями B и X з регістрів загального призначення РОН, що входять до складу процесора.

стекова адресація. Стек (від англійського слова stack - стіг сіна) входить до складу процесора і складається із сукупності регістрів, об'єднаних особливою системою адресації - стековой адресацією. Для стековой адресації використовується лічильник стека СС, який при запуску комп'ютера встановлюється в стан 0, яке вказує, що стек порожній. Для завантаження величин в стек використовується команда завантажити стек ЗАГС А, де А - Адреса комірки пам'яті. Наприклад, якщо в програмі з'явилися команди завантаження стека ЗАГС [?] і ЗАГС [?], де [?] і [?] - адреси осередків пам'яті, в яких розміщені слова ? і ?, то слово ? буде розміщено в регістрі стека з адресою СС = 0, після чого лічильник стека автоматично перемикається в стан СС = 1, і при виконанні наступної команди в наступний регістр стека буде записано слово ?, після чого лічильник стека автоматично перейде в стан СС = 2. Якщо потім в програмі з'являться команди записи в пам'ять з стека ЗАПС А1 і ЗАПС А2, де А1 и А2 - Адреси осередків пам'яті, то будуть виконані наступні дії:

СС: = СС-1, [А1]: = ?;

СС: = СС-1, [А2]: = ?.

При цьому лічильник стека зменшується на одиницю і слово ? передається в комірку пам'яті з адресою А1. Слідом за цим дія повторюється: знову лічильник стека зменшується на одиницю і слово ? передається в комірку пам'яті з адресою А2. Таким чином, адресація стека виконується автоматично: при кожному завантаженні слова в стек стан лічильника стека автоматично збільшується на одиницю, а при записі слова в пам'ять стан лічильника стека спочатку зменшується на одиницю, і потім слово передається з стека в пам'ять. Лічильник стека завжди визначає адресу наступного вільного регістра стека. При цьому, якщо слова ?, ?, ? завантажені в регістри стека послідовно, вибірка з стека цих слів відбувається в зворотному порядку ?, ?, ?, відповідає поточному стану лічильника стека, який при вибірці спочатку переходить в стан, на одиницю менше поточного, після чого чергове слово вибирається з стека.

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

Y: = A B (С+D) / (E F+H)

Відповідає наступна бесскобочная форма:

AB  CD+EF  H +/X a Y

За цим поданням вираження побудована програма, наведена в табл. 3.3. змінні a, b, ..., y позначають адреси осередків пам'яті, в яких зберігаються значення A, B, ..., Y відповідно. Символ * відзначає стан лічильника адреси стека на момент закінчення операції. З наведеної програми видно, що кількість звернень до пам'яті дорівнює числу змінних в арифметичному виразі. Всі проміжні результати автоматично зберігаються в пам'яті, завдяки чому виключається

Таблиця 3.3. Обчислення арифметичного виразу

 команди  Зміст регістрів стека з адресами 0, ..., 4
         
 ЗАВАНТАЖИТИ aЗАВАНТАЖИТИ bУМНОЖІТЬЗАГРУЗІТЬ cЗАВАНТАЖИТИ dСЛОЖІТЬЗАГРУЗІТЬ eЗАВАНТАЖИТИ fУМНОЖІТЬЗАГРУЗІТЬ hСЛОЖІТЬРАЗДЕЛІТЬУМНОЖІТЬЗАПІСАТЬ y A A AB AB AB AB AB AB AB AB AB  АВ Y * * B * C C C + D C + D C + D C + D C + D C + D (C + D) / (EF + H) * * * D * E E EF EF EF + H * * * F * H * * *

необхідність в засилання їх в пам'ять і в подальшій вибірці цих значень. За рахунок цього зменшується витрата часу на обчислення виразів, тобто збільшується швидкодія процесора.

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

Інший приклад застосування стековой пам'яті - зберігання локальних змінних, використовуваних в тілі процедури для виконання обчислень. Для розміщення локальних змінних процедур використовується пара покажчиків: лічильник стека СС1 і лічильник стека СС2, що визначають відповідно верхню і нижню межі області локальних змінних, виділену для їх зберігання в стеці. Якщо стек порожній, обидва лічильника вказують адресу першої вільної комірки стека. Коли починається виконання процедури А, Відбувається завантаження локальних змінних процедури в стек. При зверненні процедури А до процедури В локальні змінні процедури В також завантажуються в стек і процес обчислень триває. Найголовніше властивість стека - можливість виконання рекурсивних процедур, Розпорядчих багаторазове виконання процедур з одним і тим же ім'ям D, Але з різними наборами фактичних параметрів в процедурах D. При багаторазових зверненнях до рекурсивним процедурам тільки стек дозволяє для кожного звернення виділяти нову область для розміщення локальних змінних процедури. Детально функції стека описані в книзі [1].




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

© 2016-2022  um.co.ua - учбові матеріали та реферати