Непряме регістрове адресування
При непрямому регістровому адресуванні ефективна адреса вміщується у будь-якому базовому або індексному регістрі: ВХ, ВР, SI, DI. Непряме регістрове адресування стає у нагоді при обробленні елементів масивів. На рис. 9.5 показані два масиви, які розташовані у сегменті даних, починаючи відповідно з адрес 0010Н – перший та 0020Н – другий, елементи яких становлять відповідно числа 12Н, 34Н, 56Н, 78Н та А1Н, А2Н, А3Н, А4Н.
12Н | |
34Н | |
56Н | |
78Н | |
• | |
• | |
• | |
А1Н | |
А2Н | |
А3Н | |
А4Н | |
Рисунок 9.5 – Непряме регістрове адресування
Після виконання фрагмента програми
MOV BХ,0010Н
MOV АХ,[ВХ]
у регістр АХ з двох комірок пам’яті з адресами (ВХ) та (ВХ+1) будуть передані два байти: 12Н у регістр АL та 34Н у регістр АН.
Після виконання фрагмента програми
MOV DI,0022Н
MOV DН,[DI]
у регістр DН буде записане дане А3Н.
Спосіб непрямого регістрового адресування використовується для послідовного доступу до елементів масивів при нарощуванні або зменшенні вмісту базових або індексних регістрів. Якщо елементи масиву трактуються програмістом як двобайтові (перший фрагмент), то вміст базового або індексного регістра треба змінювати на 2, а якщо як однобайтові (другий фрагмент), то на 1.
При непрямому регістровому адресуванні при зазначенні адреси комірки пам’яті до вмісту базового або індексного регістра може додаватись зміщення.
Ефективна адреса підраховується як алгебраїчна сума вмісту вказаного у команді регістра та зміщення. Результатом виконання фрагмента програми
MOV SI,0020H
MOV DH,[SI+0002H]
буде запис у регістр DН однобайтового елемента другого масиву з комірки пам’яті з ефективною адресою
ЕА = 0020Н + 0002Н = 0022Н,
тобто даного А3Н.
Такий спосіб адресування називається ще непрямим регістровим адресуванням зі зміщенням.
Адресування за базою
За цим способом ефективна адреса операнда обчислюється шляхом підсумовування вмісту базових регістрів ВХ або ВР та зміщення – 8- або 16-розрядного числа. Регістри бази використовуються для доступу до структурованих записів даних (масивів), розташованих у різних областях пам'яті. Базова адреса масиву, тобто його початкова адреса у сегменті, розміщується у базовому регістрі, а доступ до її окремих елементів здійснюється за їх зміщенням відносно базової адреси. Для доступу до елементів різних масивів, розташованих на однаковій відстані від бази, достатньо змінити вміст базового регістра. Припустимо, що у сегменті даних, починаючи з ефективних адрес 0010 та 0020 розташовані відповідно два одновимірних масиви з елементами (рис. 9.6): 12Н, 34Н, 56Н, 67Н, 89Н та А1Н, А2Н, А3Н, А4Н, А5Н, А6Н. За необхідності переслати у регістр AL четвертий елемент першого масиву, а у регістр АН – четвертий елемент другого масиву треба виконати такий фрагмент програми:
MOV BX,0010H ; Запис у ВХ базової адреси першого масиву
MOV AL,[BX+04H] ; Пересилання до AL четвертого елемента першого
; масиву (89Н)
MOV BX,0020H ; Запис у ВХ базової адреси другого масиву
MOV AL,[BX+04H] ; Пересилання до AН четвертого елементу другого
; масиву (А5Н)
Ефективна адреса четвертого елемента першого масиву становить 14Н, а четвертого елемента другого масиву – 24Н. Слід зазначити, що наступні команди:
MOV AХ,[BX]+4
MOV AХ,4[BX]
MOV AХ,[BX+4]
з точки зору підрахування ефективної адреси операнда у сегменті даних є ідентичними і відрізняються тільки формою завдання адреси.
Рисунок 9.6 – Адресування за базою
Коли елементи масиву трактуються як двобайтові, як у наведених командах, то у регістр АХ буде завантажено при значенні вмісту ВХ, який дорівнює 0020Н, другий елемент другого масиву, тобто А6А5Н.