АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. Адресація
  2. Адресація в мережі Інтернет
  3. Сигналізація і адресація АТМ
  4. Структура протоколу та адресація в мережах SIP

 

Часто потрібно вміти звертатися до слів пам’яті по відомому зміщенню. Подібні приклади ми бачили в машині IJVM, де локальні змінні визначаються по зміщенню від регістру LV. Звертання до пам’яті по регістрі і константі зміщення називається індексною адресацією.

В машині IJVM при доступі до локальної перемінної використовується вказівник комірки пам’яті (LV) в регістрі плюс невелике зміщення в самій команді. Є і інший спосіб: вказівник комірки пам’яті в команді і невелике зміщення в регістрі. Щоб показати як це працює використаємо наступний приклад. У нас є два одновимірних масиви А і В по 1024 слова в кожнім. Нам потрібно вирахувати Аі І Ві для всіх пар, а потім з’єднати всі ці 1024 логічні вирази операцією АБО, щоб взнати чи є в цім наборі хоч одна пара, яка не дорівнює нулю. Один з варіантів – помістити адрес масиву А в один регістр, а адрес масиву В – в інший регістр, а потім по черзі перебирати елементи масивів. Така програма, звичайно, буде працювати, але її можна вдосконалити так, як показано в лістінгу 9.2.

Листинг 9.2. Програма на мові асемблера для обчислення операції АБО від (Аі І Ві ) для масиву з 1024 елементів.

MOV R1,#0 ; збирає результати виконання АБО в R1

MOV R2,#0 ; R2=і від значення А[ і ] і В[ і ]

MOV R3,#4096 ; R3=перше непотрібне значення індекса

LOOP: MOV R4,A(R2) ; R4=А[ і ]

AND R4,B(R2) ; R4=А[ і ] І В[ і ]

OR R1,R4

ADD R2,#4 ; і=і+4

CMP R2,R3 ; провірка на завершення

BLT LOOP ; якщо R2<R3, продовжити цикл

 

Тут нам потрібні 4 регістри:

1. R1 – містить результати сумування логічних операцій.

2. R2 – індекс і, який використовується для перебору елементів масиву.

3. R3 – константа 4096. Це саме менше значення і, яке не використовується.

4. R4 – тимчасовий регістр для зберігання кожної операції.

Після ініціалізації регістрів ми входимо в цикл з шести команд. Команда навпроти LOOP визиває елемент Аі в регістр R4. При обчисленні джерела тут використовується індексна адресація. Регістр (R2) і константа (адреса елемента А) додаються і отриманий результат використовується для звертання до пам’яті. Сума цих двох величин поступає в пам’ять але не зберігається ні в однім із видимих користувачем регістрів. Запис



MOV R4,A(R2)

означає, що для визначення пункту призначення використовується регістрова адресація, де R4 – це регістр, а для визначення джерела використовується індексна адресація, де А – це зміщення, а R2 – це регістр. Якщо А приймає значення, наприклад, 124300, то відповідна машинна команда буде виглядати так, як показано на рис.5.13.

 

MOV R4 R2

Рис.9.2 - Можливе представлення команди MOV R4,A(R2)

Під час першого проходження циклу регістр R2 приймає значення 0, тому потрібне нам слово А0 знаходиться в комірці з адресом 124300. Це слово загружається в регістр R4.При наступнім проходженні циклу R2 приймає значення 4, тому потрібне нам слово А1 знаходиться в комірці з адресом 124304 і т.д.

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

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |


Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)