У 8-розрядному мікропроцесорі використовується п'ять різних способів адресації. Розглянемо кожен з них на прикладі завантаження акумулятора А даними D.
Безпосередня адресація. При цьому способі адресації не потрібно вказівки будь-якого адреси для вибірки даних з пам'яті (оперативного запам'ятовуючого пристрою - ОЗУ), так як вони розміщуються в самій команді (у другому або в другому і третьому байтах). На рис. 5.16 показана завантаження акумулятора А другим байтом В2 = D за допомогою команди MVI dsl, B2, де покажчик dst = А. Посилання (показана стрілкою) на акумулятор міститься в коді операції (КО) команди, що зберігається в регістрі команд РК.
Мал. 5.16. безпосередня адресація
Пряма адресація. При прямому способі адресації молодший байт адреси Ам міститься в другому байті команди В2, а старший байт адреси- в третьому байті В3. Адресний код АСАМ поміщається в реєстрову пару WZ і виводиться на адресну шину через регістр адреси. Цей спосіб використовується для адресації зовнішньої пам'яті і пристроїв. Його недолік - великі витрати часу, так як довжина команди складає три байта.
Команда LDA addr завантаження акумулятора А операндом D, що зберігаються в осередку ОЗУ з адресою АСАМ, виповнюється в такій послідовності (рис. 5.17):
• перший байт команди В1, що містить код операції (КО), завантажується в РК;
• другий В2 = Ам і третій В3 = Ас байти записуються в регістри W і Z (вказує код операції);
Мал. 5.17. пряма адресація
• по виставленому на адресній шині коду АСАМ дані D з осередку ОЗУ копіюються в акумулятор А.
Команда виконується за чотири машинних циклу. Побічно-реєстрова адресація. При необхідності багаторазового звернення до будь-якої комірки пам'яті її адресу зручніше зберігати у внутрішніх регістрах мікропроцесора. Для адресації до осередку в цьому випадку необхідно вказати номер внутрішнього регістра, в якому зберігається адреса. Для зберігання 16-розрядних адрес використовуються реєстрові пари ВС, DE, HL і покажчик стека SP. Пари кодуються (ВС → 00, DE → 01, HL → 10, SP → 11). Код реєстрової пари розміщується в адресній частині однобайтовим команд, які вибираються за один машинний цикл і тому вимагають менше витрат часу. Виконання тієї ж операції завантаження акумулятора даними D з осередку ОЗУ з адресою АCАМ (зберігаються в реєстрової парі DE) показано на рис. 5.18.
Реєстрова і реєстрова-непряма адресація. Якщо повинні стати предметом обробки дані розміщені у внутрішніх регістрах мікропроцесора, то для адресації до них досить вказати двійкові коди R регістрів (табл. 5.7) в першому байті команди. До внутрішніх регістрів крім РОН віднесені також акумулятор А і осередок зовнішньої пам'яті М, адреса якої зберігається в реєстрової парі HL.
Звернення до регістрів В, С, D, Е, Н, L, А називається реєстрової адресацією, а до комірки М - реєстрова-непрямої адресацією. Використання обох видів реєстрової адресації для завантаження (за допомогою команди MOV dst, src) акумулятора А даними D, що зберігаються в регістрі С і осередку пам'яті М з адресою АСАМ (знаходиться в реєстрової парі HL), проілюстровано на рис. 5.19. На вибірку даних з комірки М ОЗУ витрачається два машинних циклу.
Таблиця 5.7
регістр
В
З
D
Е
H
L
M
А
код
000
001
010
011
100
101
по
111
Мал. 5.18. непряма адресація
Мал. 5.19. Реєстрова (а) і побічно-реєстрова (б) адресація
Стекова адресація. При стековой адресації поточний адресу осередки пам'яті зберігається в покажчику стека. Цей спосіб адресації є непрямим і відрізняється від раніше розглянутих тем, що необхідність звернення до покажчика стека слід безпосередньо з коду операції команд роботи зі стеком.
Якщо Ви помітили помилку в тексті позначте слово та натисніть Shift + Enter