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

3. Особливості архітектури і адресації даних в різних режимах роботи процесорів

Апаратура ти­пово­го ВК на базі процесорів ix86 (як між іншим і на основі будь-якого іншого процесора) с точ­ки зору програміста на Асемблері складається з центрального процесора (ЦП), що включає команди арифметики з плаваючою точкою, головної пам’яті (ГП), підсистеми введення-виведення. Та­кі складові час­тини обла­днан­ня як внутрішні робочі регістри, кеш-пам’ять, бу­фе­ри, схе­ми синхронізації, внутрішня і сис­тем­на ши­ни, а так­ож прист­рої управління ними, як і їх кон­ст­рук­тив­на побудова залишаються недоступними або непомітними для програміста на Асемблері. Сукупність всіх програмно доступних апаратних засобів процесора прийнято називати архітектурою. Архітектура визначається форматами даних, що обробляються операційним блоком, і представленнями адресної інформації. При опи­сі архітектури ба­зо­во­го процесора бу­демо використовувати позначення, стандартизован­і в мові Асемб­лера, виділяючи їх велики­ми латинськими бу­к­ва­ми, а позначення, що використовуються тільки в описовому плані – маленьки­ми. Відзначимо, що для більшості трансляторів з мови Асемблера різниця між великими і маленькими буквами неістотна. Для ме­тапо­зна­че­нь, які заміщаються в програмі конкретним текстом, бу­демо використовувати кур­сив.

Ад­ре­совані дані мінімального роз­міру ба­зо­во­го ЦП сімейства Pentium займають один байт (BYTE), який складаєть­ся з вось­ми бі­тів або двійкових розрядів даних. Більш склад­ні дані ГП і арифметичного пристрою з плаваючою точкою FPU ма­ють та­кі на­зви і символічні позначення типів: сло­во (WORD) – два бай­та для зберігання цілих чи­сел і час­тин ад­ре­си: сег­мен­та і зміщення; подвійне сло­во (DWORD) – чотири бай­та для зберіга­н­ня цілих і дійсних чи­сел і повних ад­ре­с пам’яті; 8-байт­ні (QWORD) і 10-байт­ні (TBYTE) дані для цілих і дійсних чи­сел, причому опе­ра­ції над дани­ми двох останніх груп типів використовуються в основному в FPU. Всі ба­гато­байт­ні дан­і і аналогічні елементи ко­манд зберігаються в пам’яті так, що бай­ти з молодшими розрядами розміщаються за мен­шими ад­ре­сами, то­му байти в машинному форматі представляються в зворотній послідовності відно­с­но тра­ди­цій­ного запису даних в позиційних системах числення. Такий спосіб подання надавав деякі переваги в процесорах малої розрядності і був успадкований в процесорах сімейства Pentium.

Архітектура базових процесорів сімейства Pentium і сумісних комп’ютерів показана на рис. 1.2. В 16-бі­то­вому режимі процесори сімейства Pentium включають регістр пра­порців ­ста­ну f, пока­жчик адреси поточної команди ip, дві групи 16-роз­ряд­них регістрів, скорочено пойменованих англійською мовою у відповідності з їх призначенням. Регістри загально­го призначення AX, BX, CX, DX, а також ба­зо­ві і індексні регістри BP, SP, SI і DI, які зберігають опе­ран­ди і результати операцій і можуть використовуватися для прискореного виконання окремих специфічних функцій. Так, регістр AX розглядається як акумулятор (Accumu­la­tor), куди зручно поміщати результати операцій, регістр ВХ використовується як базовий при обчис­ле­нні ад­ре­са (Base), CX – як лічильник (Counter) в спеціальних ко­ман­дах, а DX – мо­же включати старші розряди вхідних ариф­ме­ти­чних дан­их (Data) і результатів де­яких операцій і включають ад­ресу пор­ту введення-ви­ве­ден­ня.

Зміщення в сегменті стану

Мнемоніка 32-бітових розширень

32 16

Мнемоніки та номери 16-бітових регістрів 15 0

Призначення або назва регістра

20h/0Eh

EIP 

IP

Покажчик команд

24h/10h

EFLAGS 

FLAGS

Регістр прапорців

28h/12h

EAX {0} 

AH{4} AX{0} AL{0}

Акумулятор

2Сh/14h

ECX {1} 

CH{5} CX{1} CL{1}

Лічильник

30h/16h

EDX {2} 

DH{6} DX{2} DL{2}

Регістр даних

34h/18h

EBX {3} 

BH{7} BX{3} BL{3}

Регістр бази

38h/1Ah

ESP {4} 

SP{4}

Покажчик стека

3Сh/1Ch

EBP {5} 

BP{5}

Покажчик бази в стеку

40h/1Eh

ESI {6} 

SI{6}

Індекс джерела

44h/29h

EDI {7} 

DI{7}

Індекс приймача

48h/22h

0

ES{0}

Додаткових даних

4Сh/24h

0

CS{1}

Сегмент кодів

50h/26h

0

SS{2}

Сегмент стека

54h/28h

0

DS{3}

Сегмент даних

58h

0

FS

Додаткові

5Сh

0

GS

сегменти даних

60h/2Ah

0

LDTR

Регістр локальної таблиці дескрипторів

64h

T 0

Двійковий блок

Карта дозволу введення-виведення

Рис. 1.2. Збереження програмно-доступних регістрів задачі в сегменті стану TSS

В 32-бі­то­вому режимі замість них використовуються аналогічні імена регістрів з попередньою буквою E (Extended) EAX, EBX, ECX, EDX, EBP, ESP, ESI і EDI, з цих регістрів тільки ESP не мо­же використовуватися як індексний або базовий. Можна окремо звертатися до їх стар­ших і молодших бай­тів пер­ших чотирьох регістрів, на­зван­их AH, BH, CH, DH (High) і AL, BL, CL, DL (Low), відп­о­від­но. Інші чотири регістри доцільно використовувати для зберігання ад­ре­с або покажчиків: SP (Stack Pointer) – як покажчик вер­хів­ки сте­ка; BP (Base Pointer) – базовий пока­жчик при ро­бо­ті зі сте­ком за непрямою ад­ре­сою; SI (Source Index) і DI (Destination Index) – індексні регістри джерела і при­йм­ача інформації, які використовуються для визначення ба­зи і індексу при непрямій і індексній ад­ре­са­ціях. Останні регістри найбільш ефективні в ко­ман­дах операцій над ряд­ками.

Ад­рес­ний простір раннього процесора 8086 і реальних режимів удосконалених процесорів утворюєть­ся в ви­гляді сегментів розміром до 64 Кбай­тів. Дос­туп к бай­ту або сло­ву в пам’яті ­мо­жливий, якщо ад­ре­со­ван­ий елемент знаходиться в межах од­но­го з чотирьох (в процесорах Pentium – шес­ти) поточних сегментів, ад­ре­сованих сегментними регістрами. Кожний байт в ме­жах сег­мен­та адресується за допо­мо­гою шістнадцяти бітів відносної ад­ре­си (зміщення). За загальним правилом для процесорів сімейства Pentium в двобайтному слові за меншою адресою розміщується молодший байт, а за більшою – стар­ший. Сло­во адресується че­рез пока­жчик на ад­ресу молодшого бай­та. Для визначення сег­мен­та, в якому знаходяться дані, використовується 16-бітова сег­мент­на ад­реса, яка розміщується в одному з сегментних регістрів.

Кожний байт пам’яті має фізичну і відпо­відну йому логічну ад­ресу. По­чаткова фізична ад­реса сег­мен­та реального режиму визначається як сег­мент­на ад­реса, помножена на 16, а фізична ад­реса бай­та в сегменті визначається як сума по­чатково­ї фізичної ад­ре­си сег­мен­та і зміщення дан­о­го бай­та відно­с­но поча­тку сег­мен­та.

Та­ким чином, фізична, ефективна або виконавча ад­реса в реальному режимі процесорів сімейства Pentium представляється 20-роз­ряд­ним двійковим чис­лом і використовується для читання і за­пи­су інформації в пам’яті. Од­на­к в машинній про­грамі указуються не фізичні, а більш ко­рот­кі час­тини логічних ад­ре­с в се­редині ­сег­мент­а, які забезпечують гнучку адресацію. Логічна ад­реса складається з покажчика на сегментний регістр і зміщення (OFFSET) в се­редині сег­мен­та.

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