Способи адресування операндів МП фірми 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   ; Молодший байт
7000:0102   ; Старший байт операнда безпосередньо
7000:0103     ; Вільна комірка пам’яті для прийому коду ; операції наступної команди

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

 
  Способи адресування операндів МП фірми Intel - student2.ru

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

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

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

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

 
  Способи адресування операндів МП фірми Intel - student2.ru

   
   
ВВН
ААН
 
 
 
ССН
DDH
   

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

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

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

; 0010Н

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

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

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

; 0010Н та 00011Н

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

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

MOV АХ,[0010Н] ;

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

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

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

Наши рекомендации