Організація 16-розрядних мікропроцесорів

 

Вхідний контроль:

1 Як операційна система ПК розміщує коди виконуваної програми в пам’яті?

2 Як у МПС з фоннейманівською архітектурою МП можна розрізняти, чи є код у пам’яті кодом команд, чи кодом даних?

 

Класичною реалізацією фоннейманівської архітектури є адресування пам’яті за плоскою моделлю, коли вся пам’ять є єдиною лінійною послідовністю байтів. У цій пам’яті зберігаються і дані, і коди програм. Відповідальність за коректне використання пам’яті цілком покладається на прикладного програміста, який повинен забезпечувати цілісність кодів та даних: дані не повинні зіпсувати коди, а стек – перекритися з областю кодів. У багатозадачному режимі, коли кільком десяткам задач надається можливість по черзі виконуватись на віртуальній машині, розподілом ресурсів займається операційна система. Віртуальна (надавана) машина складається з віртуального процесора, віртуальної пам’яті та віртуальної підсистеми введення-виведення. Найбільш незахищеною у багатозадачному режимі є пам’ять. Першим кроком до її захисту було створення у МП І8086, який випускався з 1978 р., моделі пам’яті реального режиму. Ця модель пам’яті організовувала пам’ять у вигляді сегментів коду, стека та даних, які мали різне призначення і різні права доступу. Ця модель була вимушеною і використовувалась з метою можливості адресування обсягу пам’яті 1 Мбайт за допомогою 16-розрядних регістрів, в яких формується адреса комірок пам’яті. Таку модель до цього часу використовують додатки, написані для операційних систем реального режиму типу MS DOS. МП І8086 створювався як призначений для роботи у багатопроцесорних системах з розподіленою пам’яттю та у складі персональних комп’ютерів, тобто вже під керуванням операційної системи.

Для зазначення початку сегмента використовуються спеціальні сегментні регістри: у 16-розрядних МП – CS, DS, SS,ES.

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

Для визначення фізичної адреси адресованої комірки пам’яті у межах 220 адресного простору вміст сегментних регістрів помножується на 4 (зсувається вліво на 4 двійкових розряди) і до нього додається значення зміщення адреси комірки від початку сегмента.

Сегментування пам’яті визначило архітектуру і програмні моделі мікропроцесорів фірми Intel.

Структурна схема МП І8086 наведена на рис. 7.11.

 

 


Рисунок 7.11 – Структурна схема МП І8086

 

 

За функціональним призначенням вузли схеми можна розбити на операційний пристрій, пристрій спряження з шиною та керувальний пристрій. В операційному пристрої виконуються обчислення, пов’язані з виконанням команд з оброблення даних; у пристрої з’єднання з шиною – обчислення, які забезпечують формування адрес команд та операндів, виклик команд та їх зберігання до початку виконання; керувальний пристрій, який дешифрує коди команд та генерує керувальні сигнали та сигнали синхронізації для МП та МПС. До операційного пристрою входять арифметично-логічний пристрій з регістрами тимчасового збереження і регістром ознак, блока регістрів загального призначення, який складається з чотирьох 16-розрядних регістрів загального призначення AX, BX, CX, DX, кожний з них може використовуватись як два 8-розрядних, регістрів-вказівників SР, ВР та індексних регістрів SI, DI, які використовуються при формуванні адрес.

Пристрій з’єднання з шиною складається з шестибайтової регістрової пам’яті, яка називається чергою команд, сегментних регістрів CS, DS, SS, ES та вказівника команд ІР (Instruction Pointer), суматора та логіки керування шиною.

Черга команд працює за принципом FIFO (First Input – First Output, перший увійшов – перший вийшов). У черзі команд можуть накопичуватись послідовні байти команд обсягом до 6 байт. Це дозволяє подавати команди з випередженням з черги в операційний пристрій, де вони виконуються, і дає можливість сумістити за часом виконання процеси, пов’язані з вибиранням команд із пам’яті, і процеси, пов’язані з їх виконанням. Черга команд називається також конвеєром команд.

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

Суматор бере участь у формуванні виконавчої адреси (Executive Address) операндів, які розміщуються у пам’яті, та фізичної адреси операндів і команд.

Процесор має мультиплексовану двоспрямовану 16-розрядну шину даних/адреси AD15...AD0, яка використовується у мінімальному, однопроцесорному режимі. У максимальному режимі при роботі у складі багатопроцесорних систем МП може адресувати 1 Мбайт пам’яті за рахунок додаткових чотирьох ліній адреси/стану A19/S6…A16/S3.

Мікропроцесор І8086 (російський аналог К1810ВМ86) є розвитком МП І8080, їхня архітектура подібна. Програмно-доступні вузли і система команд І8080 є підмножиною вузлів і системи команд МП І8086. Хоча програми, написані машинною мовою І8080, не можуть виконуватись безпосередньо на МП І8086, але можна говорити про сумісність МП фірми Intel знизу уверх; програми достатньо просто переводяться з мови Асемблера І8080 на мову Асемблера І8086 за допомогою їхньої повторної трансляції.

МП І80186 є наступною моделлю МП з архітектурою І8086 і має додатково логічний блок вибирання мікросхеми, два незалежних швидкісних канали ПДП, три програмованих таймери, програмований контролер переривань та вбудований генератор тактових імпульсів. Система команд порівняно з МП І8086 є розширеною і вміщує всі команди попередніх моделей, починаючи з І8080.

У 1983 р. фірма Intel випустила МП І80286, який став основою для розробки ПК ІВМ РС/АТ. МП І80286 може працювати у двох режимах: реальному та віртуальному. У реальному режимі МП І80286 функціонує як МП І8086 з підвищеною швидкодією. У віртуальному режимі фізична адреса комірки пам’яті знаходиться за допомогою таблиць, які індексуються за допомогою сегментних регістрів, тобто реалізується так званий захищений режим роботи МП, який розглядається у підрозділі 7.2.5. При включенні у МП І80286 установлюється реальний режим, ініціалізуються різні регістри і прапорці і виконується команда завантаження слова стану процесора, в якому установлено біт дозволу захисту. Після переходу у віртуальний режим повернути його до реального режиму можна тільки апаратним сигналом скидання.

МП І80286 забезпечує засоби захисту різних областей пам’яті при роботі у віртуальному режимі за рахунок наявності рівнів привілеїв виконуваних сегментів кодів. Якщо рівень виконуваної програми є менший за рівень, який надано сегменту, МП відключає засоби захисту.

МП І80286 адресує до 2 Мбайт реальної пам’яті та 4 Гбайт віртуальної. Система команд вміщує всі команди більш ранніх моделей та кілька нових команд, пов’язаних з реалізацією реального та віртуального режимів.

МП І80286 припускає спряження з співпроцесором І80287, призначеним для виконання операцій з плаваючою точкою. Обидві мікросхеми можуть виконувати команди одночасно.

МП І80286 підтримує багатозадачний режим шляхом перемикання з однієї виконуваної задачі на іншу. МП створює для кожної задачі сегмент пам’яті, який вміщує всю інформацію, небхідну для запуску та зупину задачі (сегмент стану задачі). Основне його призначення – збереження вмісту регістрів задачі на той час, коли задача не виконується.

 

Контрольні питання:

1 З якою метою у 16-розрядних процесорах фірми Intel реалізується сегментування пам’яті?

2 Яку роль у структурній схемі МП І8086 (К1810) відіграє пристрій спряження з шиною?

3 Які операції виконує АЛП у складі МП І8086?

4 Які прапорці виставляє АЛП І8086?

 

Контрольні питання підвищеної складності:

1 З якою метою МП І8086 має мультиплексовану двоспрямовану шину даних/адреси?

2 Як, на Ваш погляд, можна зберегти цілісність даних, не сегментуючи пам’ять?


 

Програмна модель МП І8086

 

Вхідний контроль:

1 Які вузли МП входять до програмної моделі МП?

2 З якою метою кожний регістр МП І8086 має своє функціональне призначення?

 

Програмна модель МП І8086 показана на рис. 7.12.

 

 
 

 


Рисунок 7.12 – Програмна модель МП І8086

 

Регістри загального призначення (РЗП) AX, BX, CX, DX допускають окреме використання їх молодших байтів AL, BL, CL, DL і старших байтів AН, BН, CН, DН. Тим самим забезпечується можливість операцій з байтами та словами і створюються умови для програмної сумісності МП І8086 та МП І8080.

Решта регістрів є неділимою, вони оперують 16-бітовими словами навіть у разі використання тільки їх молодшого або старшого байтів. Регістри-вказівники SP і BP та індексні регістри SI та DI зберігають зміщення адреси у межах поточного сегмента пам’яті.

Регістри загального призначення, або регістри даних, призначені для тимчасового зберігання змінних або проміжних результатів:

АХ – регістр-акумулятор – є регістр, в якому зберігається один із операндів перед деякими операціями, що виконуються в АЛП, та куди передається результат операції;

ВХ – базовий регістр, який може використовуватися для формування базової адреси будь-яких змінних у пам’яті;

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

СХ – регістр-лічильник; у командах організації циклів за умовчанням використовується як лічильник циклів.

Група індексних регістрів та вказівників, яку утворюють регістри:

ВР – вказівник бази;

SI – регістр індексу джерела;

DI – регістр індексу приймача;

SP – вказівник стека;

IP – вказівник команд.

Регістри ВР, SI, DI використовуються при формуванні адрес змінних або для зберігання проміжних даних або результатів.

Індексні регістри SI і DI у режимі автоінкрементування та автодекрементування використовуються, здебільшого, для адресування елементів масивів. Вони можуть використовуватись також для зберігання проміжних результатів.

Вказівник стека SP адресує вершину стека, особливо організованої області (сегмента) пам‘яті.

Регістри сегментів CS, SS, DS, ES використовуються для збереження інформації про початкові адреси сегментів пам‘яті:

CS – регістр сегмента команд;

SS – регістр сегмента стека;

DS – регістр сегмента даних;

ES – регістр додаткового сегмента даних.

Регістр CS разом з регістром вказівника команд ІР використовується для обчислення адреси наступної виконуваної команди.

Регістр SS разом з вказівником стека SP використовується для визначення адрес у сегменті стека. При роботі з підпрограмами адреси стекової пам’яті формуються з використанням регістра SS та вказівника бази BP.

Регістр DS визначає область пам’яті, де зберігаються змінні, що використовуються у програмі. Адреси цих змінних визначаються з використанням регістрів BX, SI, DI.

Регістр ES адресує сегмент пам’яті під час операцій з рядками.

Довжина сегментних регістрів становить 16 розрядів, тому операції з сегментними регістрами є операціями зі словами, які називаються селекторами.

Регістр вказівника (лічильника) команд ІР, призначений для адресування в середині поточного сегмента коду. Вказівник команди прямо у командах не вказується, але бере участь в усіх командах передавання управління (умовних та безумовних переходів, виклику підпрограм, повернення з підпрограм тощо). У програміста немає можливості безпосередньо змінювати вміст регістра ІР.

Регістр прапорців FLAGS зберігає інформацію про ознаки результату.

АЛП призначений для виконання арифметичних та логічних операцій над 16-розрядними або 8-розрядними числами.

Регістр прапорців FLAGS вміщує 16 бітів, але не всі з них зайняті ознаками результату. AЛП виставляє 9 прапорців:

CF(0) – прапорець перенесення, дорівнює 1, коли результат операції виходить за межі розрядної сітки;

PF(2) – прапорець парності кількості одиничних бітів у молодшому байті результату, установлюється в 1, коли кількість одиничних бітів парна;

AF(4) – прапорець додаткового перенесення, установлюється в 1, коли є перенесення або позика для третього біта результату;

ZF(6) – прапорець нульового результату, установлюється в 1, коли результат операції дорівнює 0;

SF(7) – прапорець знака, дублює стан найстаршого біта результату, при роботі з числами зі знаками SF визначає знак числа – для додатних чисел SF = 0, для від’ємних S = 1;

TF(8) – прапорець трасування, що використовується при налагодженні програм у покроковому режимі, в який переводиться МП при TF = 1;

IF(9) – прапорець переривань, якщо IF = 1, переривання дозволені;

DF(10) – прапорець напряму, використовується у командах роботи з рядками, якщо DF = 0, вміст регістрів SI та DI збільшується і рядок обробляється зліва направо, при DF = 1 – навпаки;

OF(11) – прапорець переповнення, OF = 1 установлюється при перебільшенні результату операції над числами зі знаком допустимого діапазону.

Первісне завантаження регістрів загального призначення АХ, ВХ, СХ, DX та їхніх частин, а також вказівників та індексних регістрів SP, BP, SI, DI можливе за допомогою безпосереднього адресування. Завантаження сегментних регістрів SS, DS, ES може реалізуватися через акумулятор АХ. Регістр командного сегмента CS є програмно недоступний і завантажується системою програмування, наприклад, TASM.

Приклади завантаження регістрів:

  MOV AX,1234H ; ; Завантаження 16-розрядного регістра АХ числом 1234Н
  MOV AX,1234H ; ; Завантаження 16-розрядного акумулятора числом 1234Н
  MOV AH,34H ; ; Завантаження старших восьми розрядів акумулятора числом 34Н
  MOV AL,12H ; ; Завантаження молодших восьми розрядів акумулятора числом 12Н
  MOV BP,400H ; Завантаження вказівника бази числом 400Н
  MOV SP,200H ; Завантаження вказівника стека зміщенням 200Н
  MOV SS,AX ; ; Завантаження сегментного регістра SS початковою адресою сегмента 3412Н з АХ
  MOV DS,AX ; ; Завантаження сегментного регістра DS початковою адресою сегмента 3412Н з АХ
  MOV ES,AX ; ; Завантаження сегментного регістра ES початковою адресою сегмента 3412Н
  MOV SI,400H ; ; Завантаження індексного регістра SI початковим зміщенням 400Н
  PUSH BX ; Завантаження вершини стека з ВХ
  POP CX ; Перевантаження стека до СХ
  MOV AX,CS ; Запам’ятовування сегментного регістра кодів у АХ
  PUSH AX ; Завантаження АХ до стека
  POP BX ; Перевантаження стека до ВХ
  MOV SS,BX ; Завантаження SS з ВХ
  MOV AX,0000H ; Обнулення регістра АХ
  PUSH DS ; Ініціалізація стека початковою адресою
  PUSH AX ; Ініціалізація стека нульовою адресою

 

Контрольні питання:

1 Яке функціональне навантаження несуть регістри загального призначення у МП І8086?

2 Як обчислюється виконавча адреса у МП І8086?

3 Як реалізується первинне завантаження сегментних регістрів?

 

Контрольні питання підвищеної складності:

1 Напишіть фрагмент програми, який би обмінював вміст регістрів BX та DX за допомогою стека.

2 Як можна завантажити, на Ваш погляд, сегментний регістр кодів CS?

 

Режим переривань МП І8086

 

Вхідний контроль:

1 Які режими роботи МП Ви знаєте?

2 З якого типу периферійними пристроями повинен працювати МП у режимі переривань?

 

Переривання – це режим мікропроцесора, коли він тимчасово перериває виконання поточної програми і переходить до підпрограми обробки переривань, яка є більш терміновою або важливою. Після повернення з підпрограми процесор продовжує виконувати поточну програму. Для цього у стеку запам’ятовується адреса повернення (CS та IP), а також вміст регістра прапорців FLAGS, які потрібні для виконання також підпрограми обробки переривань. Значення IP перед завантаженням у стек коригується до адреси команди, перед якою МП почав обслуговувати переривання. Це пов’язано з наявністю у процесорі конвеєра команд, завдяки якому IP адресує команди з випередженням. Слід зазначити, що вміст регістрів CS, IP та FLAGS запам’ятовується у стеку автоматично, а вміст усіх інших регістрів, які будуть задіяні потім у підпрограмі, треба запам’ятати на її початку, а потім наприкінці її вивантажити зі стека.

Переривання за видами можуть ідентифікуватись як зовнішні і внутрішні, апаратні та програмні, масковані (ті, що можна забороняти) і немасковані. Всього МП підтримує 256 типів переривань. Можливі джерела переривань показані на рис. 7.13.

 
 

 


Рисунок 7.13 – Джерела переривань

 

Зовнішні переривання можуть виникати як реакція на запит переривань від зовнішніх пристроїв, вони є апаратні. Запити на масковані переривання надходять від периферійних пристроїв на контролер переривань, який формує вхідний сигнал МП INTR. У відповідь МП, якщо переривання дозволені програмно, видає сигнал підтвердження переривань INTA, після чого контролер посилає у МП по шині даних байт, який визначає тип переривання і МП його обробляє. Якщо програмно переривання заборонені, МП ігнорує запит, і продовжує виконання програми.

Запити на немасковане переривання надходять по входу NMI і використовуються для переривання роботи МП у таких випадках, як аварійне вимкнення живлення, помилка пам’яті тощо. Реакція на немасковані переривання не залежить від їх програмного дозволу. У більшості випадків МП реагує на запит будь-якого переривання після закінчення поточної команди. Винятком є строкові команди та команда WAIT, які можуть бути перервані під час виконання.

Пріоритети переривань наведені у табл. 7.2.

 

Таблиця 7.2 – Пріоритети переривань

Вид переривання Тип переривання Пріоритет Час виклику підпрограми переривань
За командою “помилка ділення” ЗакомандоюINTn За командою INT0 За командою INT3 По входу NMI По входу INTR За прапорцем TF 5-31 32-255

 

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

Внутрішні переривання можуть бути апаратними та програмними.

Переривання через помилку ділення (тип 0) генеруються МП відразу після виконання команд ділення, якщо формат частки перевищує формат приймача, або при діленні на нуль.

Покрокове переривання (тип 1) виробляється автоматично при установленні прапорця TF після виконання кожної команди, яка змінює вміст сегментного регістра, або у режимі налагодження. Підпрограма обробки покрокового переривання здійснює індикацію внутрішніх регістрів МП та деяких комірок пам’яті.

Переривання за командою INT3 реалізуються у вказаних точках програми.

Переривання за переповненням (тип 4) генерується після виконання команди INTO, якщо установлено прапорець ОF.

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

Програмні переривання дозволяють процедурам викликати одна одну через таблицю вказівників векторів (адрес) переривань, яка розміщена у пам’яті фіксовано, починаючи з адреси 00000Н до адреси 003FFН, і займає 1 кбайт пам’яті (рис. 7.14).

Кожний елемент таблиці вміщує два слова, які визначають початкову логічну адресу підпрограми. Слово з більшою адресою вміщує базову адресу сегмента, а слово з меншою адресою – зміщення підпрограми від початку кодового сегмента. При переході на підпрограму адреса сегмента завантажується у регістр CS, а зміщення – у регістр IP. Розмір кожного елемента таблиці складає 4 байти, МП обчислює адресу кожного елемента шляхом множення потрібного n на 4. При адресуванні елементів таблиці значення жодного сегментного регістра не використовується. На початку при виконанні підпрограм за командою INTn зовнішні переривання забороняються, але сама підпрограма може їх дозволити. Немасковані та внутрішні переривання можуть перервати виконання підпрограми, але у ній не припустимі переривання того типу, який вона обслуговує.

 

 

 


Рисунок 7.14 – Таблиця вказівників векторів переривань

 

Внутрішні апаратні переривання у більшості моделей мікропроцесорів обумовлені перш за все роботою системного таймера.

 

Контрольні питання:

1 Які типи переривань підтримує МП І8086?

2 Де зберігаються вказівники векторів переривань у МП І8086?

3 До якого типу переривань призведе вимкнення живлення або помилка пам’яті?


Контрольні питання підвищеної складності:

1 Визначіть фізичну адресу сегмента таблиці переривань типу 20.

2 З якою метою забороняються зовнішні переривання на початку виконання підпрограм оброблення переривань?

 

7.2.5 Організація 32-розрядних мікропроцесорів (Для самостійного вивчення)

 

Вхідний контроль:

1 Прослідкуйте розвиток МП фірми Intel та поясніть, завдяки яким рисам архітектури МП цієї фірми вийшли на перше місце з продажу на ринку.

2 З якою метою у МПС на МП фірми Intel використовуються співпроцесори?

 

Перший повністю 32-розрядний МП фірми Intel МП І80386 був створений у 1985 р., для нього було придатне існуюче у 80-ті роки минулого століття прикладне програмне забезпечення вартістю 6,5 млрд. дол., написане для МП попередніх моделей від І8086 до І80286, тобто зберігалась сумісність знизу вверх. МП І80386 підтримує багатозадачність, вбудоване керування пам’яттю, віртуальну пам’ять, захищений режим. МП може виконувати до 4 млрд. операцій за секунду, працює під керуванням операційних систем MS-DOS та UNIX і припускає роботу з співпроцесорами І80287 та І80387. Пам’ять сегментується, розмір сегмента може становити від 1 байта до 4 Гбайт.

Представником другого покоління 32-розрядних мікропроцесорів є МП І80486, який з’явився у 1989 р. Порівняно з МП І80386 він має такі ознаки:

– на його кристалі додатково розміщені кеш-пам’ять даних та команд, процесор обробки даних з плаваючою точкою. Найбільш часто використовувані команди виконуються за один цикл. МП І80486 має апаратну та командну підтримку роботи у складі багатопроцесорних систем і зовнішню кеш-пам’ять другого рівня. Продуктивність мікропроцесора забезпечується на рівні МП архітектури RISC. Модель МП І80486DX2 працює на частоті 66 МГц.

Слід зазначити, що деякі засоби телекомунікацій, зокрема, ЦАТС Квант-Е використовують 32-розрядні МП другого покоління як керувальні пристрої для реалізації комутаційних полів.

МП І80486 може працювати з операційними системами MS-DOS, Microsoft Windows, Unix System V/386, операційною системою реального часу iRMX.

З появою 32-розрядних процесорів найбільш перспективною стає сегментована захищена модель, в якій пам’ять складається з захищених незалежних сегментів, які можна цілком переміщати з жорсткого диску в ОЗП і навпаки. Кожній з програм у багатозадачному режимі надаються сегменти стека, коду та до 4-х сегментів даних. Некоректні звернення додатків до пам’яті блокуються системою захисту, а для запису та читання кодів як даних потрібні деякі штучні засоби – перевизначення сегментів.

Мікропроцесор І80386 призначений для виконання 32-розрядних операцій, але він може функціонувати як швидкі МП І8086 та МП І80286. МП І80386 може працювати у реальному, захищеному режимах та режимі віртуального І8086. Різниця між цими режимами полягає у способах адресування та обсязі адресованої пам’яті. У реальному режимі МП І80386 працює як 16-розрядний І8086 і може адресувати пам’ять обсягом 1 Мбайт. У захищеному режимі МП працює як 16-розрядний І80286 та адресує пам’ять 1 Гбайт або як 32-розрядний з можливістю адресування пам’яті 4 Гбайти; можлива також організація пам’яті зі сторінковою підтримкою та апаратна підтримка захисту пам’яті від несанкціонованого доступу, реалізуються принципи захищеного режиму адресування пам’яті.

Коли виконуються команди з даними 32-розрядної довжини, МП І80386 використовує 8- або 32-розрядні зміщення і будь-який регістр, крім ESP, може бути використаний як базовий або індексний. При виконанні команд з даними 16-розрядної довжини як базові регістри використовуться регістри BX, BP, індексні – SI, DI, зміщення може становити 0, 8, 16 біт.

Програмна модель МП І80386 вміщує регістри загального призначення EAX, EDX, ECX, EBX, регістри-вказівники ESP, EBP, ESI, EDI, сегментні регістри CS, SS, DS, ES, FS, GS, вказівник команд ЕІР, регістр прапорців EFLAGS.

РЗП вміщують підмножину регістрів МП І8086, мають довжину 32 розряди і можуть вміщувати адреси та дані. В них зберігаються дані довжиною 1, 8, 16, 32 або при використанні двох регістрів 64 біти, або розрядні поля від 1 до 32 біт, адреси довжиною 16 або 32 біт. Програмна модель МП показана на рис. 7.15.

 

       
       
EAX   AH AL акумулятор в командах множення, ділення, вводу-виводу
EDX   DH DL
ECX   CH CL лічильник
EBX   BH BL регістр бази
EPB   BP вказівник бази
ESI   SI індексні регістри, вказівники в строкових командах
EDI   DI
ESP   SP вказівник стека

 

Рисунок 7.15 – Програмна модель МП І8086

 

РЗП називаються EAX, EBX, ECX, EDX, ES; регістри-вказівники – EBP, ESP; індексні регістри – ESI, EDI. Доступ до молодших 16 розрядів цих регістрів виконується при використанні імен 16-розрядних регістрів AX, BX, CX, DX, SI, DI, BP та SP. Розширений вказівник команд (EIP) є 32-розрядний регістр. Він вміщує відносну адресу наступної виконуваної команди. Доступ до молодших 16 розрядів регістра EIP здійснюється при використанні 16-розрядного імені регістра ІР. Це може знадобитися при виконанні програм для мікропроцесорів І8086 та І80286, які мають тільки регістр ІР. Регістр прапорців EFLAGS керує введенням-виведенням, перериваннями, які можна маскувати, налагодженням програм та систем, перемиканням задач, включенням та виконанням задач МП І8086 у віртуальному режимі у захищеному багатозадачному середовищі.

Молодші 16 розрядів регістра EFLAGS є 16-розрядний регістр прапорців з назвою FLAGS. Регістр EFLAGS показано на рис. 7.16.

 

 
EIP   IP
EFLAGS   FLAGS

 

  FLAGS  
Резерв VF RF // NT IOPL OF DF IF TF SF ZF // AF // PF // CF  
                                                 

 

 

Рисунок 7.16 – Регістр вказівника команд та прапорці

 

Прапорці результату, які вміщуються у регістрі FLAGS:

CF(0) – прапорець перенесення зі старшого розряду. CF установлюється, якщо у результаті виконання операції є перенесення (при складанні) або зайом (при відніманні) відповідно зі старшого або у старший розряд. Для 8-, 16-, 32-розрядних операцій CF установлюється відповідно при перенесенні з розрядів 7, 15, 31.

AF(4) – прапорець допоміжного перенесення. AF установлюється, якщо у результаті виконання операції додавання чисел в упакованому форматі BCD виникає перенесення з розряду 3 незалежно від довжини операндів – 8, 16 або 32 розряди.

OF(11) – прапорець переповнення, установлюється, якщо у результаті виконання операції виникає знакове переповнення.

ZF(6) – прапорець нуля, установлюється, якщо результат операції дорівнює 0.

SF(7) – прапорець знака, установлюється, якщо установлено старший розряд результату, для 8-, 16- та 32-розрядних операндів SF співпадає зі значенням розрядів 8, 16, 31.

PF(2) – прапорець паритету (парності), установлюється, якщо молодший байт результату операції вміщує парну кількість одиниць.

Прапорці керування:

DF(10) – прапорець напряму, показує напрям проходження операндів при виконанні операцій з рядками (0 – у напрямі збільшення адрес, 1 – у напрямі зменшення адрес, при адресуванні за участі індексних регістрів SI та DI).

IF(9) – прапорець переривань, дозволяє (1) сприйняття переривань, які надходять з входу INTR.

IOPL(12, 13) – прапорець привілеїв, вказує на максимальне значення поточного рівня привілеїв (CPL).

TF(8) – прапорець трасування, при TF = 1 МП переводиться у покроковий режим для налагодження програми.

NT(14) – прапорець вкладності задач, установлюється в 1, якщо вирішувана задача вкладена у іншу задачу; значення NT у EFLAGS перевіряється при виконанні команди IRET для визначення, звідки треба вибрати адресу повернення:

при NT = 0 IRET вибирає адресу з поточного стека;

при NT = 1 IRET вибирає адресу із сегмента стану поточної задачі (TSS).

VM(17) – прапорець режиму, VM установлюється в 1 тільки у захищеному режимі при бажанні включення віртуального I8086;

RF(16) – прапорець відновлення, при RF = 1 використовується режим налагодження з точками зупину.

Сегментні регістри:

Шість 16-розрядних сегментних регістрів вміщують значення селекторів сегментів, які у реальному режимі адресування вказують на поточні сегменти адрес пам’яті: CS – сегментний регістр кодів команд програми, регістр сегмента стека SS і чотири регістри сегментів даних DS, ES, FS, GS (рис. 7.17).

Лінійна адреса операнда або команди є сума базової адреси сегмента та 32-розрядної відносної адреси.

Для адресування пам’яті у захищеному режимі в МП І80386 є “невидимі” для програм користувача регістри дескрипторів (описувачів) сегментів, в яких зберігається інформація, яка керує пам’яттю. До 16-розрядних регістрів МП І80286 додані 64-розрядні дескриптори сегментів. МП І80386 вибирає дескриптори сегментів з таблиць дескрипторів, використовуючи сегментний регістр як індекс при зверненні до цієї таблиці.

МП І80386 перетворює логічні адреси (використані програмістом у програмі) у фізичні адреси двома способами:

– перетворенням сегмента, коли логічна адреса (вміст селектора сегмента та зміщення сегмента) перетворюється у лінійну адресу, яка і є фізичною;

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

Обидва способи є скриті від програміста і підтримуються апаратно.

 


 

      Регістри дескрипторів сегментів
  Селектори   Додаткова інформація Байт прав доступу сегмента Базова адреса сегмента Межа сегмента
   
CS Сегмента кодів CS-        
SS Стекового сегмента SS-        
DS Сегмента даних DS-        
ES Сегмента даних ES-        
FS Сегмента даних FS-        
GS Сегмента даних GS-        
   
Сегментні регістри (завантажуються програмою)   Регістрова кеш-пам’ять дескрипторів сегментів (цю невидиму для програм надоперативну пам’ять завантажує CPU)
                       

 

Рисунок 7.17 – Сегментні регістри

 

На рис. 7.18 показано узагальнену схему перетворення адрес у МП І80386.

 

 

Рисунок 7.18 – Процес перетворення адреси в МП 80386

 

На рис. 7.19 показано, як перетворюється вміст сегментного регістра та зміщення (логічна адреса) на лінійну адресу – перша фаза.

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

При сторінковому адресуванні потрібно виконати ще одну фазу перетворення – лінійна адреса перетворюється у фізичну.

 

 

 


Рисунок 7.19 – Сегментна організація пам’яті

 

При сторінковій організації пам’яті (рис. 7.20) лінійну адресу можна трактувати як складену з трьох полів: каталогу, сторінки та зміщення. На рис. 7.20 показано дворівневу систему. Поле “Каталог” вказує на таблицю сторінок, яка відноситься до конкретного елемента каталогу, а поле “Сторінка” використовується як індекс у таблиці сторінок, які визначаються каталогом; поле “Зміщення” використовується як адреса байта всередині сторінки, вказаної

 
 

 

 


Рисунок 7.20 – Перетворення сторінок

 

таблицею сторінок, яка є область 1К 32-розрядних елементів. Для адресування пам’яті використовуються два рівня таблиць. На вищому рівні знаходиться каталог сторінок, який адресує до 1К сторінок таблиць другого рівня. Таблиця сторінок другого рівня адресує до 1 кбайта сторінок другого рівня. Вся таблиця адресується одною сторінкою каталогу, тому у сукупності можна адресувати 1 Мбайт сторінок. Розмір однієї сторінки має 4 кбайти, таким чином, таблиці одного каталогу сторінок можуть адресувати всю область фізичних адрес МП І80386. Фізична адреса поточного каталогу сторінок зберігається у регістрі CR3 МП. Програми керування пам’яттю можуть задати один каталог для всіх задач, по одному каталогу сторінок на кожну задачу або комбінації з кількох каталогів. Для підвищення продуктивності при перетворюванні адрес МП зберігає найбільш часто використовувані адреси таблиці сторінок у внутрішній кеш-пам’яті, яка має назву буфер швидкого переадресування. Якщо у кеш-пам’яті немає сторінкової інформації, треба звертатися до обох рівнів таблиць сторінок. Керувати кеш-пам’яттю може тільки системний програміст.

Слід зазначити, що при сегментному адресуванні пам’яті сегмент може або цілком знаходитись у пам’яті, або ні; при значних розмірах сегментів це призводить до перевантаження МП; сторінковий спосіб адресування є більш ефективним через невеликий розмір сторінки (4 кбайти) та можливість часткового знаходження на жорсткому диску та у пам’яті.

МП І80386 має чотири рівні захисту привілеїв – для ізолювання програм користувача одна від одної і кожної з них від операційної системи і навпаки у багатозадачному режимі. Правила доступу до даних такі:

– дані, які зберігаються у сегменті з рівнем привілеїв р можуть бути доступними тільки при виконанні команд з такими самими або меншими привілеями, ніж р;

– кодовий сегмент з рівнем привілеїв р може бути викликаний задачею, виконуваною на тому самому рівні або більш привілейованому, ніж р.

МП І80386 здійснює контроль типу дескриптора сегмента, який виконується для пошуку програмних помилок при спробі використати сегменти у випадках, коли це не передбачено системним програмістом. МП перевіряє тип сегмента у двох випадках: коли селектор дескриптора завантажується у сегментний регістр і коли команда звертається до сегментного регістра, причому жодна команда не може нічого записувати у виконуваний сегмент, неможливе читання кодового сегмента, який має доступ тільки на виконання, неможливий запис у сегмент даних, який має доступ тільки на читання, контролюється межею сегмента. При виконанні команд керування JMP, CALL та RET передача управління здійснюється всередині поточного кодового сегмента і тому контролюються тільки межею сегментів.

При міжсегментних переходах команди JMP і CALL можуть звертатись до інших сегментів, тому МП здійснює контроль привілеїв сегментів і дозволяє перехід безпосередньо між сегментами, або через шлюзи при виконанні певних умов.

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


Співпроцесори МП І80386

 

МП І80386 може працювати з арифметичними співпроцесорами І80287 і І80387 та співпроцесором локальної обчислювальної мережі І82586.

Якщо МП І80386 працює з співпроцесором І80387, то він виконує 32-розрядні передачі. Робота співпроцесора з процесором реалізована як синхронна або псевдосинхронна.

Співпроцесор локальної обчислювальної мережі (ЛОМ) є високопродуктивним інтелектуальним контролером зв’язку, здатним вирішувати задачі керування доступом до локальної обчислювальної мережі. На рис. 7.21 показано структурну схему робочої станції локальної обчислювальної мережі Ethernet.

 
 

 

 


Рисунок 7.21 – Структурна схема робочої станції ЛОМ

 

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

Робоча станція вміщує центральний процесор І80386, послідовний інтерфейс, розподілювану пам’ять, приймач-передавач та канал Ethernet.

Кеш-пам'ять МП І80386 розташована між основною пам’яттю і процесором для збільшення швидкодії системи. Механізм кеш-пам’яті є прозорим для програміста, а саме слово “кеш” є тайник. Швидкодія кеш порівняна зі швидкодією основної пам’яті.

 

Кеш-пам'ять МП І80386

 

Концепція кеш-пам’яті основана на передбаченні найбільш вірогідного використання процесором даних з основної пам’яті шляхом копіювання їх у кеш. Ця концепція розповсюджується на дані, сусідні з поточними даними. Для цього зазвичай здійснюється передавання з основної пам’яті у кеш-пам'ять блока з кількох слів, навіть якщо у даний момент потрібне тільки одне слово. Якщо потрібне слово є частиною потоку послідовних команд, то вибирання наступних команд виконується на першому етапі роботи, оскільки завдяки цьому зникає необхідність повторного звернення до основної пам’яті. Коли процесору потрібно зчитати або записати дані у пам'ять, то спочатку він перевіряє їх наявність у кеш. Якщо дані знаходяться у кеш-пам’яті (кеш-попадання), то МП І80386 може їх швидко отримати. У разі їх відсутності (кеш-промах) ці дані зчитуються з основної пам’яті та переписуються у кеш. МП І80386 працює з зовнішньою кеш-пам’яттю даних та команд.

Передбачення адреси наступного звернення до пам’яті можливе тому, що програми звертаються до пам’яті за адресою, близькою до адреси попереднього звертання. Цей принцип називається локальністю програми. Для збільшення відсотка кеш-попадань процесор використовує блочну вибірку. Контролер кеш-пам’яті поділяє на блоки основну пам’ять довжиною 2, 4, 8 або 16 байт. Зазвичай 32-розрядний процесор вміщує два або чотири слова на блок. У разі промаху контролер пересилає увесь блок, який вміщує потрібне слово, з основної пам’яті у кеш. Блочна вибірка дозволяє записати у кеш дані, розташовані перед потрібним байтом (перегляд назад), або дані, розташовані після нього (перегляд вперед) або обидва випадки.

Кеш-пам'ять у МП І80386 має ємність 64 кбайт з 16384 входами. Кожний вхід вміщує 32 біти даних разом з 16 бітами адресної інформації. Довжина рядка (одиниця обміну між МП та кеш) складає 32 біти. Для керування пам’яттю використовуються два компаратори та дві програмовані логічні матриці. Сама ж пам’ять складається з восьми статичних ОЗП даних з організацією 8К х 8 і два динамічних ОЗП тегового поля з організацією 8К х 8. Кеш-пам’ять побудована за принципом прямого відображення, кожний елемент в основній пам’яті відображається в один елемент усередині кеш. 30-розрядна фізична адреса процесора поділяється на дві частини: 16-розрядний тег та 14-розрядний індекс. Тег відповідає старшій адресі рядків (А16...А31), а індекс – молодшій адресі рядків (А2...А15). Поля тега та індексу разом визначають місце подвійного слова в основній пам’яті. Додатково індекс вибирає один із 16384 рядків у кеш. Наймолодші два біти адреси кодуються так, що доступними є всі чотири байти подвійного слова. Кеш-пам'ять використовує буферизований наскрізний запис для оновлення динамічного ОЗП. Під час циклів запису нові дані записуються у кеш-пам’ять і одночасно в ОЗП. При використанні буфера цикл запису в ОЗП перекривається за часом з наступним циклом магістралі, що дозволяє виконувати запис за три такти. Буферизований наскрізний запис реалізується шляхом відділення режиму роботи ПК з кеш від режиму роботи з ДОЗУ. Це можливо тому, що кеш та динамічний ОЗП мають кожний свої власні контролери, що забезпечує можливість операцій з перекриттям цих функцій. Керувальна програмована логічна матриця визначає, коли у режимі роботи з кеш необхідний цикл звернення до пам’яті, а у режимі роботи з динамічним ОЗП запит перевіряється тільки у разі готовності до запуску нового циклу.

При оновленні динамічного ОЗП будь-який запис буферизується, тобто інформація затримується у кеш-пам’яті перед записом в основну пам’ять, а схеми кеш керують процесом доступу до основної пам’яті асинхронно по відношенню до роботи процесора. Процесор починає новий цикл до завершення циклу запису в основну пам’ять. Якщо за записом відбувається зчитування, то обов’язково буде кеш-попадання, тому що читання виконується у той час, коли контролер кеш зайнятий оновленням основної пам’яті. Буферизація підвищує продуктивність кеш. На рис. 7.22 наведено приклад буферизованої наскрізної пам’яті. Припустимо, що МП І80386 закінчив запис “нових даних 1”. Контролер кеш розмістив у буфер дані для запису й оновлення кеш. Процесор зчитує “старі дані 2” з кеш. Виникає ситуація кеш-попадання. У той час, поки відбувається читання “старих даних 2”, “нові дані 1” переписуються в основну пам’ять замість “старих даних 2”.

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

Останні моделі МП І80486 та подальші моделі використовують більш продуктивний режим зворотного запису, за наявності якого дані записуються в ОЗП тільки тоді, коли вони змінюються.

 

Контрольні питання:

1 Які системні функції підтримують 32-розрядні МП І80386 та І80486?

2 Під якими операційними системами можуть працювати ці МП?

3 В яких режимах працюють МП І80386 та І80486?

4 З якою метою використовується захищений режим?

5 Які переваги забезпечують сегментний та сторінковий способи перетворення віртуальних адрес?

6 Опишіть концепцію кеш-пам’яті.

 


 
 

 


Рисунок 7.22 – Приклад буферизованої наскрізної пам’яті

 

Контрольні питання підвищеної складності:

1 Як адресується кеш-пам’ять?

2 Опишіть режим зворотного запису у кеш-пам’ять.