Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Регістри процесора 8086.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
135.17 Кб
Скачать

Сегментація пам'яті

Для представлення значення адреси використовується 20 біт

220 = 1048576 доступ до 1 Мбайт пам'яті

Незалежно від того, скільки пам'яті може адресувати процесор або скільки мікросхем пам'яті встановлено в комп'ютері, найменшим блоком пам'яті є 8-бітовий байт.

Кожен байт має своє унікальне місцеположення, зване фізичною адресою, по якій програми можуть читати і записувати інформацію.

Якщо в комп'ютері 64Кбайт пам'яті, то для завдання адреси достатнє 16 біт -

216 -1 = 65535 доступ до 64 Кбайт пам'яті

У процесорах 8086 використовує 16 регістрів для адресації пам'яті.

-Яким чином процесор 8086 може мати доступ до всього мегабайта пам'яті?

Використовується метод сегментації пам'яті - розділення великого адресного простору пам'яті на логічних 64 Кбайт фрагменти.

Адреса конкретного байта може бути виражений двома значеннями (логічною адресою):

адреса фрагмента (сегменту) + 16-бітовий зсув від початку сегменту

16-бітовий сегментний регістр

Сегментне значення указує на ту область адреси, яка кратна 16, тобто адреса закінчується 0000. Ці адреси називаються межами параграфа (сегментними параграфами)

0 0 0 0

фіктивні біти

16-бітовий регістр зсуву

Зсув щодо межі параграфа

В результаті отримаємо

20-битова адреса

Адреса виходить таким чином:

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

220 = 1048576 доступ до 1 Мбайт пам'яті

Як регістри зсуви можуть бути використані AX, BX, SI, DI.

Параграфи, сегменти і зсуви

Для визначення початку сегментів пам'яті процесора 8086 використовуються чотири 16-бітові сегментні регістри.

Межі сегментів розташовуються через кожних 16 байт фізичних адрес.

Кожен з цих 16-байтових фрагментів називається параграфом.

На малюнку показано, що кожна точка пам'яті має фізичну адресу і логічний, виражений через зсув від початку сегменту.

Нижня пам'ять

Логічні адреси

Фізичні адреси

0

1

2

3

Сегмент

0

1

2

3

0

1

2

3

Сегмент

4

5

6

7

0

1

2

3

Сегмент

8

9

10

11

0

1

2

3

Сегмент

12

13

14

15

Верхня пам'ять

1048576 : 16 = 65536 - максимальна кількість параграфів для 1 Мбайта

  • Сегменти фізично не виділені в пам'яті. Сегмент - це логічні вікна, через які програми проглядають області пам'яті по 64 Кбайт.

  • Початкове положення сегменту (логічна адреса) визначається програмістом і може мати будь-яке значення від 0000 до FFFF в шістнадцятковому уявленні. Кожне логічне значення сегменту (0, 1, 2 . . ., 65535) відповідає фізичній межі параграфа (0, 16, 32..., 1048560).

  • Розміри сегментів можуть змінюватися від 16 байт до 64 Кбайт.

  • Сегменти не обов'язково розташовуються фізично в пам'яті один за іншим.

  • Сегменти можуть перекриватися один іншим, тому один і той же байт пам'яті може мати різні логічні адреси. Але, не дивлячись на це, кожен байт має тільки єдину 20-бітову фізичну адресу.

Приклад

Логічна адреса задана парою сегмент-зсув:

а) перша логічна адреса 0000:0010

б) друга логічна адреса 0001:0000

а) фізична адреса (0000 х 16) + 16 =16

б) фізична адреса (0001 х 16) + 0 = 16

Пара сегмент і зсув зазвичай записуються через двокрапку шістнадцятковими числами: 40A7 : 55FC

Запис якого-небудь числа в сегментний регістр (наприклад, 1000h) означає:

заданий сегмент розміром в 64 Кбайт (адреси з 1000 : 0000 до 1000 : FFFF).

Звернення до пам'яті завжди відбувається за допомогою пари регістрів.

Запис [ BX ] означає DS : [ BX ]

Увага

Сегментні регістри змінювати безпосередньо не можна.

Для зміни їх спочатку копіюють в регістри загального призначення, змінюють там, і значення, що вийшло, копіюється в сегментний регістр.