Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M1_1spLm.doc
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
244.74 Кб
Скачать

Розрахунки логічних і фізичних адрес даних в пам'яті

На етапі трансляції:

  • з мови асемблера при використанні даних з операторів assume при неявному визначенні елементів адрес;

  • з вставок на мові асемблера до програм, складених на мовах високого рівня у відповідності з угодою організації та використання окремих сегментів та блоків даних.

На етапі виконання:

  • в реальному режимі - з адрес занесених в сегменті регістри;

  • в захищеному режимі з побайтним доступом для сегментів - з дескрипторів сегментів, номери яких розміщені в сегментних регістрах вибирається початкова адреса сегмента, до якої додається зміщення логічної або фізичної адреси даних;

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

Сег­мент­ні регістри ко­ду CS (Code Segment), даних DS (Data Segment), до­дат­ко­вий сегментний регістр дан­их ES (Extra Segment), сте­ка SS (stack segment). В процесорах, почи­наючи з 80386, з’явились ще два додаткових сегментних регістри для доступу до даних FS і GS використовуються як додаткові (букви “F” і “G” взяті для назв як наступні в латинському алфавіті за E - Extra). Ці регістри використовуються в реальному режимі для одержання 20-бі­то­вих вико­навчих ад­ре­с ГП для ЦП 8086, 8088, 80186, ре­аль­но­го режиму 80286, а також 32-бі­то­вих вико­навчи­х ад­ре­с ре­аль­но­го режиму 80386 і 80486 у відп­о­відно­сті з наведеною нижче ілюстративною схемою або формулою [xS]*16+від­но­с­на ад­реса:

Рис. 1.2. Розрахунок виконавчої адреси в захищеному режимі

В формулі xS – це узагальнений сегментний регістр, а [xS] – його вміст, що являє собою сегментну адресу. Відно­сна ад­реса в реальному режимі визначається як сума з в­містом ба­зо­во­го та індексного регістрів за мо­ду­лем, що дорівнює значенню граничного зміщення. Повне зміщення в свою чергу визначається прямою адресою або сумою 16- або 32-розрядних [*3] індексних і базових регістрів зі зміщенням (displacement – в скорочених позначення тексту книги d8, d16 і d32 [*3]), ука­зан­им в команді. Перенос за старший розряд повного зміщення ігнорується, і діюча адреса не мо­же вийти за межі 64 Кбай­тів сег­мен­та. А довга виконавча адреса мо­же сформуватися тільки в удосконалених мо­де­лях процесорів [*3] за рахунок переносу в розряди сег­мент­ної адреси і використання 32-разрядної відно­с­ної адреси. Од­на­к слід відзначити, що реальний режим з розширеною адресацією практично не можливо застосувати через обмеження розміру сегментів реального режиму розміром в 64 Кбай­ти, що мо­же бути подолано тільки в процесорах фірми AMD, сумісних з Pentium.

15 0

Селектор в сегментному регістрі

xS

i i i i i i i i i i i i i l p p

&

1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0

Адреса однієї з таблиць дескрипторів LDTR при l=1 або GDTR при l=0

31

0

+

a a … a a a a a a a a a a a a a a a a a

Копія дескриптора розміщається в тіньовому регістрі регістра сегмента

=

Адреса дескриптора сегмента

До таблиці дескрипторів в пам’яті

63

48

47 40

39 32

База сегмента (31..24)

G D x U Межа (19..16)

p d d s t t t A

База сегмента (23..16)

31

16

15

0

База сегмента (15..0)

Межа сегмента (15..0)

Рис. 1.3. Доступ до дескриптора сегмента

В захищеному режимі сегментна адреса обирається з дескрипторів як вміст полів, позначених на рис. 1.3 як “База” і “База сегмента”. Відносна адреса визначається аналогічно реальному режиму, але з використанням більш різноманітних формул, які розглядатимуться при вивченні машинних команд. Крім того, дескриптор зберігає границю сегмента, яка провіряється при виконанні команди. Інші розряди носять управляючий характер і розглядаються при вивченні захищеного режиму.

Розмір даних і кількість наступних байтів команди визначається конкретним ко­дом операції і наявністю в команді фіксованих байтів префіксів переключення розрядності даних і адресації. Тут буквами o позначені біти коду операції; d – напрямок пересилки результату, який звичайно обирається транслятором; w – формат даних (“0” – байт, “1” – сло­во або подвійне сло­во); mod – модифікація операндів; r/m – регістр або покажчик типа операнда. В машинній формі після основної частини команди з покажчиками модифікацій адреси в пам’яті мо­же розміщуватися: двобайтна адреса для прямої адресації, однобайтне d8 або двобайтне d16 зміщення, од­но- або двобайтні безпосередні дані i8 або i16; двобайтне зміщення і двобайтна сегментна адреса для прямої між­сег­мент­ної адресації. Довжина команд ЦП без префіксів може досягати шес­ти байтів. Деякі групи команд мають до­даткові скорочені формати, які обробляються де­що швидше. Якщо на код операції і режим адресації виділено два байти, то другий байт зберігає по­ля mod і r/m, а також біт w, ­стан яких визначає різні режими адресації і призначення сегментних регістрів за умовчанням. До­пус­ти­мі варіанти 16-бі­то­вих адрес процесорів iх86 наведені в таблиці 2.1 [25] з явним визначенням сегментних регістрів, що використовуються за умовчанням, і кількості додаткових циклів, що витрачаються на адресацію в процесорі 8086.

Таблиця 1.1

r/m

mod=00

Дц

mod=01/10

дц

mod=11

w=0

mod=11

w=1

000

DS:[BX][SI]

7

DS:/d8/d16[BX][SI]

11

AL

AX

001

DS:[BX][DI]

7

DS:/d8/d16[BX][DI]

11

CL

CX

010

SS:[BP][SI]

8

SS:/d8/d16[BP][SI]

12

DL

DX

011

SS:[BP][DI]

8

SS:/d8/d16[BP][DI]

12

BL

BX

100

DS:[SI]

5

DS:/d8/d16[SI]

9

AH

SP

101

DS:[DI]

5

DS:/d8/d16[DI]

9

CH

BP

110

DS:d16

6

SS:/d8/d16[BP]

9

DH

SI

111

DS:[BX]

5

DS:/d8/d16[BX]

9

BH

DI

В таблиці [регістр] – означає вміст указаного регістра, який додається при формуванні вико­навчої адреси в межах 64 Кбай­тів використано­го сегмента, а ім’я сег­мент­но­го регістра визначає використання сег­мент­но­го регістра за умовчанням. До­даткові цик­ли звертання до пам’яті (дц) наведені для процесорів Intel-8086/88. В 32-бі­то­вих процесорах при визначенні префікса 32-бі­то­вих даних замість двобайтних регістрів використовуються чотирибайтні регістри з додатковою початковою буквою E.

Транслятор з мови Асемблера автоматично контролює допустимість операнда і генерує ко­ди, включаючи префікси, у відпо­відно­сті с заданою моделлю і режимом роботи процесора для будь-яко­го операнда, що указує на пам’ять і заданого в узагальненій стандартній формі:

Ім’я_об­лaс­ті_пам’яті_зі_змі­ще­нням [ім’я_pе­гіст­pa_бa­зи]

[ім’я_pе­гі­ст­pa_ін­дек­сa * коефіцієнт ]

В цьому запису мо­же бути опу­ще­но будь-який з трьох елементів або коефіцієнт. 32-paз­pяд­на ефек­тив­на адреса формується у відп­о­відно­сті з табл. 1.2 і 1.3.

Таблиця 1.2

Префікс 66h для переключення адрес до 16-бітового режиму

r/m

Mod=00

mod=01/10

mod =11; w=0, w=1

000

DS:[EAX]

DS:d8/d32[EAX]

AL EAX

001

DS:[ECX]

DS:d8/d32[ECX]

CL ECX

010

DS:[EDX]

DS:d8/d32[EDX]

DL EDX

011

DS:[EBX]

DS:d8/d32[EBX]

BL EBX

100

Управління байтом SIB (табл. 2.3)

AH ESP

101

DS:d32

SS:d8/d32[EBP]

CH EBP

110

DS:[ESI]

DS:d8/d32[ESI]

DH ESI

111

DS:[EDI]

DS:d8/d32[EDI]

BH EDI

Формат байта SIB:

S = s s – масштаб scale:

00  [i i i] * 1

01  [i i i] * 2

10  [i i i] * 4

11  [i i i] * 8

S = s s

I = i i i

b b b

I = i i i – індексний регістр index

b b b – базовий регістр base

Якщо по­ле r/m пост-байта має двійкове значення 100, то використову­єть­ся байт SIB і формування 32-бітово­ї ефек­тив­ної адреси визначається в Табл. 1.3.

Таблиця 1.3

Префікс 66h для переключення адрес до 16-бітового режиму

base

Mod=00

mod=01/10

mod =11; w=0, w=1

000

DS:[EAX+I*S]

DS:d8/d32[EAX+I*S]

AL AX EAX

001

DS:[ECX+I*S]

DS:d8/d32[ECX+I*S]

CL CX ECX

010

DS:[EDX+I*S]

DS:d8/d32[EDX+I*S]

DL DX EDX

011

DS:[EBX+I*S]

DS:d8/d32[EBX+I*S]

BL BX EBX

100

SS:[ESP+I*S]

SS:d8/d32[ESP+I*S]

AH SP ESP

101

DS:[d32+I*S]

SS:d8/d32[EBP+I*S]

CH BP EBP

110

DS:[ESI+I*S]

DS:d8/d32[ESI+I*S]

DH SI ESI

111

DS:[EDI+I*S]

DS:d8/d32[EDI+I*S]

BH DI EDI

Завдання на самостійну роботу: повторити матеріал лекції; вивчити основні поняття.

/ В.І.Пустоваров /

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]