You are on page 1of 18

Міністерство освіти і науки України

Національний технічний університет України


«Київський політехнічний інститут»

Інститут Прикладного системного аналізу


Кафедра Системного проектування

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

з дисципліни «Архітектура обчислювальних систем»

«Дослідження адресації даних в «реальному режимі»

Виконав:
студент групи ДА-82
факультету «ІПСА»
Чайковський В.В.
Варіант 33 (3)

Київ – 2020
Завдання
Частина 1. Адресація в «реальному» режимі.
1. Скласти схему обчислення адресу процесорів архітектури х86.
2. Пояснити призначення регістрів ЦПУ, використовуваних для
адресації.
Частина 2. Дослідження способів адресації даних:
1. Визначити склад і пояснити призначення засобів обчислення адресу
даних.
2. Перерахувати способи адресації даних і пояснити їх особливості.
3. Скласти схеми обчислення адресу для різних способів адресації
даних.
Частина 3. Написати і відлагодити програму, що виконує дії, вказані в
таблиці. Для адресації елементів масиву використовувати непрямі режими
адресації. Програма має містити процедуру, яка обробляє вихідні
параметри зі стеку. Навести приклади використання різних способів
адресації даних і команд в програмі, зафіксувавши вміст відповідних
регістрів і адрес пам’яті.
Варіант Завдання

3 Заданий масив байтів. Обчислити середнє арифметичне елементів масиву.


Теоретична частина
Логічний адрес – це адрес, з яким, зазвичай, оперує програмне
забезпечення, формується він з двох величин. Перша – це 16-бітний
селектор (вказівник) сегменту (береться з відповідного операції
сегментного регістру), друга – 32(16)-бітне зміщення відносно початку
сегменту. Логічна адреса існує лише всередині процесору та має зміст для
програмного забезпечення. Його перетворення у фізичний адрес для
звертання до пам’яті забезпечується за допомогою достатньо складного
механізму, функціонування якого суттєво залежить від поточного режиму
роботи процесора.
Програми можуть використовувати різні методи адресації (методи
формування логічного адресу). В загальному випадку ці методи можна
поділити на прямі та непрямі. Вони відрізняються способом задання
32(16)-бітного зміщення. Зміщення може задаватись в коді програми
безпосередньо 32(16)-бітним значенням (пряма адресація), або шляхом
вказівки на регістр (регістри), значення в якому є зміщенням (непряма
адресація). Всі можливі способи формування 32-бітного зміщення
представляються формулою:

Зміщення (offset) = Base + Index* scale + Displacement


Рис. 1 Методи формування зміщення
Лінійний адрес – адрес, який формується механізмом адресації
процесору з логічного адресу. Лінійний адрес призначений для звертання
к лінійному (неперервному і несегментованому) адресному простору
об’ємом 232 байт.
Спосіб формування лінійного адресу з логічного залежить від поточного
режиму роботи процесора (реальний, захищений, 32 або 16-бітова
адресація).
Фізичний адрес – адрес, який передається на зовнішню шину для
звертання до комірок пам’яті.

Реальний режим – режим, в якому працював процесор 8086. У сучасних


процесорах цей режим підтримується в основному для сумісності з старим
програмним забезпеченням. Механізм формування лінійного адресу в
реальному режимі роботи:

Рис. 2 Формування лінійного адресу в реальному режимі роботи


процесора
Отриманий такий чином лінійний адрес є фактично і фізичним адресом.
Опис регістрів загального принзначення:

Сегментні регістри. В реальному режимі роботи процесор може апаратно


поділяти програму у пам’яті на 3 частини, які назвали сегментами, а
сегментні регістри призначені для доступу до цих сегментів:
Регістри флагів та вказівникив команд:

Опис прапорів:
Системні регістри. Використовуються для забезпечення роботи
захищенного режиму мікропроцесора, тому не часто використовуються
програмістами.

Команди пересилки. Існують дві основні команди пересилки – MOV та


XCHG. Команда MOV має наступний синтаксис:
MOV destination , sourse
За допомогою команди MOV можна пересилати значення з джерела в
приймач. Незважаючи на назву «move», команда копіює з джерела у
приймач, а не переміщає.
Тому можливі лише наступні поєднання операндів у команді mov:

mov register, register


mov register, memory
mov register, operand
mov memory, operand

operand – це просто константа (число), яка може буди представлена ім’ям,


визначиним за допомогою операндів EQU або =.
Пересилка типу пам’ять-пам’ять неможлива. Виключеннями у
представлених поєднаннях також є те, що неможна пересилати данні з
одного сегментного регістру в інший та записувати безпосередній операнд
у сегментний регістр – для цього потрібно використовувати проміжні
несегментовані регістри.
Приклади:
Запис у квадратних дужках, наприклад [00504032h] означає те, що
потрібно взяти значення з пам’яті яке міститься за адресом 00504032h.
Приклад комірок пам’яті:

Відповідно до рисунку команда mov eax, [00504032h] помістить у регістр


EAX подвійне слово (32-розряди) з пам’яті починаючи з адресу 504032h.
Після виконання команди, регістр EAX буде містити значення 725E7A25h,
тобто дані з пам’яті 72h 5Eh, 7Ah, 25h. Дані у пам’яті зберігаються у
зворотньому вигляді відповідно до правилу «молодший байт до
молодшого адресу», тому в EAX буде занесено саме значення 725E7A25h,
а не 257A5E27h.
Якщо у команді не вказувати квадратні дужки, то в EAX буде просто
занесено значення 00504032h.
В команді mov також можна використовувати регістр як комірку пам’яті,
якщо використати квадратні дужки:

Команда MOV не змінює жодні флаги.


Часто у програмах необхідно переставляти місцями якісь дві величини,
для такого існує спеціальна команда
XCHG операнд1, операнд2
Приклади:

Оператор PTR. За допомогою оператору PTR можна уточнити тип


змінної.
Цей оператор має наступний синтаксис:
тип PTR вираз

Тип може бути представлений ім’ям або значенням з наступної таблиці:

Способи адресації.
1. Безпосередня адресація.
Операнд вказується безпосередньо у полі команди, наприклад:
mov ax, 312 ; 312 задається безпосередньо
2. Регістрова адресація.
Операнд знаходиться в одному з регістрів. Наприклад, обидва операнди у
команді
mov ds, dx
задаються за допомогою регістрового способу адресації.
3. Непряма адресація.
Адрес операнду знаходиться в одному з регістрів – SI, DI, BX, BP.
Наприклад, команда
mov ax, [si]
поміщує у регістр AX слово з комірки пам’яті, зміщення якої вказано у
регістрі SI. Другий операнд заданий за допомогою непрямої адресації. У
сучасних поколіннях процесорів для використання непрямої адресації
можна також використовувати регістри EAX, EBX, ECX, EDX, ESI, EBP
та ESP.
4. Пряма адресація.
Абсолютний адрес операнду можна задати у вигляді
СЕГМЕНТ:ЗМІЩЕННЯ, де СЕГМЕНТ – адрес сегменту на який вказує
якийь сегментний регістр (CS, DS, SS або ES), а ЗМІЩЕННЯ – адрес
операнду відносно сегментного регістру (відносна адреса)
Приклади:

5. Базова адресація
Адрес операнду формується складанням вмісту базового регістру (BP або
BX) та зміщенням. Якщо зміщення не задано, то розуміється нульове
значення зміщення.
Якщо використовується BP, то адрес відповідного операнду
відраховується відносно сегменту, на який вказує регістр SS.
Якщо використовується BX, то адрес відраховується відносно сегменту, на
який вказує регістр DS.
Наприклад, команда:
поміщує у регістр AX слово, яке знаходиться у сегменті, вказаному в DS,
зі зміщенням на два більше, ніж число з BX.
Базова адресація має багато альтернативних форм. Таким чином,
еквівалентними формами є:

6. Індексна адресація
Цей метод адресації схожий на попередній, тільки адрес операнду
формується складанням вмістимого індексного регістру (SI або DI) та
зміщення.
У індексній адресації можна використовувати множник 1, 2,4, або 8 щоб
прочитати елемент рівний відповідно – байту, слову, подвійному слову,
або четвірному слову. Це називається масштабуванням індексного
регістру.
Приклади:

7. Базова-індексна адресація.
Адрес операнду формується складанням вмістимого базового регістру (BP
або BX) та індексного регістру (SI або DI), зі зміщенням, якщо воно
вказано.
Якщо використовується регістр BP, то адрес відраховується відносно
сегменту, на який вказує регістр SS. В іншому випадку цей адрес
відраховується відносно сегменту, на який вказує регістр DS.
Приклади:
8. Адресація за базою з індексацією та масштабуванням.
Це загальна схема адресації, в яку входять всі випадки, які були розглянуті
попередньо як частні. Адрес формується як сума зміщення, бази та
індексу, причому сума може бути скорегована за допомогою масштабного
множника:
Практична частина
Після теоретичного ознайомлення зі способами адресації в асемблері,
наведемо живі приклади використання деяких методів адресації.
Задамо масив даних:

1. Безпосередня адресація

2. Регістрова адресація

3. Неявна адресація

4. Індексна адресація

Перейдемо до основного завдання. Необхідно обчислити середнє


арифметичне елементів заданого масиву.
Будемо використовувати CALL. Задамо вхідний масив та його розмір
Очистимо необхідні нам регістри та помістимо у регістр CX розмір
масиву:

Далі, рахуємо суму всіх значень масиву:

І ділимо на кількість елементів в ньому:

Отримаємо наступний результат:


Демонстраційна програма:
Висновки
Виконуючи лабораторну роботу №4, було вивчено різни методи адресації
процесорів архітектури х86.
Було досліджено та визначено склад та призначення засобів обчислення
адресу. Розібрано всі відомі види адресації та їх програмна реалізація.
Практично було розглянуто декілька видів адресації та побудовано
демонстраційну програму для знаходження середнього арифметичного
заданого масиву значень.

You might also like