Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
12.05.2015
Размер:
157.18 Кб
Скачать

Лабораторна робота № 3

Тема: режими адресації та циклічна обробка знакових та беззнакових даних.

Ціль: вивчення адресації пам’яті та організації циклів.

Теоретичні відомості Непряма адресація пам’яті

При прямій адресації пам’яті в команді безпосередньо вказується адреса:

MOV AX, message ; в AX пересилається слово з пам’яті за адресою message

; те ж можна виконати, використовуючи непряму адресацію пам’яті

MOV BX, offset message

MOV AX, DS: [BX] ; в AX пересилається слово з пам’яті (сегменту даних), адреса якого записана в регістрі BX

Багато команд процесора можуть працювати з вмістом пам’яті, приймаючи в якості параметру логічну адресу даних, необхідних для роботи. Наприклад, команда “MOV регістр, пам’ять” копіює дані з пам’яті в 8-и чи 16-бітний регістр загального призначення, а команда “MOV пам’ять, регістр” – навпаки.

Сегментна складова логічної адреси повинна знаходитися в одному з сегментних регістрів, зміщення задається як “ефективна адреса”. Процесор 8086 підтримує 17 способів задавання ефективної адреси, які можна наглядно представити у вигляді формули:

Ефективна адреса = вміст базового регістру (base) + вміст індексного регістру (index) + зміщення (displacement), де базовий регістр – це BX чи BP, а індексний – SI чи DI. Будь-яка компонента ефективної адреси може бути відсутня.

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

[BX + SI + 5] ; [базовий регістр + індексний регістр + константа]

5 [BX + SI] ; константа [базовий регістр + індексний регістр]

5 [BX] [SI] ; константа [базовий регістр] [індексний регістр]

[BX] [SI] [5] ; [базовий регістр] [індексний регістр] [константа]

В програмах часто застосовують команду “LEA” (Load Effective Address), синтаксис якої аналогічний “MOV регістр, пам’ять”. На відміну від “MOV”, “LEA” зберігає в регістрі не вміст пам’яті, а підраховану адресу. Тобто запис “MOV BX, offset message” еквівалентний запису “LEA BX, message”.

Приклади запису команди “MOV” з задаванням адреси:

MOV AX, DS: [1234h] ; лише константа

MOV CL, ES: [DI] ; лише індексний регістр

MOV BX, CS: [BX – 2] ; базовий регістр та константа

MOV DH, SS: [BP] [SI] [10] ; базовий, індексний регістри та константа

Якщо при вказуванні адреси явно не задати сегмент, то буде використовуватися так званий “сегмент по замовчуванню”. Для випадку, коли взятий базовий регістр BP, сегмент по замовчуванню – SS, в усіх інших випадках – DS.

DS

SI

DI

BX

SS

BP

Спростимо попередній приклад:

MOV AX, [1234h] ; лише константа

MOV CL, ES: [DI] ; лише індексний регістр

MOV BX, CS: [BX – 2] ; базовий регістр та константа

MOV DH, [BP] [SI] [10] ; базовий, індексний регістр та константа

Будьте уважними, щоб запобігти наступним помилкам:

MOV AX, [DX] ; регістр не є базовим чи індексним

MOV CH, [SI + DI] ; обидва регістри – індексні

MOV AL, [CS: SI] ; сегмент вказаний всередині квадратних дужок

Всі команди та типи адресацій процесора 8086 підтримуються новішими моделями, тому далі в тексті, якщо процесор явно не вказаний, буде вважатися, що мова йде про 8086.

Соседние файлы в папке SP_ukr