Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонов О.С., Хiхловська I.В. Обчислювальна тех...doc
Скачиваний:
15
Добавлен:
01.09.2019
Размер:
4.12 Mб
Скачать

9.2 Способи адресування операндів мп фірми Intel Регістрове адресування операндів

Найбільш швидко виконуваним є регістрове адресування, при якому обидва операнди знаходяться у регістрах, які вказуються у команді. Вміст регістра-джерела передається (копіюється) у регістр-приймач, який у команді вказується першим. Наприклад:

MOV AX, CX; Копіювання 16-розрядного вмісту регістра CX в

; акумулятор AX

Вміст регістра-приймача завжди змінюється на вміст регістра-джерела, який не змінюється.

Безпосереднє адресування операндів

При безпосередньому адресуванні операнд-джерело вказується безпосередньо у команді у вигляді 8- або 16-розрядного даного. Операнд-приймач може бути регістром, або коміркою пам'яті, адресованою будь-яким способом, але не може бути числом. Наприклад:

MOV BL, 11H; 8-розрядне дане записується у регістр BL

При безпосередньому адресуванні знак константи поширюється до 8- або 16-розрядного регістра, а від'ємні числа записуються у регістр або комірку пам'яті у доповняльному коді.

Припустимо, що до виконання команди

MOV CL, 12H; Завантаження у CL константи 12H

у регістрі CL було записане число FFH (11111111В). Після виконання цієї команди у регістр СL буде записано число 12H (00010010B).

Результатом виконання команди

MOV CН, -30; Завантаження у CН константи -30D

буде запис у регістр CН числа Е2Н (11100010В) – числа -30D у доповняльному коді.

Покажемо на прикладі команди з безпосереднім адресуванням як розміщуються байти команди у сегменті кодів. При введенні команди

MOV АХ, 7000Н,

наприклад, у сегмент кодів, який починається з адреси 7000Н (CS) та зміщення 0100Н три байти команди у машинних кодах будуть розміщені у трьох послідовних комірках пам’яті з адресами

Адреса

Машинні

коди

7000:0100

В8

; Код операції “пересилати до АХ”

7000:0101

00

; Молодший байт

7000:0102

70

; Старший байт операнда безпосередньо

7000:0103

; Вільна комірка пам’яті для прийому коду

; операції наступної команди

Запис команди у сегмент кодів можна також проілюструвати за допомогою фрагмента пам’яті (рис. 9.3):

Рисунок 9.3 — Розташування байтів команди MOV AX, 7000Н у сегменті кодів

Таким чином, обсяг пам’яті, яку займає програма, є сумою байтів, займаних усіма командами цієї програми.

Пряме адресування

При прямому адресуванні ефективна адреса операнда у сегментах даних вказується прямо у команді і розміщується у квадратних дужках. Початкова адреса сегмента даних, яка заздалегідь має бути розміщена у відповідному сегментному регістрі даних DS або ES, участь у формуванні ефективної адреси не бере. На рис. 9.4 показано фрагмент сегмента даних, у якому у комірках пам’яті з ефективними адресами 0010Н та 0011Н зберігаються відповідно дані ВВН та ААН, а з адресами 0020Н та 0021Н — дані ССН та DDН.

0010

ВВН

0011

ААН

0020

ССН

0021

DDH

Рисунок 9.4 — Пряме адресування

Після виконання команди

MOV АL, [0010Н]; Завантаження у АL даного з комірки пам'яті з адресою

; 0010Н

у регістр АL буде завантажене дане ВВН.

Після виконання команди

MOV АХ, [0010Н]; Завантаження у АХ слова з комірок пам'яті з адресами

; 0010Н та 00011Н.

у регістр АХ буде завантажено слово ААВВН відповідно до принципу зберігання у пам'яті слів – little endian.

Після виконання фрагмента програми

MOV АХ, [0010Н];

MOV [0020Н], АХ; Завантаження комірок пам'яті з адресами 0020Н та

; 0021Н з акумулятора АХ.

у комірках пам'яті з адресами 0020Н та 0021Н будуть записані нові дані: ВВН та ААН відповідно.