АРХІТЕКТУРАПРОЦЕСОРІВINTEL
1.1 Історіярозвитку процесорів
Історіямікропроцесорівпочалася в 1971році, коли фірмаIntel випустилаперший мікропроцесорi4004. Вінмав розрядність4 біта,спроможністьадресувати640 байт пам'яті,тактову частоту108 кГц і продуктивність0.06MIPS. Такийпроцесор вжеміг працюватив якості обчислювальногоядра калькулятора.Він містив 2300транзисторіві виконувавсяпо технологіїз дозволом 10мкм. Через рікз'явився його8-бітный“родич” -i8008, щоадресує вже16 Кб пам'яті.
В1974 році з'явився8-разрядныйпроцесорi8080, щостав надтопопулярнимвлаштуванням.Він вже мавчастоту 2 МГці адресував64 Кб пам'яті. 6000транзисторівдозволиларозмістити6-мкм технологіявиготовлення.Процесор вимагавтрьох джерелживлення (+5, +12 та-5 В) і складноїдвухтактноїсинхронизації.На цьому процесорібудувалисярізноманітнітермінали,контролериі навіть першийПК Altair.В нашій країнізапізнилоюлуною 8080 сталипроцесори580ИК80 і КР580ВМ80, набазі яких впочатку і середині80-х років будувалосябагато “саморобних”ПК.
Наступниметапом ставпроцесорi8085 (5 МГц,0.37MIPS, 6500транзисторів,3-мкм технологія).Він зберігпопулярнурєгістровуархітектуру8080 і програмнуєдність,але в ньогододали портпослідовногоінтерфейсу,скасувалиспеціальніІСпідтримки(тактовогогенератораі системногоконтролера)і декільказмінили зовнішнійінтерфейс.Головним подарункомрозробникамапаратури сталатільки однаживлющанапруга +5 В.
Варіаціюна тему 8080 і 8085 подаєпроцесорZ80 фірмиZilog. Зберігшипрограмнуєдністьз 8080, в нього ввелидодатковірегістри, щодозволилоістотно підвищитипродуктивність.Результатвиявився вражаючим- ще нещодавнопопулярнікомп'ютериSinclair,побудованінаZ80,демонструвалина іграх графіку,не гіршуніж уРСна 16-разрядномпроцесорі 286.
Перший16-разрядныйпроцесор 8086 фірмаIntel випустилав 1978 році. Частота5 МГц,продуктивність0.33MIPS, алеінструкціївже з 16-розряднимиоперандами(пізніше з'явилисяпроцесори 8 і10 МГц).Технологія3 мкм, 29 тис. транзисторів,щоадресує пам'ять1 Мб. Регістроваархітектураі система командістотно відрізнялисявід 8080, але, природно,просліджуютьсязагальні ідеї.Через рік з'явився8088 - той же процесор,але з 8-битнойшиною даних.З нього почаласяісторіяIBM PC, щонаклала свійвідбиток наподальшийрозвиток цієїлінії процесорів.Масове розповсюдженняі відчиненаархітектураРСпризвели долавиноподібнійпояві програмногозабезпечення,що розробляєтьсякрупними, середнімиі дрібнимифірмами іентузіастами-одинцями.Технічнийпрогрес вимагав(і зараз вимагає)розвитку процесорів,але вантажпрограмногозабезпеченняРС,що повиннопрацювати іна більш новихпроцесорах,в свою чергувимагав забезпеченнязворотноїєдності.Таким чином,всі нововведенняв архітектурінаступнихпроцесорівповинні булиприбудовуватисьдо існуючогоядра. А тут щеі сама архітектураРС“підкинула”,наприклад,складнощі звикористаннямвекторів перериваннь.ФірмаIntelзарезервувалаперші 32 вектору“для службовогокористування”,однак на них“наїхали”перериванняBIOS. Одинз результатів- додатковийзасіб обробкивиключеньсопроцесора,застосовуванийв старших моделяхРС.
Процесор80286, щознаменуєнаступний етапархітектури,з'явився тількив 1982 році. Він вжемав 134 тис. транзисторів(технологія1.5 мкм) і адресувавдо 16 Мб фізичноїпам'яті. Йогопринциповіновшества -захищений режимі віртуальнапам'ять розміромдо 1 Гб - не знайшлимасовогозастосування,процесор більшоючастиноювикористовувавсяяк дуже швидкий8086.
Клас32-розряднихпроцесорівбув відкритийв 1985 році моделлю80386 (275 тис. транзисторів,1.5 мкм). Разрядностьшини даних (які внутрішніхрегістрів)досягла 32 біт,пам'ять ,щоадресуєтьсяфізична - 4 Гб.З'явилися новірегістри, нові32-битные операції,істотно доопрацьованийзахищенийрежим, з'явивсярежимV86, сторінковекеруванняпам'яттю. Процесорзнайшов широкезастосуванняв РС,і на благодатномугрунті йогонових властивостейстав розростатись“самый великийвірус” -MS Windows здодатками. Зцього часустала помітнатенденція“позитивногозворотногозв'язку”: напояву новогопроцесоравиробники ПОреагують випускомнових привабливихпродуктів,наступнимверсіям якогоставає тіснов рамках цьогопроцесора.З'являєтьсябільш продуктивнийпроцесор, алепісля нетривалоговосторга і йогоресурси “з'їдають”і т. д.Цей “вічнийрух”, кінцево,природно, алеє обгрунтованапідозра, щобільші ресурсирозбещують(або, принаймні,розслаблюють)розробникаПО, не змушуючийого напружуватисяв пошуках більшефективнихзасобів рішеннязадачі. Прикладомефективногопрограмуванняможна лічитиіграшкинаSinclair ZX-Spectrum,що реалізуютьсяна “іграшкових”ресурсах - 8-бітномпроцесорі і64 (128) Кб ОЗП.З протилежнимиприкладамибільшістькористувачівРСстикаютьсярегулярно, алез процесоромPentium 200 і32 Мб ОЗПна них не завждиобертаютьувагу.
Історіяпроцесора 386нагадує історію8086: першу модельз 32-бітнойшиною даних(згодом названою386DX) змінив386SX з16-розряднойшиною. Він доситьлегко вписувавсяа архітектуруРС АТ, шо ранішебазуваласяна процесорі286.
ПроцесорIntel486DXз'явився в 1989 році.Транзисторів- 1.2 млн., технологія1 мкм. Від 386-гоістотно відрізняєтьсярозміщеннямна кристаліпервинногокеша і вбудованогоматематичногосопроцесора(попередніпроцесори малиможливістьвикористаннязовнішніх х87сопроцесорів).Крім того, дляпідвищенняпродуктивностів цьомуСІSC-процесорі(як і в наступних)застосованеRISC-ядро.Далі з'явилисяйого різновиди,що відрізняютьсянаявністю абовідсутністюсопроцесора,застосуваннямвнутрішньогомноження частоти,політикоюзапису кешаі іншими. Позичилисяенергозбереженням(з'явився режимSMM), щовідбилося ів продовженнілінії 386 процесорів(з'явився процесорIntel386SL).
В 1993 роціз'явилися першіпроцесориPentium зчастотою 60 і66 МГц- 32-розрядныепроцесори з64-розряднойшиною даних.Транзисторів3.1 млн., технологія8.0 мкм, живлення5 В. Від 486-го принципововідрізняєтьсясуперскалярноюархітектурою- спроможністюза один тактвипускати зконвейєрівдо двох інструкцій(що, кінцево,не означаєможливостіпроходженняінструкціїчерез процесорза півтактаабо за такт).Інтерес допроцесора збоку виробниківі покупців РСстримувавсяйого дуже високоюціною. Крімтого, з'явивсяскандал з виявленоюпомилкою сопроцесора.Хоча фірмаIntelматематичнообгрунтуваланевисокуімовірністьїї прояви(раз в декількароків), вонавсе-таки пішлана безкоштовнузаміну вжепроданих процесорівна виправлені.
ПроцесориPentium зчастотою 75, 90 і100 МГц,що з'явилисяв 1994 році, уявиливже другу ґенераціюпроцесорівPentium. Примайже тому жечислі транзисторіввони виконувалисяпо технології0.6 мкм, що дозволилознизити потужність,що споживається.Від першоїґенерації вонивідрізнялисявнутрішніммноженнямчастоти, підтримкоюмультипроцесорнихконфігураційі мали іншийтип корпуса.З'явилися версії(75 МГцв мініатюрномукорпусі) длямобільнихзастосуваннь(в блокнотнихПК).ПроцесориPentium другоїґенерації сталинадто популярнимив РС.В 1995 році з'явилисяпроцесорина 120 і 133 МГц,виконані вжепо технології0.35 мкм (першіпроцесори на120 МГцробилися щепо технології0.6 мкм). В 1996-й називаютьрокомPentium -з'явилися процесорина 150, 166 і 200 МГц,іPentium ставрядовим процесоромдля РСширокогозастосування.
ПаралельнозPentiumрозвивавсяі процесорPentium Pro, щовідрізнявсяновинками“динамічноговиконанняінструкцій”,направленимина збільшеннячисла паралельновиконуванихінструкцій.Крім того,в його корпусірозмістилиі вториннийкеш,для початкуобсягом 256 Кб.Однак на 16-бітныхдодатках, атакож в середіWindows 95 йогозастосуванняне дасть переваг.Процесор містить5.5 млн. транзисторівядра і 15.5 млн.транзисторівдля вторинногокешаобсягом 256 Кб.Перший процесорз частотою 150МГцз'явився в початку1995 року (технологія0.6 мкм), а вже вкінці рокуз'явилися процесориз частотою 166,180 і 200 МГц(технологія0.35 мкм), у яких кешдосягав і 512 Кб.
Післядовгих обіцянокв початку 1997 рокуз'явилися процесориPentium MMX.РозширенняMMX припускаєпаралельнуобробку групиоперандіводнією інструкцією.ТехнологіяMMX закликанаприскорювативиконаннямультимедійнихдодатків, вчастковостіоперації ззображеннямиі обробку сигналів.Її ефективністьвикликає суперечкив середі розробників,оскільки виграшв самих операціяхобробки компенсуєтьсяпрограшем надодатковихопераціяхупаковки-распаковки.Крім Того, обмеженарозрядністьставить підсумнів застосуванняMMX вдекодерахMPEG-2, вяких вимагаєтьсяобробка 80-бітныхоперандів.Окрім розширенняMMX ціпроцесори, упорівнянніз звичайнимPentium, маютьподвійний обсягпервинногокешаі деякі елементиархітектури,що запозичилисяуPentium Pro, щопідвищуєпродуктивністьпроцесораPentium MMX іна звичайнихдодатках. ПроцесориPentium MMXмають 4.5 млн.транзисторіві виконані потехнології0.35 мкм. За станомнасьогодняшнійдень є процесориз тактовимичастотами 166,200, 233 і 266 МГц.
ТехнологіяMMX булаз'єднана зархітектуроюPentium Pro - ів травні 1997 рокуз'явився процесорPentium II. Вінподає собоюзлегка урізанийваріант ядраPentium Pro збільш високоювнутрішньоютактовоючастотою, в щоввели підтримкуMMX. Труднощірозміщеннявторинногокешав одному корпусіз процесоромподолали нехитримзасобом - кристалз ядром процесораі набір кристалівстатичноїпам'яті і додатковихсхем, що реалізуютьвторинний кеш,розмістилина невеликійдрукарськійплаті-картридже.Всі кристализакритізагальноюкришкою іохолоджуютьсяспеціальнимвентилятором.Тактовые частотиядра - 233, 266, 300, 333, 366, 400 і450 МГц.
Пізнішєпобачив світлоспрощенийваріант процесораPentium II,назва ,що отрималаCeleron. Вньому вдвічізменшенийвторинний кеші, немовби, прибранапідтримкабагатопроцесорнихсистем. Однакшляхом “хірургічного”втручанняпідтримкубагатопроцесорностіможна повернути.Це пояснюєтьсятим, що вCeleronзастосованеядроPentium II безбудь-яких змін.
В 1999 роціз'явивсяпроцесорPentium III. Вньому застосованепокращене ядропроцесораPentium II, вякедодана підтримкатехнологіїMMX-2.ТехнологіяMMX-2 підрозумуєнаявність 8додаткових128-розрядныхрегістрів (впопередніхпроцесорахрегістриMMX знаходилисяв мантисахрегістрівсопроцесора)і виконаннягрупових інструкційнад 4 числамив форматі короткогоречовинного.Перші процесоривиготовляютьсяпо технології0.35 мкм і маютьтактову частоту400 МГц. В подальшомуплануєтьсяперехід на 0.18мкм технологіюі збільшеннячастоти до 1ГГц.
В даниймомент фірмаIntel розробляєпринциповонову архітектуруIA64, щовідкриває клас64-розрядныхпроцесорів.Першим процесоромщо є дану архітектуруповинен статиMerced. Цейпроцесор будемати 128 64-розрядныхрегістрівзагальногопризначенняі нову системукоманд, покликануістотно підвищитипродуктивність.Однак в зв'язкуз величезнимобсягом ПО вспеціальномурежимі будевироблятисяпідтримкасистеми командпопередніхпроцесорів.Merced такожбуде підтримуватирозширенняMMX-2 ідодаде до ньогодекілька новихкоманд. Першіпроцесорибудуть виготовлятисяпо технології0.35 мкм і матитактову частоту400 МГц. В подальшомуплануєтьсяперехід на 0.18мкм технологіюі збільшеннячастоти до 1ГГц.
1.2Описвнутрішніхблоків
8086/88.
Найбільшпростий інтерфейсмають процесори8086/88. Вони здатніпрацювати вдвох режимах:мінімальномуі максимальному.
В мінімальномурежимі процесорсам виробляєсигнали керуваннядля зовнішньоїшини. Цей режимпередвизначенийдля побудовиневеликихсистем, щоневикористаютьсопроцесора,і дозволяєбезпосереднодо процесорапідключатьпериферійнімікросхемиз сімейства8085.
В РС застосовуєтьсямаксимальнийрежим, при якомусигнали керуваннясистемною шиноювиробляютьсяконтролеромшини 8288 по сигналамстану процесора.Всі сигналикеруванняактивнінизьким рівнем,що забезпечуєможливістькерування ,щорозділяєтьсяшиною декількомаприладами. Циклшини позичає4 такту (не лічившитактів чекання).
Будь-якийцикл може бутинеобмеженорозтягнутийз допомогоюсигналу готовності.Цикли звертаннядо портіввідрізняютьсявід циклівпам'яті використаннямшини адреси.У разізвертаннядопортів лініїадресиA [8: 15]завжди містятьнулі. Циклпідтвердженняперериванняаналогічнийциклу читанняз порту, алестан шини адресипроцесоромне управляється.Передача керуванняшиною здійснюєтьсяпо сигналамRQ/GT:влаштування,що запрошуєкеруванняшиною, генеруєімпульсзапитання.Процесор, закінчившичерговий цикл,по тій же лініїпередає імпульспідтвердженняі звільняєшину. Шиноюпочинає керувативлаштування,а по завершеннісвоїх операційвоно наступнимімпульсомповідомляєпроцесору прозвільненняшини. Типовішиніцикли процесорівнаведені нарисунку1.1.
Процесор8086 має 6-байтнувнутрішню чергуінструкцій(іменно такудовжину маєнайдовшаінструкція).Блок передвиборкиза наявностідвох вільнихбайт в черзінамагаєтьсяїї заповнитив той час, колизовнішня шинапроцесора непозичена операціямиобміну. Чергау процесора8088 скороченадо 4 байт, а передвиборкавиконуєтьсявже за наявностіодного вільногобайта. Ці відзнакиоптимизуютьконвейєр зурахуваннямрозрядностішини даних.Черга обнуляєтьсяпри виконаннібудь-якоїкоманди передачікерування,навіть припереході нанаступну адресу.Цією властивістючасто користуютьсяпри програмуваннікеруванняприладамивведення-виведення,що вимагаютьзатримки міжсусіднімиопераціямиобміну. Дешифраторв даних процесорахпо суті є івлаштуваннямкерування.
Процесормає 8 16-разрядныхрегістрівзагальногопризначенняі 4 16-розряднихсегментнихрегістра.Влаштуванняобчисленнявиконавчоїадреси маєдвухвходовийсуматор, томупри адресаціїзі зміщеннямабо, якщо відноснаадреса перебуєз трьох частин,вимагаютьсязайві тактидля обчисленняадреси.
80286.
Процесори80286 випускалисяв 68-виводнихкорпусах. Їхнійінтерфейсвідрізняєтьсявід 8086 застосуваннямроздільнихшин адреси іданих, конвейєрноюадресацією,а також складомі призначеннямкеруючих сигналів.
Шина адресидозволяє адресувати16 Мб фізичноїпам'яті в захищеномурежимі і 1 Мб зобласті молодшихадрес - в реальномурежимі. Приадресаціївведення-виведенняпроцесор використаєтільки бітиA [0:15]шини адреси(при цьому іншібітирівні 0). Як і впроцесорі 8086,обмін по шиніданих можливийбайтами абословами. Припобайтномобміні байтз парною адресоюпередаєтьсяпо лініямD [0: 7], знепарним - полініямD [8-15]. Обмінсловами з парноюадресою відбуваєтьсяпо лініямD [0-15]. Приадресаціїслова з непарноюадресою процесоравтоматичновиконує двапослідовнихшинихциклу: першийпо лініямD [8-15], другий- поD [0-7]. Байтишини, що берутьучасть в обміні,як і для процесора8086, визначаютьсясигналамиA0 іBHE#.
Синхронизаціяпроцесораздійснюєтьсязовнішнімсигналом, частотаякого ділитьсянавпіл внутрішнімдільником дляодержаннясигналу внутрішньоїсинхронизації.На зовнішнівиводипроцесора цейсигнал не надходить,але його виробляєспеціальнамікросхема82284 - генераторсинхронизаціїдля 80286. Максимальнапропускнаспроможністьлокальної шинипроцесора -одне слово закожні два циклавнутрішньоїчастоти.
Конвейєрнаадресація,застосовуванав процесорі,передбачаєможливістьпочаткунового циклу,не чекаючизавершенняфізичногообміну данимипопередньогоциклу. Це дозволяєскоротити числотактів чекання,необхіднихдля погодженняз відносноповільноюпам'яттю і портами,за рахунокбільш ранньогопочаткувиконаннядешифраціїадреси влаштуваннямпам'яті абовведення-виведення.Конвейєрнийрежим дозволяєконтролерампам'яті ефективновикористатишвидкий сторінковийрежим динамічноїпам'яті і чергуваннябанків.
Процесор80286 не тримає нашині адреси,відповіднопоточному циклушишина всьомуйого протязі.Для єдностіз шиноюISA, потребуючейдійсністьадреси на весьчас циклу, сигналишини адресипроцесоразаклацуютьсяна регістрах.
Формуваннякеруючих сигналівсистемної шинивиконує зовнішнямикросхема82288 або її функціональнийаналог з чипсетасистемної платина підставісигналів стануі типу циклу.
Керуваннятимчасовоюдіаграмоюпідрозумуєзатримку ірозтяжкукоманднихциклів. Розтяжкапри необхідностіподовжує команднийцикл звертаннядля відносноповільнихзовнішніхприладіввведення-виведенняі пам'яті. Зовнішнісхеми з допомогоюзатримки сигналуготовностіможуть розтягуватицикл на будь-якийчас. При цьомувводяться тактичеканняпроцесора.Затримкапередвизначенадля зрушенняпочаткукомандногоімпульсасистемної шинивідносно відповідноїйому фази адресаціїі ідентифікації.Затримка командздійснюєтьсямікросхемой82288 по сигналуCMDLY, щоперевіряєтьсяпо кожномуспадуCLK.Необхідністьзатримки ірозтяжкикоманд з'явиласяв зв'язку з істотнимпідвищеннямпродуктивності(відносно 8086)локальної шинипроцесора.80286 здатний генеруватишинніцикли з мінімальнимперіодом в дватактивнутрішньоїчастоти. Такпри частотіпроцесора 16МГцшинніцикли підутьз періодом 250нс. В повніймірі цієюпродуктивністюможе скористуватисялише пам'ять,підключенадо локальноїшини. Приладина шиніISA такоготемпу не витримують.Крім того,вони звичайновимагаютьпевного часувідновлення- пасивногостану керуючихсигналів шиниміж їм командами,що адресувалися.Керуваннязатримкою ірозтяжкойциклів в залежностівід типу і адресизвертанняпокладаєтьсяна мікросхемичипсета системноїплати, а длязавдання числатактів чеканняі часу відновленнядля різноманітнихоперацій вмашинах класуAT ввеливідповідніопціїBIOS SETUP. Шиницикли процесорауявлені нарисунках 1.2 і1.3.
При проектуванніпроцесора 80286була поставленазадача значнопідвищитипродуктивність.Буфер передвиборкизалишивсяколишнім, алевлаштуванняпередвиборкипіддалосязначній переробці.Коли чергакоманд порожня,а це трапляєтьсяпісля кожноїінструкціїпередачі керування,нові байтиминають черезчергу не затримуючись.Крім того,при передвиборців захищеномурежимі здійснюєтьсяконтроль межсегменту кодів.Дешифраторвже подає собоюокреме влаштування,що вибирає даніз черги команді “розгортає”кожну інструкціюв 69 біт,що включаютьвсю інформацію,необхіднупроцесору длявиконаннякоманди, завинятком резидентнихоперандів.Ці мікроинструкціїрозміщуютьсяв спеціальнийбуфер (на 3 команди),що також здатнийпропускатикоманди беззатримки ввипадку передачікерування. Вдешифраторіпередбаченийспеціальнийзасіб, що дозволитьпопереджатишинийінтерфейс проте, що в наступномутакті знадобитьсяцикл вибіркиданих з пам'яті.В цьому випадкушинийінтерфейс недасть початипередвиборку,виключаючизавдяки цьомувтрати в продуктивності.
Блок формуванняадреси має двасуматора: суматорзміщення ісуматор фізичноїадреси. Обчисленняповної адресипозичає дватакту і доповнюєтьсяще одним тактом,якщо зміщенняперебує з трьохелементів.
Влаштуваннясегментаціїзаазнало істотнихзмін. Сегментнірегістри теперперебують здвох частин:16-разрядногоселектора іпрограмнонедосяжноїдескрипторноїчастини, щомістить базовуадресу,розмір і правадоступу сегменту.
80386.
Синхронизаціяпроцесора 80386в точностівідповідаєсинхронизації80286.
Інтерфейспроцесора 80386в значномуступені схожийна інтерфейс80286 хоча і зазнавряду змін.
Шина данихприпускає як16-ти, так і 32-разрядныйрежим обміну,в залежностівід стану вхідногосигналуBS16#. Причитанні в16-розрядномурежимі даніна лініяхD [16-31]ігноруються,при записіпроцесор керуєвсією шиноюданих незалежновід сигналуBS16#/.
Шина адресидозволяє адресувати4 Гб фізичноїпам'яті в захищеномурежимі і 1 Мб зобласті молодшихадрес в реальномурежимі. Привиконанніінструкційвведення-висновкупроцесор адресуєтьсядо області 64Кб просторивведення-виведення(00000000-0000FFFFh). При обмініз сопроцесоромв циклах введення-виведенняпроцесор виставляєадреси 800000F8-8000000FFh,що спрощуєдешифраціюадреси зовнішнімисхемами. ЛініїA [31: 2]ідентифікуютьадресу з точністюдо подвійногослова, а в межахцього словасигналиBE[0: 3]#безпосередновказують, щобайтивикористовуютьсяв даному циклі.Якщо в поточномуциклі записуобидва сигналиBE0# іBE1# неактивні,виводимідані старшихбайт автоматичнодублюютьсяна лініях молодших.Якщо слово ,щоадресувалосяперетинає межуподвійногослова, процесорпісля пересилкимолодшої частини,що помістилася,автоматичногенерує додатковийцикл обмінуз іншими значеннямиA [31: 2] іBE [3: 0]#.
СигналBS16# вводитьсязовнішньоюсхемою, якщопоточний цикладресуєтьсядо 16-битномувлаштування,підключеномудо молодшоїполовини шиниданих. Якщо вданому цикліприпускаласяпередача і двохстарших байт,процесор автоматичновводить додатковийцикл для передачіцих байт помолодшій половинішини даних.
Тип циклулокальної шинивизначаєтьсясигналамиM/IO#, D/C#, W/R#іLOCK#,комбінаціяяких дійснапід час активностісигналуADS# (стробадреси).Сигнали керуванняшиноюADS#, READY# іNA# задаютьтимчасові межіциклів і керуютьконвейєрноюадресацією.СигналADS# відзначаєпочатоккожного циклу,під час йогочинності виробляєтьсяідентифікаціятипу циклу іфіксуєтьсявідповіднайому адреса.СигналREADY# повиненвводитисязовнішньоюсхемою в кожномуциклі, відзначаючиготовністьдо завершенняпоточногоциклу. СигналNA#використовуєтьсядля запитаннянаступноїадреси приконвейєрнійадресації,коли зовнішнісхеми вже готовісприйняти новуадресу і сигналиідентифікації.Якщо процесорвже має внутрішнєзапитання нанаступний шиницикл, він видастьадресу і ідентифікаторинаступногоциклу до завершенняпоточного.
Сигналиарбітражулокальної шинипередвизначенідля передачікеруваннялокальною шиноюіншому влаштуваннюпо його запитанню- переходу встан лог. “1”лініїHOLD. Колипроцесор визнаєможливим передачукерування (внезаблокованихциклах відразупо завершенніпоточногошиногоциклу), він виставитьсигнал підтвердженняHLDA. Втакому станіпроцесор переводитьв високоімпеданснийстан всі двунаправленіі вихідні лінії.Цим станомможна користуватисяі для отладкиапаратнихзасобів. Шиніцикли процесорауявлені нарисунках1.4 і 1.5.
Впроцесорі 80386збільшивсябуфер передвиборкидо 16 байт, щозаповнюєтьсятепер подвійнимисловами. Всіосновні регістрипоширені до32 розрядів. Суматорилінійної адресизамінені однімтрьохвходовим.
В блокобчисленняадреси доданенове влаштування- блок трансляціїсторінок. Даневлаштуваннятранслює лінійнуадресу в фізичнуі перебує зтрьох основнихблоків: ПЛМкерування,суматор фізичноїадреси і кеш-пам'ятісторінок (TLB).
БлокTLB подаєсобою чотирьохвходовуасоціативнупам'ять, що містить20-розряднібазові адреси32 сторінок. Вякості тегавикористовуютьсястарші розрядилінійної адреси.Блок перебуєз двох модулейпам'яті, основноїі додаткової,і логіки обслуговування.Основний модульпам'яті містить8 блоків, кожнийз яких забезпечуєвходи в кадр,для 4 сторінок.Вхід в кадрпевної сторінкиреалізуєтьсяз допомогоюрозміщеноїв модулі рядкабітів,що міститьінформаціюпро що вибираєтьсясторінку (базоваадреса, атрибути)і інформацію,необхідну дляїї вибору.
РоботаTLB відбуваєтьсяслідуючимчином. Післяформуваннялінійної адреси3 молодших розрядиполя (біти14-12 лінійноїадреси) визначаютьномер одногоз восьмих блоків.Старші 17 розрядів(біти31-15) порівнюютьсяз 17 бітамитегів,що містятьсяв чотирьохрядках вибраногоблоку. При їхньомузбігу означенав стоцібазова адресазаміщає 20 старшихрозрядів лінійноїадреси.
Такимчином,кеш-пам'ятьсторінок покриває32*4Кб=128Кб адресногопростору, щодля більшостідодатків забезпечуєкеш-попаданияз імовірністю98%.
80486.
Інтерфейспроцесора 80486є тієї архітектурноюкомпонентою,що в найбільшомуступені відрізняєйого від попередника,80386. Зміни, внесенів набір сигналіві протоколиобміну, малиметою реалізуватив вигляді збільшеноїпродуктивності80486 ті перевагив швидкодіїі функціональноїпотужностінабору внутрішніхблоків, що з'явилисяза рахуноквикористаннябільш досконалоїмікроэлектронноїтехнології.
На змінуконвейєрноїадресаціїпопередніхпроцесорів,починаючи зпроцесора80486, введений режимпакетної передачі.Цей режимпередвизначенийдля швидкихоперацій зірядками кеша.Рядок кешапроцесора 80486має довжину16 байт, отже, дляїї пересилкивимагаєтьсячотири 32-розрядныхшинихциклу. Оскількивикористаннякешаприпускає, щорядок повиненв ньому бутиприсутнімцілком, ввелипакетний циклоптимизованийдля операційобміну внутрішньогокешаз оперативноюпам'яттю. В цьомуциклі адресаі сигналиідентифікаціїтипу шин циклувидаютьсятільки в першомутакті пакету,а в кожному знаступнихтактів можутьпередаватисядані, адресаяких вже непередаєтьсяпо шині, а вираховуєтьсяз першого поправилам, відомимі процесору,і зовнішньомувлаштуванню.В пакетний циклпроцесор можеперетворитибудь-яке внутрішнєзапитання намножественупередачу, алепри читаннійого розміробмежений однимрядком кеша,а при записів стандартномурежимі шинив пакет можезбиратися небільш 32 біт.Більш пізнімоделі процесорівпри роботі зWB-кешемпри записірядків в пам'ятьзбирають впакет чотири32-битных циклу,але це вже роботав розширеномурежимі шини486-го процесора.Пакетний циклпочинаєтьсяпроцесоромтак же, як ізвичайний: назовнішній шинівстановлюєтьсяадреса, сигналиідентифікаціїтипу циклу іформуєтьсястробADS#. Внаступномутакті передаєтьсяперша порціяданих, і, якщовона не єдина,сигналBLAST# маєпасивне значення.Якщо влаштування,що адресувалосяпідтримуєпакетний режим,воно повинновідповістисигналомBRDY# замістьсигналуRDY# поготовностіданих в першійже передачіданих циклу.В цьому випадкупроцесор продовжитьцикл як пакетний,не вводячитакту адресації-ідентифікації(з сигналомADS#),а відразу перейдедо передачінаступноїпорції даних.Нормально прозавершенняпакетного циклуповідомляєвлаштуваннюсигналомBLAST#, щовидається втакті останньоїпередачі пакету.Якщо у процесорає наміру зібратипакет, а влаштуваннявідповідаєсигналомRDY#, данібудуть передаватисязвичайнимициклами. ВведеннямсигналуRDY# замістьBRDY# зовнішнєвлаштуванняможе в будь-якиймомент перерватипакетну передачу,і процесор їїпродовжитьзвичайнимициклами. В ідеальномуваріанті (безтактів чекання)для передачі16 байт в пакетномурежимі вимагаєтьсяусього п'ятьтактів шинизамість восьми,що зажадалосяб при звичайномурежимі обміну.Пакетний режимприпускаєдодержанняодніх і тих жеправилформуваннянаступних адресяк процесором,так і зовнішнімвлаштуванням.Під часпакетного циклупроцесора 486старші бітиадресиA[31:4]залишаютьсянезмінними.Змінюватисяможуть тількибітиA [3: 2] ісигналиBE[3:4]#. Такимчином,один пакетнийцикл не можеперетинатимежу рядкакеша.Крім того,є специфічнийпорядок чергуванняадрес в пакетномуциклі, що визначаєтьсяпочатковоюадресою пакетуі розрядністюпередач. Якщопід час пакетногоциклу процесорвиявить активністьсигналівBS16# абоBS8# дотого, як перейтидо наступноїадреси, будутьзавершеніпоточні 32-бітніцикли. Оскількипакетний режимпідтримуєтьсязвичайно тількиоперативноюпам'яттю (разомзі вториннимкешем),розрядністьякої намагаютьсяне усікати,на практиціперетворенняпослідовностіадрес в 8 - або16-битные передачівряд чи девикористовується.Порядок чергуванняадрес в пакетномуциклі характернийдля всіх процесорівIntel ісумісних ізними, починаючиз 486-го. Він оптимизовандля двох банковоїорганізаціїпам'яті, підрозумуючейчергуваннябанків, щовикористаютьсяв сусідніхпередачахпакетногоциклу.
Процесор486 має чотиривнутрішніхбуферу дляоперацій запису.Якщо під часвнутрішньогозапитанняпроцесора назапис всібуферивільні і шинане позичена,запис виконуєтьсявідразу безбуферирування.Якщо шина позичена,запитанняспрямовуєтьсяв буфер, позичаючидля записутільки одинвнутрішнійтакт, а з буферудані вивантажуютьсяв оперативнупам'ять абовлаштуваннявведення-виведенняпо мірі звільненнязовнішньоїшини. Зовнішніоперації записуз буферів будутьвироблятисяв тому же порядку,що і запитання,щонадійшли. Однакякщо за наявностіневільнихбуферів з'явитьсязапитання начитання пам'яті,вономоже бути обслугованеі раніше, ніжзадовольнятьсяйому запитання,щопередують назапис. Ця змінапослідовностіможе відбутисятільки в томувипадку, якщовсі запитаннязапису в буферахзв'язані зкеш-попаданнями,а запитанняна читаннявідноситьсядо кеш-промаху.Тільки в цьомувипадку процесорможе сміломіняти порядокоперацій, алетільки одинраз до тих пір,доки не визволятьсявсібуферизапису. Більшеодного разуміняти порядокв загальномувипадку неможна, тому щолічені даніможуть заміститирядок,щомодифікувавсякеша,з якогооновлена інформаціяякраз і очікуєв буфері чергина запис в основнупам'ять. В такомувипадку другаспроба змінипослідовностіможе порушитицілісністьданих. Для операційвведення-виведеннязміна порядкунеможлива.Читання введення-виведенняніколи не можеобганяти записв пам'ять. Одинковіоперації висновкуне буферируютьсяз тим, щоб датиможливістьсвоєчасно (дляпрограми) повідомитиз своєї реакціїна запис в порт(викликатиапаратне перериванняабо цикл анулюваннярядка). Однакзасоби введенняпрограмноїзатримки міжодинковимиопераціямивисновку дляпроцесора 486відрізняютьсявід що передують:тут командаJMP, ранішебезумовно щонаводить догенераціїзовнішньогоциклу звертаннядо пам'яті скорішеусього будеобслугованаз внутрішньогокеша,і бажаної затримкине відбудеться.Надійним засобомвведення зовнішньогоциклу шини міжциклами виводає явна операціячитання некешуємоїобласті пам'яті.Ця операціябуде виконанатільки післязавершенняпопередньогоциклу висновку,а наступнаоперація висновкупочнетьсятільки по завершенніцього читання.Операції блочноговисновку, викликаніінструкцієюREP OUTS, будутьвикористатибуфери,але порядокне буде порушений.
СинхронизаціяпроцесораздійснюєтьсязовнішнімсигналомCLK, всітимчасовіпараметривідраховуютьсявідносно йогопозитивногоперепада. Зовнішнячастота процесоромвже не ділитьсянавпіл (як у386-го), а може навітьумножатисяна коефіцієнт,що у різнихмоделей процесорівможе прийматизначення 1, 2, 2.5 і3. При Цьомуінтерфейсзовнішньоїшини процесоразавжди працюєна зовнішнійчастоті, а частотатактуванняобчислювальногоядра можепідвищуватисяв декілька раз.Стандартнимизначеннямизовнішньоїчастоти є 25, 33.33,40 і 50 МГц.Коефіцієнтмноження задаєтьсярівнем логічногосигналу навходіCLKMUL.
Шина адресидозволяє адресувати4 Гб фізичноїпам'яті в захищеномурежимі і 1 Мб зобласті молодшихадрес в реальномурежимі. СигналомA20M# можнавключити примусовеобнуленнялініїA20 (якдля внутрішньогокэша, так і длязовнішніхоперацій). Такимчиномэмулюєтьсяциклічне поверненняадреси процесора8086/88 (сигнал сприймаєтьсятільки в реальномурежимі). Привиконанніінструкційвведення-виведенняпроцесор адресуєтьсяв 64 Кб просторивведення-виведення.ЛініїA[31:2]ідентифікуютьадресу з точністюдо подвійногослова, а в межахцього словасигналиBE[3:0]#безпосередновказують, якібайтивикористовуютьсяв даному циклі.ЛініїA[31:4], щовизначаютьадресурядка внутрішньогокеша,в циклах анулюванняпрацюють навведення.
Шина данихD[31:0]припускає як32-розряднийрежим, так і 16- і 8-розрядний,в залежностівід стану вхіднихсигналівBS16# абоBS8#. Але,в відзнаку від386-го, перекомутаціябайтівне здійснюється.Кожний байтшини даних маєбітпаритетуDP[3:0]. Схемипаритету генеруютькоректніконтрольнібітив циклах запису,а в циклах читанняв випадку помилкипаритету тількивиробляєтьсясигнал помилкина виходіPCHK#, щоніякне впливаєна роботу процесора.Він може використовуватисязовнішнімисхемами порозсуду розробникасистемноїплати.
Тип циклулокальної шинивизначаєтьсясигналамиM/IO#, D/C#, W/R#іLOCK# підчас активностісигналуADS#.
Сигналиарбітражулокальної шиниу порівнянніз попереднімипроцесорамидоповненівихідною лінієюBREQ, щоуправляєтьсяпроцесоромв будь-якомустані. Цей сигналвказує зовнішньомуарбітру на те,що процесормає внутрішнєзапитання навикористанняшини. Сигналвстановлюєтьсяводночас зістробомADS#. Якщопроцесор вданий моментне керуєшиною, тосигнал з'явитьсяв той момент,коли процесорвиставив бсигналADS#. Длязапитанняпередачі керуваннялокальною шиноюіншому влаштуваннювикористовуєтьсясигналHOLD. Колипроцесор визнаєможливим передачукерування, вінвиставитьсигнал підтвердженняHLDA. Крімтого,є сигнал безумовногоотключенняпроцесора відшини -BOFF#. Поцьому сигналупроцесор віддаєкерування шиноюв наступномуже такті, а поточнийцикл може бутиперерваний.По Закінченнючинності сигналуBOFF# процесоррестартуєперерванийцикл, зновуввівши тактадресаціїі ідентифікаціїзі стробомADS#. Длявнутрішніхвузлів процесораце бачитьсяяк введеннятактівчекання.СигналAHOLDпередвизначенийдля захопленнязовнішнімконтролеромтільки шиниадреси дляанулюваннярядків внутрішньоїкеш-пам'яті.Анулюваннярядка виробляєтьсяза наявностістроба зовнішньоїадресиEADS#.
До інтерфейсукеш-пам'ятівідносятьсявхідні сигналиKEN# (дозвілкешированняпам'яті по поточнійадресі),FLUSH# (анулюваннявсіх рядківвнутрішньогокешаз попереднімвивантаженнямрядків ,щомодифікувалисяв випадкузастосуваннязворотногозапису)і вихідні сигналиPWT іPCD, керуючізовнішнімкешированням.Процесори,працюючі врежимі зворотногозапису кэша,використаютьдодатковісигналиINV, HITM#, CASHE#іWB/WT#. Першіпроцесорисімейства 486-хв первинномукешезабезпечувалитільки політикунаскрізногозапису. Для нихне було необхідностів реалізаціїпакетногорежиму призаписі. Записзовнішнімконтролеромв кешуюмупам'ять наводитьтільки до анулюваннярядка кеша,якщо осередок,до якої будев обігу зовнішнійконтролер,уявлений і ввнутрішньомукеші.Для політикизворотногозапису інтерфейсускладнюється- необхіднозабезпеченняможливостівивантаженнярядків кеша,щомодифікувалисяв основну пам'ять,якщо до пам'яті,що відображаєтьсяцими рядками,буде в обігузовнішнійконтролер шини.З цими відмінностямизв'язані поняттястандартногоі розширеногорежиму шинипроцесора 486.Стандартнийрежим шинипередвизначенийдля роботипервинногокешаз політикоюнаскрізнийзапису, що повністюсумісно з інтерфейсомперших процесорів486 зWT-кешем.Його основнівідзнаки наступні:на сигналFLUSH# процесорне відповідаєспеціальнимциклом підтвердження;по сигналуFLUSH# процесоранулює всіхрядки внутрішньогокешаза 15-20 тактівCLK; сигнали,специфічнідляWB-кеша,ігноруються;сигналEADS#сприймаєтьсяв будь-якиймомент часу.Розширенийрежим шинипередвизначенийдля роботипервинногокешаз політикоюзворотногозапису, що повністюсумісно з інтерфейсомпроцесорів486 зWB-кешем.Його основнівідзнаки наступні:по сигналуFLUSH# процесорвиконує зворотнізаписи рядків,що модифікувалисякеша,після чоговідповідаєспеціальнимциклом підтвердження;зворотний записрядків ,щомодифікувалисякеша,що виконуєтьсяпо сигналуFLUSH# іінструкціїWBINVD, можепозичати біля2000 тактівCLK, системаповинна спостерігатиза шиною, очікуючиспеціальногоциклу підтвердження;сигналиBLEN#, EWBE#, WB/WT#, INVсприймаютьсяпроцесором;сигналWB/WT#сприймаєтьсяв кожному циклізвертання допам'яті, дозволяючивизначатиполітику записудля кожногорядка окремо;сигналEADS#сприймаєтьсятільки в станіHOLD, AHOLD абоBOFF#; сигналPLOCK# неактивний (постійнийвисокий рівень).Вибір режимушини здійснюєтьсяпроцесоромза станом лініїWB/WT# вмомент закінченнясигналуRESET, низькомурівню відповідаєстандартнийрежим шини.Сигнал всерединіпроцесорарезисторомпідтягуєтьсядо низькогорівня, так щона системнійплаті, не зворотногозапису ,що підтримуєрежим, процесорзавжди будепрацювати встандартномурежимі. На рисунку1.6 уявлений пакетнийцикл заповненнярядка кеш-пам'яті.
Процесор486 маєRISC-ядро,що зажадалодокорінноїзміни дешифраціїкоманд. Чергакодів перебуєз двох блоківпо 16 байт і заповнюється,або з кэша за1 такт, або швидкимипакетнимициклами поблочно.Запитання напередвиборкумає нижчийпріоритет упорівнянніз іншими запитаннями,що дозволяєзвести до мінімумучас, необхіднийдля вибіркиоперанда. Нарисунку 1.7 уявленийконвейєр процесора.
Більшістькоманд перебуваютьв крапках конвейєране більш одноготакту. Крімтогозапис результатуможе бути суміщенийз виконаннямнаступноїкоманди, якщобудь-якийоперанд наступноїкоманди, абоне перетинаєтьсяз результатомпопередньої,або перетинаєтьсяповністю (входитьв склад. НаприкладАХ і ЕАХ). Дешифрациякоманди виконуєтьсяв дві стадії.На першій стадіївиробляєтьсятрансляціякоманди вRISC-інструкцію.На другійстадії виробляєтьсяобчисленняадрес операндіві формуваннявідповіднихзапитань.
Арифметичнийблок має в свойомускладі окрімблоку цілочисельноїобробки ще іблок обробкичисел з плаваючоюкрапкою, щораніше входивв склад сопроцесора.
В складпроцесоравійшло ще одневлаштування,покликанезначно підвищитипродуктивність.Це кешпам'ять першогорівня, працюючана частотіядра. Кэш-пам'ятьмає розмір 8 Кбі має чотирьохвходовунаборно-асоціативнуструктуру. Їїробота аналогічнійроботі блокуTLB.
Процесормає внутрішню64-розряднушину, що зв'язуєкеш-пам'ятьз основнимивнутрішнімиблоками, щодозволяє заодин такт передаватиоперанд з плаваючоюкрапкою абодескрипторсегменту.
Pentium.
По інтерфейсушина процесораPentium нагадуєшину 486, але маєпомітні відзнаки.Нові особливостінаправленіна підтримкуполітики зворотногозапису кеша,підвищенняпродуктивностіі забезпеченнядодатковихфункціональнихможливостей.Якщо шина 486-гобула орієнтованана максимальнугнучкість іпростоту підключенняприладів зрізноманітноюрозрядностью,тошинаPentiumорієнтованана досягненнямаксимальноїпродуктивності.
Шина данихстала 64-бітнойдля підвищенняпродуктивностіобміну з пам'яттю.Можливістьдинамічногокеруваннярозрядністюшини вилучена,погодженняпо розрядностіз інтерфейснимишинами покладенена мікросхемичипсета. Придозволеномуконтролі паритетуданих (сигналPEN) помилкавикликає нетільки спрацьовуваннясигналуPCHK#, алеі фіксаціюзбойноїадреси і данихв регістрімашинногоконтролю. Аякщо встановленбітMCE регіструCR4, поцій помилцігенеруєтьсявиключення18. В доповненнядо контролюпаритету шиниданих введенконтроль паритетушини адреси.Виявлена помилкапаритету бітівA[31:5] шиниадреси тількивикликає сигналпомилкиAPCHK#, щоможе бути обробленийсистемноюлогікою.
Пакетніцикли виконуютьсятільки у разізвертання допам'яті, причомуяк при читанні,так і при записі.Пакетні циклизв'язані тількиз кешуємоюпам'яттю, прицьому кешуємістьпам'яті подразумуєі її підтримкупакетногорежиму. Під часпакетного циклусигнали дозволубайт і молодшібітиадреси не міняються.Порядок чергуванняадрес, як і упроцесора 486,оптимизовандля двухбанковоїорганізаціїпам'яті. Зновуз'явилася конвейєрнаадресація,що дозволяєводночас нашині бутиприсутімдвом обслуговуванимзапитанням.Ознакою пакетногоциклу (і йогозакінчення)є сигналCASHE#. Зовнішнясистема не можеперерватипакетний цикл,початий процесором.КонвейєризациязапрошуєтьсясигналомNA#, ввідповідь наякий процесорчерез тактвидасть адресунаступногоциклу. Безконвейєризаціїнаступна адресабула б виставленатільки післязавершенняпередачі данихпоточногоциклу.
Процесормає вхідEWBE#, здопомогою якоговін відсліджуєстан зовнішніхбуферів відкладеногозапису длязабезпеченнякоректнойпослідовностішинихциклів запису.
Дляпідтриманняпогодженостіданих кешаі основноїпам'яті процесорвідпрацьовуєцикли спостереження,що ініціювалисязовнішньоюсистемою. Ціцикли, як і в486-м, використаютьсигналиAHOLD#, EADS# івідповіднісигнали процесораHIT# іHITM#. СигналFLUSH# викликаєвивантаженнявсіх рядків,що модифікувалисяпервинногокеша.Цикли спостереженняініціюютьсясистемою длявизначенняприсутностізатребуваноїобласті пам'ятів рядку будь-яккеш-пам'ятіі визначенняїї стану. Процесори,починаючи зPentium,підтримуютьпротоколMESI, названийпо їм станам,щовизначаються:Modified, Exclusive, Shared, Invalid.Стану визначаютьсяслідуючимчином:M-state - рядокприсутнійтільки в одномукешіі модифікований,те є відрізняєтьсявід вмістуосновної пам'яті.Доступ до цьогорядка можливийбез генераціїзовнішнього(по відношеннюдо локальноїшини) циклузвертання;E-state - рядокприсутнійтільки в одномукеші,але не модифікований.Доступ до цьогорядка можливийбез генераціїзовнішньогоциклу звертання,при записі вонаперейде в станМ;S-state - рядокпотенційноможе бутиприсутнімв декількохкешах.Її читанняможливо безгенераціїзовнішньогоциклу, а записв неї повиннасупроводжуватисянаскрізнимзаписом в основнупам'ять, що притягнеанулюваннявідповіднихрядків в іншихкешах;I-state - рядокбуде відстунійв кеше,її читання можепризвести догенерації циклузаповненнярядка. Записв неї буде наскрізнийі вийде на зовнішнюшину. Шини циклипроцесорауявлені нарисунку 1.8.
ПроцесорPentium маєсуперскалярнуархітектуру,що означаєможливістьодночасноговиконання більшоднієї інструкціїза один такт.Він побудованийна основі двохконвейєрівзагальногопризначеннядля цілочисельнихоперацій іконвейєрногоFPU. Процесорможе виконувативодночас двіцілочисельніінструкції.
Структураконвейєрівуявлена нарисунку 1.9 (Пунктиромпоказані стадії,добавлені впроцесори зпідтримкоюММХ). На стадіїпередвибіркиPF командивибираютьсяз кешакоманд. Далівони надходятьна стадію вибіркиF. Тутвідбуваєтьсярозподіл вибраноїпорції кодуна окремі команди,а також декодуваннябудь-яких префіксів.Між стадієюF іD1 знаходитьсяFIFO-буфер.В ньому можеміститися дочотирьох інструкцій(в процесорахбез ММХ буфербуде відстуній,а префіксидекодуютьсяна стадіїD1). Буферпрозорий, т. є.вінне віднімаєчасу, коли пуст.В кожному тактіз стадіїF в буферможе надходитидо двох інструкцій.Бо середняшвидкістьвиконаннякоманд меншніж дві командиза такт, те буферзвичайно заповнений.
НастадіїD1 відбуваєтьсяперетвореннякоманд вRISC-інструкціїі прийняттярішення прораспаралелювання.Далі командинадходять вдва конвейєра.Обидва конвейєрафункціональноподібні, аледругийV конвейєру порівнянніз головнимU маєдеякі обмеження.СтадіяD2, наякій вираховуютьсяадреси операндівпам'яті, маєбагатоканальнийсуматор. В відзнакувід відповідноїстадії конвейєрапопередніхпроцесорів,ця стадія невводить додатковихтактів затримкипри багатокомпонентнихобчисленняхадреси. На стадіїЕХ відбуваєтьсябезпосереднєвиконаннякоманд в цілочисельнихАЛУ.Pentium маєокремий умножитель,що не використаєресурсів АЛУ,і, отже, дозволяєвиконуватиінші командипаралельноз множенням.Але бо умножительтільки один,дві командимноження нераспаралеливаються.Множення можевироблятисявV конвейєрі.Кожний конвейєрмає свій буферзаписуWB дляпідвищенняпродуктивностіпри послідовнихопераціяхзапису в пам'ять.Буфери маютьрозрядність64 б і можуть обидвазаповнитисяза один такт,наприклад, приодночаснихкеш-промахахзаписи на обидваконвейєрах.
В відзнакувід цілочисельнихкоманд, що цілкомвиконуютьсяна стадії ЕХ,командиFPU іMMX починаютьвиконуватисяна стадії ЕХ,а після цьогоуходятьна свої стадії.На стадіяхконвейєраFPU виконуютьсянаступні дії.На стадії ЕХвідбуваєтьсячитання операндівз пам'яті ірегістрів, даліперехід настадію Х1 абоперетворенняданих до зовнішньогоформату і записв пам'ять. Настадії Х1 відбуваєтьсяперетворенняданих до внутрішньогоформату і записв регістр. Настадії Х2 виконаннякоманд, а настадіїWF - округленняі запис результату.Для команд ММХіснують двасвоїх конвейєра,постаченихокремими АЛУі умножителями.На стадії ЕХвідбуваєтьсячитання операндів.Стадія Mex - виконаннякоманд, першийтакт множення.СтадіяWm/М2 -запис результатуоднотактнихкоманд, другийтакт множення.Стадія М3 - третійтакт множення.Wmul - записрезультатумноження.
Блокпопередньоївибірки інструкціймає чотири32-байтных буферу.На стадіїPF двінезалежні парибуферів вибіркипрацюють разомз цільовимбуфером ветвленняВТВ. В кожниймомент часупопереднювибірку інструкційможе активнозапрошуватитільки одинбуфер. Вибіркавиробляєтьсяпослідовнодо появи інструкціїгалуження. Колитака інструкціяз'являється,ВТВ завбачує,буде чи перехід.Якщо завбачуєтьсяперехід, тедозволяєтьсяробота іншогобуферу передвиборкиі він починаєпередвиборкуз цільовоїкрапки галуження.Якщо завбаченегалуження невідбулося,конвейєриінструкційскидаютьсяі передвиборкапочинаєтьсязнову. Оскількикешінструкційокремий відкэша даних,передвиборкаінструкційне конфліктуєз запитаннямиданих з кеша.
Pentium Pro.
ЗовнішнійінтерфейспроцесораPentium Proдокорінновідрізняєтьсявід всіх попередніхмоделей процесорів.Застосуваннядинамічноговиконання різкопідвищує частотузапитань процесорногоядра до шиниза даними пам'ятіі інструкціями,оскільки ядроводночас обробляєдекілька інструкцій.Для обходувузького місця- зовнішньоїшини - кристалпроцесорногоядра використаєархітектуруподвійноїнезалежноїшини. Одна зцих шин використовуєтьсятільки длязв'язку з кристаломвторинногокеша,розташованимв тому же корпусімікросхеми,а уPentium II - назагальномукартриджі.Ця шина є локальноюі в геометричномусенсі - провідникимають довжинупорядку одиницьсантиметрів,що дозволяєвикористатиїї на частотіядра процесора.Значний обсягвторинногокешадозволяє задовольнятибільшістьзапитань допам'яті сутолокально, прицьому коефіцієнтзавантаженняшини досягає90%. Друга шинапроцесорногокристалу виходитьна зовнішнівиводимікросхеми,вона і є системноюшиною процесора.Ця шина працюєна зовнішнійчастоті незалежновід внутрішньоїшини. Завантаженняпроцесоромзовнішньоїшини для звичайних“настольных”застосуванньскладає порядку10% від її пропускноїспроможності,а для сервернихзастосуванньможе досягати60% при чотирьохпроцесорнойконфігурації.Таким Чином,обмежена пропускнаспроможністьзовнішньоїшини перестаєсильно стримуватипродуктивністьпроцесора.Зниження навантаженняна зовнішнюшину дозволяєефективновикористатибагатопроцесорнуархітектуру.
СистемнашинаPentiumPro іPentium II більшефективна дляоб'єднанняпроцесорівпо симетричнійархітектурі,ніж шини попередніхпроцесорів,оптимизованідля обміну зпам'яттю. Вонадозволяє бездодатковихсхем об'єднуватидо чотирьохпроцесорів.
Сигналисистемної шиниоб'єднуютьсяв групи запитаньі відповідей.Кожне влаштування-агент,підключенедо цієї шини,до ініціализаціїзапитання черезмеханізм арбітражуповинно отриматиправо на використанняшини запитання.Запитаннявиходить задва суміжнихтакта:в першому тактіпередаєтьсяадреса,тип звертанняі тому подібнаінформація.В другому тактіпередаєтьсяунікальнийідентифікатортранзакції,довжина запитання,дозволені байтишини і т. п.Через три тактипісля запитанняперевіряєтьсястан помилкидля захистувід помилокпередачі абопорушень протоколу.Будь-яка виявленапомилка викликаєповтореннязапитання, адруга помилкадля того жезапитаннявикликає виключенняконтролю. Шинитранзакціїділяться набезліч фаз,перекриваючихдруг друга. Вфазі завершеннявсі агенти, щовідповідаютьна дане запитання,при необхідностіможуть виставитина шину кодизавершення.Інші процесорив цій фазі управляютьлініямиHIT# іHITM#, взалежностівід попаданнязапитання вїхнійвнутрішнійкеш.Агент, щоне встигаєвідповістиза відведенічотири такту,може виставитиводночас сигналиHIT# іHITM# длязатримки фазизавершенняна число тактів,кратне двом.В випадкукеш-попаданиязапитання допам'яті задовольняєпроцесор, оскількипередачі кеш-кэшвідбуваютьсяшвидше. Однакпри попаданнів рядок,щомодифікувавсяцикли звертаннядо пам'яті неминучі.На шині водночасможе бутиприсутнімбезліч запитаньі відповідей,однак логічнийаналізатор,“що розуміє”протокол шиниPentium Pro,здатний розкластиїх “по полочкам”відповіднихтранзакцій.
По складуі призначеннюсигналів системнашина процесорівшостої ґенераціїзначно відрізняєтьсявід шин попередніхпроцесорів.
ШинаREQ[4:0]# підчас першоготакту фазизапитання несечастину інформаціїпро транзакції,достатню дляініціалізаціїциклу спостереження.При транзакціїдоступу допам'яті тут жепередаєтьсяінформаціяпро розмірадресногопростору - 4 Гб(32-біта)або 64 Гб (38-біт).Під часдругого тактуфази запитанняпо цим лініямпередаєтьсядодатковаінформація,включаючадовжину поляданих. Можливозавдання довжини0-8, 16 або 32 байта.
ШинаA[35:3]#використовуєтьсябагатофункціонально.Під часпершого тактуфази запитаннявона міститьадреса пам'ятіабо введення-висновку,а для транзакційз відкладеноювідповіддю- її ідентифікатор.Під часдругого тактуфази запитанняця шина несеінформаціюпро атрибутитранзакції,її ідентифікатор,і додатковіфункції,що берутьучасть байтах.По закінченнюдії сигналуRESET# процесориз цих лінійодержуютьінформаціюпро конфігураціюпо включенню.
СигнализапитанняBREQ[3:0]#використовуютьсядля арбітражусиметричнихагентів. Агент“n” запрошуєшину, управляючисигналомBREQn#, аінші лініїрозглядає яквхідні. Симетричніагенти підтримуютьрозподілениймеханізм арбітражуна основі циклічноїзміни ідентифікаторапріоритету.“Що обертається”ідентифікаторподає собоювнутрішнійстан всіх симетричнихагентів длявизначенняагента з найменшимпріоритетомдля наступноїподії арбітражу.По включенніживлення щообертаєтьсяідентифікаторвстановлюєтьсяв значення 3,дозволяючиагенту 0 мативищий пріоритетз всіх симетричнихагентів. Почерговій подіїарбітражу новийстане рівнимномеру агента- поточноговласника шини,в результатічого, віддавшикерування шиноюпри наступнійподії, він отримаєнайнижчийпріоритет.Чергова подіятрапляється,коли виставляєзапитання довільної шиниабо поточнийвласник знімаєсвоє запитання.За станомлінійBREQ[3:0] ізначеннюідентифікатора,відомого всімагентам, вониводночас (пооднаковимправилам) визначаютьнового власникашини. Власникшини можевідраховуватикеруванняшиною, зберігаючиактивне значеннясвого сигналузапитання.Однак виявившизапитання відінших агентів,він по можливостіповинен віддатикеруванняшиною. Дляпідключеннядо шини арбітражуBREQ[3:0]#використовуютьсясигнали процесораBR0#(i/o) іBR[3:1]# (i).Під часконфігуруванняпо включеннюцентральнийагент повиненвиставитисигналBREQ0#. Всісиметричніагенти по сигналамприйнятим зісвоїх лінійBR[3:0]#,визначаютьсвій ідентифікаторагента. ПроцесорPentium IIрозрахованийна застосуванняне більш ніжв двухпроцесорнихсиметричнихсистемах, вінмає тількисигналиBR0# іBR1#. Тимчасовадіаграма роботипроцесорауявлена нарисунку1.10.
ВсімействіпроцесорівPentium Proвикористовуєтьсяархітектурадинамічноговиконання, вякійсочетаєтсязмінапорядку виконання,предположневиконанняінструкційз апаратнимперейменуваннямрегістрів іпередсказаннямветвлень.Їхньою відокремлювальноюрисою є те, щоінструкції,що минаютьчерез конвейєрв порядкунадходження,розбиваютьсяна найпростішімікрооперації,що виконуютьсясуперскалярнимпроцесорнимядром в порядку,зручному процесору.“Безладне”ядро процесорамістить декількаконвейєрів,до яких підключаютьсявиконавчіприлади. Декількавиконавчихприладів можутьоб'єднуватисяна одному конвейєрі.Конвейєр процесорамістить тричастини: препроцесор,ядро з неупорядоченимвиконанням,що упорядковуєвлаштування.Схема конвейєрауявлена нарисунку 1.11.
Конвейєрмає наступнісхідців. Буфермети галуженняВТВ зберігаєісторію і їхніхцільових адрес,щовідбувалисяветвлень.Кожний з 512 елементівВТВ зберігаєцільовуадресуі чотири бітипередісторії,що несуть інформаціюпро те, трапляласячи перехід заостанні чотирипроходу черезінструкціїгалуження,посилатисяна дану адресу.Якщо на підставіаналізу передісторіїзавбачуєтьсяперехід, цільоваадреса посилаєтьсяв блок предвиборки,не чекаючивиконанняінструкціїгалуження.ОкрімBTB, Pentium Proмає буфер стековихвертаннь,що дозволитькоректно завбачуватиадресу поверненняз процедур, щовикликаютьсяз різноманітнихкрапок. Такимчином,виклик процедурив лінійнійпослідовностікодів не наводитьдо втратипродуктивностіпредвиборки.Блок вибіркиінструкційIFU маєдві стадії. Напершій стадіїінструкціївибираються16-байтнимипакетами, зрівненимипо межам параграфів.На другий стадіїінструкціїпопереднодекодуютьсяі вкладаютьсяв два буферупо 16 байт вжебез прив'язкидо меж параграфів.На східціID процесормає три декодера.Перший декодерза один тактздатний декодуватьодну макроінструкцію,що містить дочотирьохмікрооперацій.Два інших декодераможуть за тактдекодуватитільки інструкцію,що перебує зоднієї мікрооперації.Більш складніінструкціїдекодуютьсяза декількатактів.
В кожномутакті декодериможуть вироблятидо шести мікрооперацій,що надходятьв спеціальнучергу. З чергидо трьох мікроопераційнадходять настадіюRAT. Тутвідбуваєтьсяперейменуваннярегістрів, ана стадіїRS резервуваннямісця вROB. ROBорганізованийв вигляді кільцевогобуферу на 40 місця.Микрооперациинадходять вROB впорядку чергиі удаляютьсяв порядку черги,а виконуватисямікроопераціїможуть позачергою по міріготовностівихідних данихі доступностівиконавчихприладів. Дотрьох мікроопераціїможуть передаватисяна виконанняв кожному такті.В залежностівід функції,що виконуєтьсямікроопераціяспрямовуєтьсяв один з п'ятихпортів. До кожногопорту прикріпленісвої виконавчіприлади. Порт0 може міститицілочисельнеАЛУ іFPU, порт1 - цілочисельнеАЛУ, порт 2 - блокзавантаженняданих, порт 3 -блок адресизапису, порт4 - блок данихзапису. В процесоріPentium II порт0 містить АЛУММХ і умножительММХ, а порт 1 - АЛУММХ і зсувательММХ. Після виконаннямікроопераціявертаєтьсязворотно вROB, деочікує вилучення.Після того якрезультатмікроопераціїбув записанийвROB, він(результат)ставає доступниміншим мікроопераціям.
1.3 Програмнамодель мікропроцесорів
Регістризагальногопризначення.
Для виконанняобчислень іадресаціяпроцесори мають8 регістрівзагальногопризначення.В процесорах8086/88 і 80286 ці регістримають розрядність16 біт.Регістри АХ,ВХ,DX і СХприпускаютьзвертання якдо всього регістру,так і до їхніхмолодших істарших частин.РегістриSP, BP, SI іDI припускаютьзвертаннятільки до всьогорегістру. В32-розряднихпроцесорахвсі ці регістримають 32 розрядиі містять вмолодшій частинірегістри попередніхпроцесорів.Імена 32-разрядныхрегістрівпочинаютьсяз символу “Е”((ЕАХ, ЕВХ і т. Д.).Кожний регістрмає своє призначення,але як правиломоже використовуватисяі в інший ролі.
(Е) АХ - аккумулятор;
(Е) СХ - лічильник;
(Е)DX - регістрданих;
(Е) ВХ - регістрбазової адреси;
(Е)SP - покажчикстека;
(Е) ВР - додатковийпокажчик стека;
(Е)SI - індексоперанда-джерела;
(E)DI - індексоперанда-приймальника;
В 16-разрядныхпроцесорахдля адресаціїзастосовуютьсярегістри ВХ,ВР,SI іDI врізноманітнихкомбінаціях,причому регістриВХ і ВР містятьбазовуадресу,аSI іDI - індекс.В 32-розряднихпроцесорахв якості базовогоабо індексногоможе виступатибудь-який регістр.
Сегментнірегістри.
Для наданнягнучкостіпрограмам впроцесорахє сегментнірегістри. Адресаціяпам'яті завждивиконуєтьсявідносно якого-небудьсегменту, параметриякого зберігаютьсяв сегментномрегістрі. Впроцесорі8086/88 є 4 16-разрядныхсегментнихрегістра,що зберігаютьсегментнуадресу.У разізвертаннядооперанду впам'яті формуєтьсяйого лінійнаадреса шляхомпідсумовуваннязміщення операндав сегменті зсегментноюадресою, зсунутоюна 4 розрядиліворуч. В підсумкуодержується20-розрядналінійна адреса,по якійпроцесор виробляєвибірку. В процесорі8086/88 не застосовуєтьсяжодний захистпам'яті, томудо всіх сегментіврозв'язанийдоступ як позапису так іпо читанню.Сегмент можерозташуватисяпо будь-якійадресі кратній16 і має розмір64 Кб. Кожномусегментномурегістру відведенасвоя роль.
DS- сегмент даних;
CS- сегмент коду;
SS- сегмент стека;
ES- додатковийсегмент даних.
При адресаціїданих за замовчаннямзавжди застосовуєтьсярегістрDS, однакдодавши передкомандою відповіднийпрефікс, можназвернутисядо будь-якогосегменту.
Процесор80286 підтримуєзахист пам'яті,тому його сегментнірегістри булиістотно переробленіі доповнені.Тепер сегментнийрегістр перебуєз двох основнихчастин:
Селекторначастина в режиміреальних адресмістить сегментнуадресу,а в захищеномурежимі - селекторсегменту, індикатордескрипторнїтаблиці і пріоритетзапитання. Має16 розрядів івідповідаєсегментномурегістру процесора8086/88 в усіх операціяхпо завантаженню/вивантаженню;
Дескрипторначастина міститьбазовулінійнуадресу(24 розряди)початкусегменту, розмір(16 розрядів) іатрибути.
Формуваннялінійної адресиоперанда зводитьсядо підсумовуваннязміщення збазовою лінійноюадресою сегментуз відповідноїдескрипторнойчастини. В режиміреальних адреспри завантаженнісегментногорегістру значеннясегментноїадреси зсуваєтьсяліворуч на 4розрядиі записуєтьсяв поле базовоїадреси. Розмірсегментувстановлюєтьсярівним 64 Кб, аатрибути дозволяютьвикористатисегмент як длязапису так ідля читання.В захищеномурежимі всядескрипторначастина завантажуєтьсяз таблицідескрипторівв відповідностіз селектором.В будь-якомурежимі розмірсегменту неперевищує 64Кб.
В 32-розряднихпроцесорахбула доопрацьованадескрипторначастина сегментнихрегістрів. Полебазової лінійноїадреси поширенедо 32 розрядів,поле розмірусегменту поширенедо 20 розрядів.В атрибутахз'явилося дванових біти:бітрозрядностісегменту і бітдрібності(дрібнішеці бітибудуть описанів розділі,присвяченомузахищеномурежиму). Крімтогоз'явилося дванових сегментнихрегістраFS іGS. Вонивикористовуютьсянаряду з регістрамиDS іES длязберіганняпараметрівсегментівданих.
Регістрпрапорів.
Регістрпрапоріввикористовуєтьсядля зберіганнярезультатіварифметичнихоперацій ікеруванняпроцесором.В процесорах8086/88 і 80286 регістрпрапорів має16 розрядів.
Призначенняпрапорів наступне:
CF- прапорперенесення;
PF- прапорпаритету;
AF- прапорполовинногоперенесення;
ZF- прапорнуля;
SF- прапорзнаку;
TF- прапортрасировки;
IF- прапорпереривання;
DF- прапорнаправлення;
OF- прапорпереповнення.
ПрапориCF, PF, AF, ZF, SFіOF відображаютьрезультатвиконанняарифметичноїоперації івикористовуютьсядля організаціїветвленньв програмахшляхом виконанняпереходу припевному станіякого-або прапора.
НастановапрапораTF наводитьдо того, що післявиконаннякожної інструкціїпроцесор будегенеруватипереривання1. Скид прапораIF призведедо забороніобробки апаратнихперериваннь,що маскуються.ПрапорDF вказуєнаправленняпри виконанністроковыхкоманд.
В процесорі80286 додалися дванових поля, щовикористовуютьсяв захищеномурежимі.
ПрапорNT (біт14)задає поведінкукомандиIRET (поверненняз переривання),якщо він скинут,адреса поверненнябуде вибиратисяз стека, а якщовстановлен- відбудетьсяпереключеннязадачі. Данийпрапор встановлюєтьсявсякий раз,коли відбуваєтьсяпереключеннязадачі шляхомвиконаннякоманд передачікерування абовиклика перериванняі скидаєтьсяпри поверненнідо попередньоїзадачі шляхомвиконаннякомандиIRET. Всеописане вищевідноситьсятільки до захищеногорежиму.
ПолеIOPL (біти13-12)задає рівеньпривілейвведення-виведення.Команда введення-виведеннябуде виконанатільки якщозначення вцьому полічисельно більшезначення поточногорівня пріоритету.Дане поле такожмає сенс тількив захищеномурежимі.
В процесорі80386 регістр прапорівпоширений до32 розрядів імістить дванових прапора:
RF(біт16) - прапор поновлення,використовуєтьсяспільно з регістрамикрапок останова;
VM(біт17)- прапорвиртуальноїмашини. В захищенийрежим 32-разрядныхпроцесоріввведений новийподрежим. Настановаданого прапоранаводить дотого, що формуваннялінійної адресив захищеномурежимі здійснюєтьсятакож, як і врежимі реальнихадрес, але прицьому зберігаєтьсяробота механізмузахисту задачі введення-виведення.
В процесор80486 був доданийтільки одинновий прапор-AC (біт18).Настанова цьогопрапора наводитьдо включеннямеханізмуконтролю завирівнюваннямоперандів.
В останніхмоделях 80486, атакож в процесорахPentiumз'явилися тринових прапора:
ID(біт21)- якщовдається встановитицей прапор,значить процесорпідтримуєкомандуCPUID, щозакликанаповідомлятипрограмі користувачаінформаціюпро процесор;
VIP(біт20)- віртуальнезапитанняпереривання;
VIF(біт19)- віртуальнийпрапор переривання.
В процесорахPentium Pro іPentium IIрегістр прапорівне змінивсяу порівнянніз процесорамиPentium.
Системнірегістри.
Системнірегістрипередвизначенідля завданнярежимів роботипроцесора, атакож для зберіганняпокажчиківна системніобласті даних.
В процесорі8086/88 є тільки одинрегістр, щоможна лічитисистемним. Церегістр покажчикакомандIP. Данийрегістр має16 розрядів імістить зміщеннянаступноїкоманди в сегментікоду. Програмане може напрямупрацювати зцим регістром,однак виконуючипереходи, вонапобічним образомзмінює вмістрегіструIP.
В процесорі80286 в зв'язку зпідтримкоюзахищеногорежиму буввведений цілийряд системнихрегістрів длязберіганняпокажчиківна системніобласті пам'ятіі керуванняпроцесором.
РегістрGDTR зберігаєпокажчик натаблицю глобальнихдескрипторіві її розмір.Має два поля:поле лінійноїадреси початкутаблиць (24 біти)і поле розмірутаблиці (16 біт).Доступ до цьогорегістру здійснюєтьсяз допомогоюкомандLGDT іSGDT длязавантаженняі збереженнявмісту регіструвідповідно.
РегістрIDTR повнутрішньомуформату відповідаєрегіструGDTR ізберігає покажчикі довжину таблиціперериваннь.В попередньомупроцесорітаблиця перериванньзавжди розташуваласяв початку фізичноїпам'яті. В процесорі80286 вона можерозташуватисяв будь-якомумісці пам'яті.
РегістрLDTR повнутрішньомуформату нагадуєсегментнийрегістр і зберігаєбазовуадресу,розмір і атрибутилокальноїдескрипторноїтаблиці.
РегістрTR повнутрішньомуформату нагадуєсегментнийрегістр і зберігаєбазовуадресу,розмір і атрибутисегменту станупоточної задачі.
РегістрMSW - словостану машини.Має 16 розрядіві містить чотирипрапора:
PE(біт0)- дозвілзахисту. Настановацього прапорапереводитьпроцесор взахищенийрежим, поверненняв реальнийрежим можливетільки по сигналуRESET;
MP(біт1) - моніторінгсопроцесора,дозволяє викликативиключення7 по кожній командіWAIT;
EM(біт2) - емуляціясопроцесора.Настановацього прапоравикликає появувиключення7 при кожнійкоманді, стосовнійдо сопроцесору,що дозволяєздійснюватийого програмнуемуляцію.
TS(біт3) - переключеннязадач. Встановлюєтьсяпроцесоромпісля кожногопереключеннязадачі. СкидаєтьсякомандоюCLTS. Привстановленомупрапорі, команда,стосовна досопроцесору,викличе виключення7, що дозволяєпрограмновизначити,відноситьсячи контекстсопроцесорадо поточноїзадачі.
Починаючиз процесора386 зміниласярозрядністьполів системнихрегістрів. Такполе базовоїадреси регістрівGDTR, IDTR, LDTRіTR поширилосядо 32 розрядів.РегістрMSW поширивсядо 32 розрядіві називаєтьсятеперCR0. Вньому з'явилисянові прапори:
WP(біт16)дозвіл захистувід запису нарівні привілейсупервізорав сторінкитільки длячитання;
PG(біт31)включеннямеханізмутрансляціїсторінок.
В зв'язкуз підтримкоюмеханізмутрансляціїсторінок з'явилисятакож два новихрегістри:CR2 - містить32-битнулінійнуадресу,по якійбула отриманаостання відмовасторінки пам'ятііCR3, старші20 розрядів якогозберігаютьфізичнуадресукаталогасторінок.
В процесорі80486 регістрCR0 бувдоповненийдекількомановими прапорами:
ET(біт4) - індикаторпідтримкиінструкційматематичногосопроцесора;
NE(біт5) - дозвіл стандартного(дляIntel)механізмуповідомленняпро помилкуFPU черезгенераціювиключення.ПриNE=0 іактивномусигналіIGNNE# помилкиFPUігноруються.ПриNE=0 іпасивномусигналіIGNNE# привиникненніпомилкиFPU процесорзупиняєтьсяі чекає переривання,вводимогозовнішньоюлогікою посигналу нависновкуFERR#. Такимчиномемулюєтьсяобробка помилокFPU, прийнятав РС зі часівсопроцесорів80287 і 80387;
AM(біт18)- дозвіл контролювирівнювання(контрольвиконуєтьсятільки на рівніпривілей 3 приАМ=1 і прапоріАС=1);
NW(біт29)- заборона наскрізназапису кешаі циклів анулювання;
CD(біт30)- забороназаповненнякеша(кеш-попаданияв раніше заповненірядки при цьомуне забороняються).
В регістрCR3 булидодані дванових б:PCD (б 4)- заборонакешуванняіPWT (б 3)- кешуваннясторінки зінаскрізнимзаписом.
В останнімоделі 80486 і процесориPentium бувдоданий регістрCR4, щомістить бітидозволу архітектурнихрішень.В даному регістрівизначенінаступні біти:
VME(біт0) - дозвіл механізмувіртуальнихперериваннь;
PVI(біт1) - дозвіл використаннявіртуальногопрапора перериванньв захищеномурежимі;
TSD(біт2) - перетворенняінструкціїRDTSC впривілейовану(тількиPentiun+);
DE(біт3) - дозвіл крапокостанова позвертанню допортів введення-виведення;
PSE(біт4) - дозвіл сторінокрозміром 4 Мб(тількиPenium+);
PAE(біт5) - дозвіл 36-розрядноїфізичної адреси(тількиPentium Pro+).
Сегментаціяпам'яті.
Захищенийрежим почаввперше підтримуватисяпроцесором80286. Наступніпроцесоритільки доповнювалирежим новимиможливостями,але основніпоняття і механізмизалишилися.
При роботіпроцесора взахищеномурежимі кожнийз сегментівкоманд, даних,стека характеризуєтьсявідповіднимиатрибутами,що визначаютьлокалізаціюданого сегментув адресномпросторі пам'ятіі правила звертаннядо нього. Атрибутисегменту уявленів вигляді 8-байтнойструктуриданих, що називаєтьсядескриптором.
Дескрипторисегментівзберігаютьсяв пам'яті масивівданих, що сформувалисяв вигляді таблиць.Процесор використаєтри типу таблицьдескрипторів:GDT - глобальнатаблиця дескрипторів;LDT - локальнатаблиця дескрипторів;IDT - таблицядескрипторівперериваннь.
ТаблицяGDT міститьбудь-які типидескрипторів,окрім тих,щовикористаютьсяпри обробціперериваннь.ВGDT заносятьсядескрипторисегментів, щоможуть використовуватисясистемою привиконаннірізноманітнихзадач. ТаблиціLDT містятьдескрипторисегментів, щовикористаютьсяпри рішенніпоточної задачі.Кількістьтаблиць,щостворюютьсяLDT визначаєтьсяопераційноюсистемою ізалежить відчисла задач,щореалізуються.В принципікожна задачаможе мати окремуLDT, щовключає дескрипторисегментів, щовикористаютьсяпри її рішенні.Крім того,LDT можутьмістити спеціальнідескрипторишлюзів - крапоквходу в програмиабо задачі. Ввипадку спільноговикористаннясегментівтаблиціLDT можутьповністю абочастково перекриватидруг друга.ТаблицяIDTвикористовуєтьсядля реалізаціїперериваннь.Таблиці можутьмати розміривід 8 байт до64 Кб, т. є.Містити до 8192дескрипторів.
Звертаннядо необхідногодескрипторуздійснюєтьсяз допомогоюселектора, щоміститься ввідповідномусегментномрегістрі. Селекторподає собою16-разрядныйпокажчик, щомає три поля(рисунок1.13.).
ПолеRPL (біти1-0)визначає рівеньпривілей запитання.Це двухрозряднийкод, що вказуєдопустимийрівень захистусегменту, щоможе бути вибранийз допомогоюданого селектора.
ПолеTI (біт2) служить індикаторомтаблиці. Йогозначення вказуєтаблицю,щовибирається:GDT приTI=0, LDT приTI=1.
Поле ІНДЕКС(біти15-3) служить індексомдля виборуодного з 8192 дескрипторів.
Селекторз нульовимзначеннямназиваєтьсянуль-індикатором.Він забезпечуєзвертання допершого дескрипторув таблиціGDT. Цейдескрипторне використовуєтьсяпри роботіпроцесора, томупри його вибірцівиконуєтьсяпереривання.
Кожна зтаблиць маєвідповіднийрегістр:GDTR, LDTR, IDTR.РегістрGDTR містить48 розрядів (40 в80286), з яких 32 (24 в 80386)задають базовуадресу таблиці,а 16 розрядіввказують їїобсяг в байтахмінус 1. Якщоподставитив молодші 3 розрядуселектора нулі,тоотримаєтьсязміщення дескрипторав таблиці. Цезміщення порівнюєтьсяз межею таблиці.В випадку, якщозміщення виходитьза межі таблиці,виробляєтьсявиключення.Якщо порушеннямежі немає,зміщенняпідсумовуєтьсяз базовою адресоютаблиці, в результатіутворитьсялінійна адресадескриптора.Дана перевіркаі наступнеформуванняадреси справедливідля всіх таблиць.
РегістрLDTR містить16-разрядныйпокажчик, щовизначає розміщеннявGDT дескрипторатаблиці,щовикористаєтьсяLDT. ДескрипторLDT містить32-розрядний(24-розряднийв 80286) базову адресутаблиці і її16-розряднийрозмір, що призавантаженнірегіструLDTR вибираютьсязGDT ізберігаютьсяв внутрішніхпрограмнонедосяжнихрегістрахпроцесора.
Післявибору відповідногодескриптораформуваннялінійної адресиздійснюєтьсяшляхом додаваннябазової адреси,що міститьсяв дескрипторі,і відносноїадреси, що утворитьсяв відповідностіз що використаютьсязасобом адресації.
Окрімбазової адресиі розміру сегментудескрипторавизначаютьряд інших важливихйого атрибутів.В загальномувигляді форматдескрипторауявлений нарисунку1.14.
В процесорі80286 біти63-48 зарезервованіі повинні бутирівним нулю.
В поле“доп. Атрибути”присутнє4 біти:
БітдрібностіG (біт55)вказує, в якиходиницях заданийрозмір сегменту:в байтах приG=0 абосторінкахобсягом по 4Кб приG=1. Такимчином,в процесорах80386+ сегмент можемати розмірдо 220*4Кб= 4Гб;
БітрозрядністьD (біт54). Даний бітмає сенс тількидля сегментівкоду і стека.Для сегментукоду він задаєрозрядністьоперандіві адреси зазамовчанням.Для сегментустека він задаєрозрядністьосередківстека, приD=1 длястековихопераційвикористовуєтьсярегістрESP, іосередок стекамає 32 розряди,т. є.Навіть привталкуваннів стек 16-розрядногословаESP зменшитьсяна 4;
Біт53 передвизначенийдля майбутніхрозширенньі повинен містити0;
Біт52 не використовується.
Байт доступудескрипторавизначає правадоступу досегменту ,щовибирається.В залежностівід вмістусегменту байтдоступу маєрізноманітніформати (малюнок1.15), хоча призначенняряду полівзалишаєтьсяоднаковим.Однакове призначеннямають наступніполя:
БітприсутностіР визначаєнаявністьвідповідногосегменту впам'яті. ЯкщоР=0 (сегмент будевідстуній), теданий дескрипторне використовуєтьсядля формуванняадрес. В цьомувипадку вмістінших розрядівдескриптораможе бути довільним.Якщо в регістрсегменту надходитьселектордескриптора,що є Р=0, те процесоргенерує виключення“відсутністьсегменту”.Обработчикданого виключенняможе підвантажитинеобхіднийсегмент з диску;
ПолеDPL вказуєрівень привілейдескриптора.В залежностівід співвідношеннязначеньDPL, CPL (поточнийрівень привілей)іRPL, щозадається вмолодших бітахселектора,дозволяєтьсяабо забороняєтьсязвертання доданого сегменту.Таким чиномзабезпечуєтьсярівень ,щовимагаєтьсязахисту сегменту;
СистемнийбітS визначаєроль що вибираєтьсядескрипторав системі. ПриS=1 дескрипторзабезпечуєзвертання досегментівкодів або даних.Дескрипторы,що єS=0, служатьдля звертаннядо таблицьLDT, сегментівTSS, абошлюзів длявходу в іншізадачі абопрограми, включаючиобработчикиперериваннь.Такі дескрипториназиваютьсясистемними.
Поле типусистемногодескрипторавизначає йоготип. Типи системнихдескрипторовнаведені втаблиці 1.1.
Таблиця 1.1Типи системнихдескрипторов.
Тип | Визначення | Тип | Визначення |
0 1 2 3 | Невикористовується ДоступнийTSS 286 ТаблицяLDT ЗайнятийTSS 286 | 8 9 A B | Невикористовується ДоступнийTSS 386+ Зарезервирован ЗайнятийTSS 386+ |
4 5 6 7 | Шлюзвиклика 286 Шлюззадачі Шлюзперериваннь286 Шлюзловушки 286 | C D E F | Шлюзвиклика 386+ Зарезервирован Шлюзперериваннь386+ Шлюзловушки 386+ |
В процесорі80286 доступні тількитипи з 0 по 7.
Можнавиділити триосновних класусистемнихдескрипторів.
ДескрипторитаблицьLDT (тип2) забезпечуютьзвертання долокальноїтаблиці дескрипторівдля виборусегментів.
ДескрипторысегментівTSS (типи1 3 9 В) використовуютьсяпри переключеннізадач в багатозадачномурежимі. Біт1 в байтідоступу сегментуTSS пазиваетьсябітомзайнятостіі вказує, є чизадача,щовикликаєтьсязайнятой.Цей бітдескрипторавстановлюєтьсяв одиницю, колипроцесор виконуєвиклик задачі,і скидаєтьсяв нуль при виконанніповерненнядо попередньоїзадачі. Б зайнятостівикористовуєтьсядля запобіганняповторноговиклика вжепрацюючоїзадачі. Переключенняна зайнятузадачу наводитьдо генераціївиключення13.
Відзначимо,що дескрипториLDT іTSS завждиповинні матизначення бітарозрядностіD=0.
Дескрипторишлюзів (типи4-7,C, E, F)використовуютьсядля звертаннядо програм ізадач, а такожпри обробціперериванньі ловушек.
Форматибайта доступудля дескрипторівкодів і даних(S=1)показані нарисунку1.15. Вони відрізняютьсязначеннямиб виконавчостіЕ: Е=1 для сегментівкодів і Е=0 длясегментів данихі стека.
Бітзвертання Австановлюєтьсяв одиницю уразі звертаннядо сегментут. є.При завантаженнівідповідногодескрипторав сегментнийрегістр. Цейбітперіодичноперевіряєтьсяопераційноюсистемою, щореалізує віртуальнупам'ять, що такимчином виявляєнезапитанісегменти, щоє А=0. Сегменти,довгий час щозалишаютьсянезапитаними,виводятьсяз оперативноїпам'яті на диск,звільняючимісце для іншихсегментів.
Бітдозволу читанняR вводитьсядля сегментукодів і дозволяєприR=1 вироблятичитанняйого вмісту.ПриR=0 допускаєтьсятільки вибіркавмісту цьогосегменту длявиконання черезрегістрCS. Спробачитанняв цьому випадкувикличе виключення13. Відзначимо,що виключенняцього типувиникне такожпри спробізапису в сегментпрограм незалежновід значеннябітуR.
Біт підпорядкуванняЗ визначаєдодатковіправила звертання,що забезпечуютьзахист сегментівпрограм.
Біт дозволузаписуW вводитьсядля сегментівданих. ДозволяєприW=1 абозабороняє приW=0 змінавмісту цихсегментів.Читання з сегментівданих розв'язанезавжди.
БітнаправленнярозширенняED визначаєрозміщеннясегменту данихвідносно базовоїадреси. ПриED=0 (розширеннявверх) дані всегменті розміщуютьсяв направленнізростання адресвід базовоїадреси до межі.ПриED=1 (розширеннявниз) дані всегменті розташуютьсяв направленнізменшенняадрес. Такимчином,при розширеннівверх відноснаадреса осередкасегменту повиннабути менш аборівназначенню розмірусегменту, прирозширеннівниз відноснаадреса повиннабути більшерозміру сегменту.
Захист пам'яті.
Процесормає спеціальнізасоби, щозабезпечуютьв захищеномурежимі захистпам'яті віднесанкціонованогодоступу. Длязахисту інформації,що зберігаєтьсяв сегментахпам'яті, використовуєтьсясистема привілей,що регулюєдоступ до тогоабо іншогосегменту взалежностівід рівня йогозахищеностіі від ступенюважливостізапитання. Впроцесорівстановленічотири рівняпривілейPL, щозадаютьсяномерами від0 до 3. Найбільшпривілейованимє рівень з меншимномером. Ступіньзахищеностісегменту такожмає чотирирівня, що схематичніподаються ввигляді вкладенихколецьзахисту (малюнок1.16).
Відповіднірівні захищеностіілюструютьсяна прикладісегментівкодів. Наименеезахищенимиє програмикористувача,для яких виділяєтьсярівень з номером3. Рівні з 0 по 2відводятьсядля системнихпрограм.
В відповідностіз рівнями привілейі захищеностівстановленінаступні правиладоступу длясегментів кодіві даних.
Дані зсегменту, щоє рівень захистуPL можутьбути вибраніпрограмою, щоє такий же абобільш високийрівень привілей.
Сегменткодів (процедура),рівень ,що єзахистуPL, можебути викликанийпрограмою, щоє такий же абобільш низькийрівень привілей.
Необхідновідзначити,що правило 2 невиконуєтьсяпри викликовісегментівкодів, що євстановленийбітпідпорядкованостіС=1 в байтідоступу дескриптора.
Рівнізахисту і привілейвизначаютьсядвома бітами,значення якихвказує номеркільця захисту.В залежностівід місця розміщеннябітимають різноманітнепризначення.
Рівеньпривілей дескриптораDPL задаєтьсябітами 5 і 6 в байтідоступу дескриптора.ЗначенняDPL вказуєрівень захищеностісегменту, т. є.Номер кільцязахисту, доякого вінвідноситься.
Рівеньпривілей запитанняRPL задаєтьсябітами 0 і 1 селектора.ЗначенняRPL визначаєрівень привілей,ініціаторазапитання-звертаннядо сегменту.Ініціаторомє програма абовлаштування,що з допомогоюселектора будев обігу до пам'ятісистеми.
Поточнийрівень привілейCPL задаєтьсябітами 0 і 1 селектора,розміщеногов регістріCS. Визначаєрівень привілейв нинішніймомент сегменту,що виконуєтьсяпрограми.
Процесормає спеціальнукомандуARPL, щовикористаєтьсядля корекціїзначенняRPL селектора.При цьомуселектор служитьпершим операндомкоманди. В якостідругого операндав регістрзавантажуєтьсяпоточне значенняCS. Привиконаннікоманди порівнюютьсязначення двохмолодших бітівоперандів,що містятьRPL іCPL. ПолеRPL селектораприймає максимальнез значеньRPL іCPL, т. Е.Встановлюєтьсямінімальнийрівень привілейзапитання. ЯкщозначенняRPL прицьому змінилося,те встановлюєтьсяознакаZF.
Звертаннядо сегментівкодів і данихв захищеномурежимі виробляєтьсяз урахуваннямописаної вищесистеми привілей.При цьомуправила залежатьвід типу сегменту.
Звертаннядо сегментівданих виробляєтьсяз допомогоюселекторів,що завантажуютьсяв регістриDS, ES, FS, GS.При звертанніаналізуєтьсязначенняRPL селектораіCPL програми.Ефективнийрівень привілей(EPL)для запитанняданих в цьомувипадку визначаєтьсяяк максимальнез значеньRPL іCPL. Звертаннядо сегменту,що запрошуєтьсяданих дозволяється,якщо його рівеньзахистуDPLEPL. Порушенняцього правилавикликає прерываниетипу 13.
Звертаннядо сегментівкодів, т. є.Передача керуванняреалізуєтьсяпри виконаннікоманд міжсегментнихпереходів.Правила звертаннядо сегментівкодів залежатьвід значеннябітапідпорядкованостів байтідоступу дескриптора.
Звертаннядо підлеглихсегментівдопускаєтьсятільки з програм,що є такий жеабо більш низькийрівень привілей.Таким чином,в програмахз поточнимрівнем привілейCPL можутьвиконуватисяміжсегментнікомандиJMP, CALL зпередачеюкеруванняпідлегломусегменту, щоєDPLCPL. Притакій передачікеруваннязберігаєтьсярівень вихідної(викликаючої)програми.
Звертаннядо непідлеглихсегментів здопомогоюкомандJMP іCALLдопускаєтьсятільки в випадку,якщо значенняCPL поточноїпрограми рівноDPL сегменту.Крім того,командаCALL можевикликатисегменти програмз більш високимрівнем привілей,використовуючимеханізм шлюзів(або вентилів).
Менш привілейованапроцедура можевикликати більшпривілейовану,будучи в обігудо неї черездескрипторшлюзу виклика,що визначаєдоступну крапкувходу. Цей засібдозволяє програмамкористувачабути в обігудо операційноїсистеми. Форматдескрипторашлюзу викликауявлений нарисунку 1.17.
В процесорі80286 бвтиз 48 по 63 не використовуютьсяі повинні бутирівні 0.
П'ятибайтовеполеWC вказуєкількістьпараметрів,що переносятьсяв стек новоїпрограми. Параметриподають собою16-разрядныеслова для16-разрядныхпрограм (в томучислі і дляпроцесора80286) і 32-разрядныеслова для32-разрядныхпрограм.
При викликовіпрограм черезшлюз повиннівиконуватисянаступні правила.ЗначенняRPL селекторашлюзу іCPL викликаючоїпрограми повиннібути менш аборівним значеннюDPL вбайтідоступу шлюзу.
Якщопрограма,щовикликаєтьсямає інший (більшвисокий) рівеньпривілей длянеї створюєтьсяновий стек. Прицьомув регістриSS і(E)SP зсегментуTSSзавантажуєтьсяновий вміст,що визначаєпочатковаадреса новогостека. В цейстек послідовновводяться старізначенняSS і(E) SP;параметри,переносиміз старого стека;старі значенняCS і(E) IP. ЧислопереносимихпараметріввизначаєтьсяполемWC, причомувибираютьсяостанні ззавантаженихв старий стекпараметрів.Стать командіRET виробляєтьсявідновленняз стека староговмісту регістрівSS, (E)SP іCS, (E)IP.
Реалізаціявведення-виведенняв захищеномурежимі виробляєтьсяз урахуваннямCPL програми,щовиконується.ВеличинаCPL порівнюєтьсязі значеннямполяIOPL врегістрі(E)FLAGS.Введення-виведеннявиробляєтьсятільки привиконанні умовиCPL меншабо рівноIOPL.
Багатозадачність.
Багатозадачністюназиваєтьсятакий засіборганізаціїроботи системи,при якому в їїпам'яті водночасмістятьсяпрограми і данідля виконаннядекількохпроцесів обробкиінформації(задач). При цьомуповинензабезпечуватисявзаємний захистпрограм і даних,стосовних дорізноманітнихзадач, а такожможливістьпереходу відвиконанняоднієї задачідо другий(переключеннязадач). Процесорипочинаючи з80286 мають ефективнізасоби підтримкибагатозадачногорежиму. В якостітаких засобіввикористовуєтьсяструктураданих, організованав вигляді сегменту,що називаєтьсясегментом станузадачіTSS. Апаратнимизасобами дляпідтримкибагатозадачностислужить регістрзадачіTR, в щозGDT можебути завантаженийдескрипторзадачі.
Кожназадача має свійсегментTSS, структураякого перебуєз двох частин.Обов'язковачастина міститьвсю інформацію,необхіднупроцесору длярішення даноїзадачі. Додатковачастина можемістити яку-абоінформаціюпро задачу, щовикористаєтьсяопераційноюсистемою, бітовукарту, що визначаєдопустиміадреси приладіввведення/висновку(тільки 80386+) і бітовуюкарту віртуальнихперериваннь(тількиPentium+).Розглянемоутриманняобов'язковоїчастиниTSS (таблиці1.2 і 1.3).
Першідва байтавикористовуютьсядля зберіганняселектораTSS попередньоїзадачі, привиконанні якоївідбувся викликданої задачі.В це поле заноситьсявміст регіструTR дляпопередньоїзадачі, якщоприпускаєтьсяповерненнядо неї. Окреміполя зберігаютьвміст всіхсегментныхрегістрів,регістрівзагальногопризначення,регістру прапоріві покажчикакоманд. Припереключеннізадач вмістозначених полівз викликаногоTSSзавантажуєтьсяв відповіднірегістри. Принаступномупереключенніпоточний вмістрегістрівзаноситьсявTSS даноїзадачі, післячого виробляєтьсязавантаженнярегістрів зTSS новоїзадачі.
ПоляSS0, (E) SP0, SS1, (E) SP1, SS2, (E) SP2служать джереломнового покажчикастека при змініпоточного рівняпривілей (передачікерування).
БітловушкиT вTSS викликаєпри Т=1 перериваннятипу 1 при переключенніна дану задачу.Це перериваннявикористовуєтьсяпри отладкепрограмногозабезпечення.
Бітовакарта перенаправленняперериванньБКПП забезпечуєможливістьавтоматичногоперенаправленняпрограмногоперериванняв віртуальномрежимі.
Бітовакарта введення-виведенняБКВВ забезпечуєіндивідуальнийзахист кожногопорту введення-виведення.При записі вбіті БКВВ нулядозволяє приCPL>IOPLзвертання довідповідногопорту. За останнімбайтом БКВВповиненслідуватизаключний байт,що містить 1 вусіх розрядах.Адреса цьогобайта повиннавідповідатимежі сегменту.
ДескрипторTSS повинензберігатисятільки вGDT. Томузвертання додескрипторуTSS здопомогоюселектора, щоє бітTI=1, викликаєвиключення10.
Для переключеннязадач процесорвикористаєзвичайні командиміжсегментногопереходуJMP, викликаCALL іповерненняIRET. Якщоселектор командиJMP абоCALL вибираєз таблиціGDT системнийдескриптор,у якого полетипу рівно 1(для 80286) або 9 (для80386+), виконуєтьсяпереключеннязадач. При цьомуселектор заноситьсявTR. Слідуєвідзначити,що командипередачі керуваннямістять зміщення.Однак припереключеннізадач воноігнорується.
При переключеннізадач з допомогоюкомандJMP абоCALL повиннівиконуватиправила привілей,встановленідля доступудо даних: максимальнезCPL іRPL повиннобути менш аборівноDPL. ТакимЧином допускаєтьсяпереключенняна задачі, чийступінь захистуменш або рівномурівню привілейпоточної задачі.
Таблиця 1.2.Сегмент станузадачі 80286
Зміщення | Вміст |
0 | Селекторповернення |
2 | SP0 |
4 | SS0 |
6 | SP1 |
8 | SS1 |
0A | SP2 |
0C | SS2 |
0E | IP |
10 | FLAGS |
12 | AX |
14 | CX |
16 | DX |
18 | BX |
1A | SP |
1C | BP |
1E | SI |
20 | DI |
22 | ES |
24 | CS |
26 | SS |
28 | DS |
2A | LDTR |
2C | ІнформаціяОС |
При використаннікомандиCALL можливозвертання дозадач з більшвисоким ступенемзахисту, ніжрівень привілейпоточної програми,з допомогоюшлюзу задачі.Використанняшлюзу задачіаналогічновикористаннюшлюзів виклика.В дескрипторешлюзу задачівизначенітільки дваполя: поле селектора,в якому знаходитьсяселекторTSS, іполе прав доступу.
РежимV86.
Починаючиз процесора80386 стало можливимвиконання взахищеномурежимі програм,написаних для8086/88, забезпечуючипри цьому рядзасобів захистуі можливістьстраничнойорганізаціїпам'яті. Такийваріант захищеногорежиму називаєтьсярежимом віртуального8086 і реалізуєтьсяпри настановів регістріEFLAGS значенняознакиVM=1.
Таблиця 1.3.Сегмент станузадачі 80386+
Зміщення | Вміст |
0 | Селекторповернення |
4 | ESP0 |
8 | SS0 |
0С | ESP1 |
10 | SS1 |
14 | ESP2 |
18 | SS2 |
1С | CR3 |
20 | EIP |
24 | EFLAGS |
28 | EAX |
2С | ECX |
30 | EDX |
34 | EBX |
38 | ESP |
3С | EBP |
40 | ESI |
44 | EDI |
48 | ES |
4С | CS |
50 | SS |
54 | DS |
58 | FS |
5С | GS |
60 | LDTR |
64 66 | Відноснаадреса БКПП(б 15-1). Т (б 0) Відноснаадреса БКВВ |
68 | ІнформаціяОС |
БКПП | |
БКВВ |
Всі програми,що виконуютьсяв режиміV86, маютьнижчий рівеньпривілей. ЦьомурежимV86відрізняєтьсявід реальногорежиму, приякому всімпрограмамнадається вищийрівень привілей.При формуваннілінійної адресив режиміV86 невикористовуютьсядескриптори,тому правилапривілей вцьому режиміне виконуються.В режиміV86використовуютьсятільки окремізасоби захисту:
В режиміV86 нездійснюєтьсязахист сегментів.Якщо використовуєтьсястранічнаадресація, теїї захист припорушенніправив доступудо сторінкинаводить довиключення14.
Надходженнякоманд, щовиконуютьсятільки прирівніCPL=0, врежиміV86 викликаєвиключення13.
Надходженнякоманд, щовиконуютьсятільки в захищеномурежимі, викликаєвиключення6 (недозволенийкод команди).
КомандиPUSHF, POPF, CLI, STI, INT, IRETдошкульні дозначення поляIOPL. Вонивиконуютьсятільки приIOPL=3.
Виконаннякоманд введення/висновкуне залежитьвід значенняполяIOPL. Однакзахист можездійснюватисяз допомогоюБКВВ.
1.3.3 Механізмтрансляціїсторінок
32-разрядныепроцесорипідтримуютьмеханізм трансляціїсторінок. Даниймеханізм здійснюєперетвореннялінійної адресив фізичнушляхом таблицьсторінок. Впершетрансляціясторінок почалапідтримуватисяв процесорі80386. Наступніґенераціїпроцесорівдодашли в цеймеханізм новіможливості.
Керуваннясторінковимперетвореннямздійснюєтьсяз допомогоютрьох бітівв регістрахкерування(таблиця 1.4).
PG- біт31 регіструCR0. Дозволяємеханізмсторінковогоперетворення(80386+);
PSE- біт4 регіструCR4. Дозволяєсторінки розміром4Мб (або розміром2 Мб, коли встановленийпрапорPAE)(Pentium+);
PAEбіт 5 регіструCR4. Дозволяє36-разрядныйфізична адреса.Розширенафізична адресаможе бутивикористанатільки з дозволенимсторінковимперетворенням(PentiumPro+).
Таблиця 1.4.Розміри сторінокі фізичноїадреси.
CR0.PG | CR4.PAE | CR4.PSE | PDE.PS | Розмірсторінки | Розмірфізичної адреси |
0 | x | x | x | - | Сторінковеперетворенняотключено |
1 | 0 | 0 | x | 4Кб | 32 б |
1 | 0 | 1 | 0 | 4Кб | 32 б |
1 | 0 | 1 | 1 | 4Мб | 32 б |
1 | 1 | x | 0 | 4Кб | 36 б |
1 | 1 | x | 1 | 2Мб | 36 б |
Інформація,яку використаєпроцесор дляперетвореннялінійної адресив фізичний,знаходитьсяв наступнихтаблицях:
Каталогсторінок;
Таблицясторінок;
Таблицяпокажчиківна каталогсторінок.
Коли використовується32-разрядныйфізична адреса,таблиці забезпечуютьдоступ до сторінокрозміром 4 Кбабо 4 Мб. Привикористаннірозширеної36-разрядногофізичної адреситаблиці забезпечуютьдоступ до сторінокрозміром 4 Кбабо 2 Мб.
Перетвореннялінійної адресидля 4 Кб сторінок.
Данеперетвореннявиконуєтьсяв усіх 32-разрядныхпроцесорах.На рисунку1.18. Уявлениймеханізм трансляціїлінійної адресина сторінкирозміром 4Кб.Покажчик накаталог сторінокзнаходитьсяв регістріCR3. Елементикаталогу сторіноквказують натаблиць сторінок,елементи таблицісторінок - насторінки фізичноїпам'яті. Цейзасіб може бутивикористанийдля адресаціїдо 220сторінок, щопокриває лінійнийадреснийпростір розміром4 Гб.
Для виборурізноманітнихелементівтаблиць лінійнаадреса ділитьсяна 3 секції:
Елементкаталогу сторінок- бітиз 22 по 31 містятьіндекс длявходу в каталогсторінок. Вибранийелемент міститьбазова фізичнаадреса таблицісторінок;
Елементитаблиці сторінок- бітиз 12 по 21 містятьіндекс длявходу в вибранутаблицю сторінок.Цей елементмістить базовафізична адресасторінки вфізичній пам'яті;
Зміщення- бітиз 0 по 11 містятьзміщення фізичноїадреси всерединісторінки.
Перетвореннялінійної адресидля 4 Мб сторінок.
На рисунку1.19 показане, яккаталог сторінокможе бутивикористанийдля відображеннялінійної адресина 4 Мб сторінки.Елементи каталогусторінок вказуютьна сторінкифізичної пам'яті.Цей засібсторінковогоперетворенняможе бутивикористанийдля відображеннядо 1024 сторінокна лінійнийадреснийпростір розміром4 Гб. Даний засібдоступний впроцесорахPentium+.
Сторінкирозміром 4 Мбвибираються,коли встановленийпрапорPSE врегістрі керуванняCR4 і коливстановленийпрапорPS велементі каталогусторінок. Колиці прапоривстановлені,лінійна адресаділиться надві секції:
Елементкаталогу сторінок- бітиз 22 по 31 містятьіндекс длявходу в каталогсторінок. Вибранийелемент міститьбазова фізичнаадреса 4Мб сторінки;
Зміщення- бітиз 0 по21 містять зміщенняфізичної адресивсерединісторінки.
Елементитаблиць сторінковогоперетворення.
Нарисунках1.20 і 1.21 показанийформат елементакаталогу сторінокі таблиці сторіноквідповідно,коли використовуються4Кб сторінкиі 32-разрядныйфізична адреса.На малюнку 1.22показанийформат елементакаталогу сторінок,коли використовуються4МБ сторінкиі 32-разрядныйфізична адреса.Функції полівв елементахнаступні:
Базоваадреса сторінки,бітиз 12 по 31. Для елементатаблиці 4Кбсторінок: міститьфізична адресапершого байта4Кб сторінки.Б даного поляінтерпретуютьсяяк 20 старшихбітафізичної адреси.Для елементакаталогу 4Кбсторінок: міститьфізична адресапершого елементатаблиці сторінок.Бітиданого поляінтерпретуютьсяяк 20 старшихбітівфізичної адреси.Для елементакаталогу 4Мбсторінок: міститьфізична адресапершого байта4Мб сторінки.Використовуютьсятільки б з 22 по31 цього поля.Ці б інтерпретуютьсяяк 11 старшихрозрядів фізичноїадреси сторінки;
БітприсутностіР. Показує,знаходитьсячи сторінкаабо таблицясторінок вфізичній пам'яті.Коли Р=1, сторінказнаходитьсяв пам'яті і уразі звертаннядо ній відбуваєтьсяперетвореннялінійної адресив фізичний.Коли Р=0, сторінкив пам'яті немає,інша частинаелемента доступнадля операційноїсистеми. Якщопроцесор спробуєзвернутисядо сторінки,у якої Р=0, тевідбудетьсявиключення14;
БітR/W. Бітчитання/запис.І бітU/S. Біткористувач/супервизор.Ці бітизастосовуютьсядля захиступо привілейна рівні сторінок;
БітА. Бітзвертання.Показує, булочи звертаннядо сторінкиабо таблицісторінок. Процесорвстановлюєцей біту разі звертаннядо сторінки.Скид бітаздійснюєтьсятільки програмнимшляхом;
БітD. Біт“брудний”.Показує, булочи звертаннядо сторінкидля запису.Процесор встановлюєцей бітпри записі всторінку. Скидбітаздійснюєтьсятільки програмнимшляхом. Данийбітспільно з бітомА використовуєтьсяопераційноюсистемою длякеруванняпам'яттю;
БітPS. Розмірсторінки. ВизначаєРозмір сторінки.Даний б використовуєтьсятільки в елементахкаталогу сторінок.Коли цей бітне встановлений,розмір сторінки4Кб і елементкаталогу сторіноквказує на таблицюсторінок. Колицей бітвстановлений,розмір сторінкирівний 4Мб привикористанні32-разрядногоадреси (і 2Мбпри використаннірозширеноїадреси) і елементкаталогу сторіноквказує на сторінку;
БітG. Глобальнасторінка. Колиданий бітвстановлений,це означає, щосторінка єглобальною.Коли сторінкапозначена якглобальна іглобальністорінки розв'язані(бітPGE врегістріCR4), приперезагрузкерегіструCR3 елементтаблиці сторінокабо елементкаталогу сторінокне оголошуєтьсяневірогіднимвTLB. Цейбітслужить длятого, щоб відвернутивилученнячасто сторінок,що використаютьсязTLB. Данийбітпідтримуєтьсятільки в процесорахPentium Pro+.
Якщо бітPSE врегістріCR4встановлений,те обидва засобуперетворенняможуть використовуватисяз одного і тогоже каталогусторінок.
Розширенняфізичної адреси.
БітPAE врегістріCR4 дозволяєрозширенняфізичної адресив процесоріPentium Pro+ з32 до 36 розрядів.Ця можливістьможе бути використанатільки привключеномусторінковомуперетворенні.Коли розширенняфізичної адресирозв'язане,процесор підтримуєсторінки двохрозмірів: 4Кбі 2Мб. Як і при32-разрядномадресі, обидварозміру сторінокможуть використовуватисяводночас, т. є.Елемент каталогусторінок можепосилатисяна 2Мб сторінкуабо каталогсторінок, щомістить покажчикина 4Кб сторінки.
Для підтримки36-разрядногофізичної адресив таблицях длясторінковогоперетвореннязроблені наступнізміни:
Елементитаблиць стали64-разряднымидля розміщення36-разрядногоадреси. ТакимЧином, кожнийкаталог сторінокі кожна таблицясторінок можемістити 512 елементів;
В ієрархіюсторінковогоперетвореннядодана новатаблиця - таблицяпокажчиківна каталогсторінок. Цятаблиця міститьчотири 64-разрядныхелемента ізнаходитьсявище каталогусторінок вієрархії;
Базова20-разрядныйадреса каталогусторінок врегістріCR3 заміненана 27-разрядныйадресу таблиціпокажчиківна каталогсторінок. Це27 старших розрядівфізичної адресипершого елементатаблиці каталогу;
32-разрядныйлінійна адресавідображаєтьсяна 36-разрядноепростір фізичнихадрес.
Перетвореннялінійної адресиз розширеноюадресацієюдля 4Кб сторінок.
На рисунку1.23 показаниймеханізм перетвореннялінійної адресиз використанням4Кб сторінок,коли розв'язанерозширенняфізичної адреси.Цей засібперетворенняможе бутивикористанийдля адресації220сторінок, щопокриває лінійнийадреснийпростір розміром4Гб.
Для виборурізноманітнихелементівтаблиць лінійнаадреса ділитьсяна 4 секції:
Елементтаблиці каталогусторінок - біти30 і 31 містятьіндекс длявходу в таблицюкаталогу. Вибранийелемент міститьбазова фізичнаадреса каталогусторінок;
Елементкаталогу сторінок- бітиз 21 по 29 містятьіндекс длявходу в каталогсторінок. Вибранийелемент міститьбазова фізичнаадреса таблицісторінок;
Елементитаблиці сторінок- бітиз 12 по 20 містятьіндекс длявходу в вибранутаблицю сторінок.Цей елементмістить базовафізична адресасторінки вфізичній пам'яті;
Зміщення- бітиз 0 по 11 містятьзміщення фізичноїадреси всерединісторінки.
Перетвореннялінійної адресиз розширеноюадресацієюдля 2Мб сторінок.
На рисунку1.24 показане, яктаблиця каталогусторінок ікаталог сторінокможуть бутивикористанідля відображеннялінійної адресина 2Мб сторінки.Цей засібсторінковогоперетворенняможе бутивикористанийдля відображеннядо 2048 сторінокна лінійнийадреснийпростір розміром4Гб.
Розмірсторінки 2Мбвибирається,коли встановленийбітPSE врегістріCR4 івстановленийбітPS велементі каталогусторінок. Колиці бітивстановлені,лінійна адресаділиться натри секції:
Елементтаблиці каталогусторінок - біти30 і 31 містятьіндекс длявходу в таблицюкаталогу. Вибранийелемент міститьбазова фізичнаадреса каталогусторінок;
Елементкаталогу сторінок- бітиз 21 по 29 містятьіндекс длявходу в каталогсторінок. Вибранийелемент міститьбазова фізичнаадреса сторінкирозміром 2Мб;
1.3.4 Віртуальніпереривання
В процесорахPentium+ вмеханізм обробкиперериваньбули доданідеякі новіможливості.Розглянемозміни, що стосуютьсярежимуV86. Колипроцесор знаходитьсяв цьому режимі,засіб обробкиперериваньзалежить відстану різноманітнихпрапорів іполів:
VME-прапор(біт0 в регістріCR4) - коливін в одиниці,дозволяютьсярозширеніможливостіпо обробціперериваньі виключеньв режиміV86, атакож дозволяєтьсяапаратна підтримкапрапораVIF;
IOPL-прапор(біт12 і 13 в регістріEFLAGS) -управляє тим,як будутьоброблятисяпереривання;
БКПП -бітовакарта перенаправленняпереривань(32 байта вTSS) - містить256 прапорів, щопоказують, якпрограмніпереривання(переривання,що генеруютьсякомандоюINT n) будутьоброблятисяв режиміV86. Програмніперериванняможуть спрямовуватисяна обробку впоточну програму8086 абооброблятисяв захищеномурежимі. Апаратніперериванняі виключеннязавжди спрямовуютьсяв захищенийрежим.
В таблиці1.5. Показане, якпроцесор обробляєперериванняі виключенняв режиміV86 взалежностівід стану описанихвище прапоріві полів.
Таблиця1.5. Обробка перериваньі виключеньв режиміV86.
Засіб | VME | IOPL | Б в БКПП | Дії процесора |
1 | 0 | 3 | x | Програмніпереривання(INTn), виключенняі переривання,що маскуютьсяспрямовуютьсяв захищенийрежим (черезIDT) |
2 | 0 | x | Програмніперериваннягенеруютьвиключення13. Виключенняі переривання,що маскуютьсяспрямовуютьсяв захищенийрежим | |
3 | 1 | 1 | Те же | |
4 | 1 | 3 | 1 | Програмніпереривання,виключенняі переривання,що маскуютьсяспрямовуютьсяв захищенийрежим |
5 | 1 | 3 | 0 | Програмніперериванняспрямовуютьсяв режимV86 по механізмуреальногорежиму |
6 | 1 | 0 | Програмніперериваннягенеруютьвиключення13. Виключенняі переривання,що маскуютьсяобробляютьсяз підтримкоюпрапорівVIF іVIP |
Коли прапорVME=0,перериванняобробляютьсязвичайнимобразом. Колипрапор в одиниці,до обробкиперериваньпривертаєтьсяновий об'єкт- бітовакарта перенаправленняпереривань.Вона розташуєтьсяпо базовійадресі картивведення-виведеннямінус 32 байтав сегментіTSS. Кожнийбітцієї картипоказує, будечи відповіднеперериванняоброблятисяяк звичайнов захищеномурежимі (б рівномуодиниці) абоперериваннябуде перенаправленона обробку впрограму режимуV86 черезтаблицю перериваньрозташованупо лінійнійадресі 0 (бітрівний 0).
Обробкаперериваньпо засобу 5. Процесорперенаправляєпрограмніперериванняв програмурежимуV86 черезтаблицю переривань,як це відбуваєтьсяв реальномурежимі. Процесорвиробляє слідуючупослідовністьдій:
Записуєпоточні значеннярегістрівCS іIP впоточний стек;
Записуєв стек регістрпрапорівFLAGS зочищенимиNT іIOPL;
ОчищаєпрапорIF врегістріFLAGS, щобзаборонитипереривання;
ОчищаєпрапорTF врегістріFLAGS;
ЗавантажуєрегістриCS іIP зтаблиці перериваньпо лінійнійадресі 0;
Починаєвиконуватипрограмупереривання.
При використанніцього засобуобробки перериваньвиключенняне заносятьв стек код помилки.
Обробкаперериваньпо засобу 6. Колипроцесор знаходитьсяв стані, відповідномузасобу 6, командиCLI іSTI змінюютьпрапорVIF замістьпрапораIF. Процесорчитає прапорVIP, аленіколи не змінюєйого. ПроцесорвикористаєпрапориVIF іVIP длявизначеннятого, як оброблятипереривання.Якщо відбулосяперериванняабо виключенняі прапорVIF скинутийв 0, те процесорвиробляє тихже дії, що і взасобі 5. Процесортакож обробляєперериванняпо засобу 5, якщопрапорVIF встановленийв одиницю івідбулосянемаскуємепереривання.Якщо відбулосяпереривання,що маскуєтьсяапаратне, тепроцесор виробляєнаступнупослідовністьдій:
Процесорвикликає виключення13:
Переключаєтьсяв захищенийрежим наCPL=0;
ЗберігаєвPL0-стеці:EIP, CS, EFLAGS, ESP, SS, ES, DS, FS, GS.В стековомобразі регіструEFLAGS полеIOPLвстановлюєтьсярівним 3 і прапорVIF копіюєтьсяв прапорIF;
Очищаєсегментнірегістри;
СкидаєпрапорVM врегістріEFLAGS;
Приступаєдо виконаннявибраногопереривання.
Що рекомендуютьсядії обробникавиключення13: прочитатипрапорVM регіструEFLAGS встеке. Якщоцей прапорвстановлений,викликатимоніторV86.
МоніторV86 читаєпрапорVIF врегістріEFLAGS. Якщоцей прапорвстановлений,монітор встановлюєпрапорVIP врегістріEFLAGS, вертаєуправлінняобробнику.
Обработчиквиробляє поверненняв режимV86.
Процесорпродовжуєвиконанняпрограми 8086 безобробки переривання.
Коли програма8086 виконає командуSTI, процесорзробить наступне:
ПеревіритьпрапорVIP.
ЯкщоVIP=0, тепроцесор скинев 0 прапорVIF.
ЯкщоVIP=1, тепроцесор генеруєвиключення13.
Що рекомендуютьсядії обробника:викликатимоніторV86, щобдати можливістьобробити відкладенепереривання.Типові діїмоніторуV86 - цеочистити прапориVIF іVIP встеке і повернутиуправлінняв режимV86 (черезобробник).Коли в наступнийраз відбудетьсяапаратнепереривання,воно будеоброблятисяпо засобу 5.
Стан прапорівVIF іVIP незмінюєтьсяв реальномурежимі або підчас переключенняміж реальнимі захищенимрежимом.
Розглянемовіртуальніперериванняв захищеномурежимі. Длядозволу підтримкипрапорівVIF іVIP необхідновстановитипрапорPVI врегістріCR4.
ЯкщоPVI=1, CPL=3 іIOPL
Якщовідбуваєтьсяпереривання,що маскуєтьсяапаратне іпрапорVIF=1, тепроцесор викличевиключення13. Обработчиквиключенняможе встановитипрапорVIP іповернутиуправлінняPL3-задаці,що продовжитьсвою роботу.
Коли програмавиконає командуSTI, щобочистити прапорVIF, процесоравтоматичніздійснитьвиклик виключення13, що зможитьобробити відкладенепереривання.
Типовийзасіб обробкивідкладеногоперериванняполягає в очистціпрапорівVIF іVIP встековом образірегіструEFLAGS іповерненніуправлінняPL3-задаці.
Коли в наступнийраз відбудетьсяапаратне переривання,процесор будеобробляти йогонормальнимобразом.
2РОЗРОБКАПРОГРАМНОГОЕМУЛЯТОРА
2.1 Постановазадачі
Емуляторомназиваєтьсяпрограмнийпродукт, щовідтворює(повторює) роботуусіх (або частини)блоків фізичноговлаштування.Емулятор необхідендля отладкипрограмногоабо апаратногозабезпечення,коли влаштування,що вимагаєтьсяабо буде відстунє,або в чинністьбудь-якихособливостейне підтримуєотладку абопідтримуєнеповністю.Інколи дляпідготовкифахівців в метіпідвищеннярозумінняроботи влаштуваннянелишнєвізуальнопродемонструватироботу тогоабо іншоговузла або блоку.Жодне влаштування,як правило, недозволяє вироблятитакого родуманипуляції.
Метоюданого проектує створенняпрограми-емулятораякого-або процесорафірмиIntel.Даний емуляторпередвизначенийдля отладкипрограмногозабезпеченняі навчанняфахівців, азначить достатньобуде створитиемулятор процесораз точки зорупрограмногозабезпечення,т. є.Емулятор програмноїмоделі процесора.
Вибірэмулюємогопроцесора.
Необхідністьв поглибленійотладціможе виникнутипри створеннісистемногопрограмногозабезпеченнядля керуюч абосистем ,щоконтролюютьна базі стандартнихпроцесорівсімейства х86.Дані системинакладуютьряд обмеженьна тип процесора,що використається.В якості основнихкритеріїв тутвиступають:вартість,продуктивність,простота зовнішньогоінтерфейсуі його протоколиобміну, а такожможливістьпобудовифункціональнонадлишковихсистем длядублюванняабо тройованняобчислювальногопроцесу. Немаловажнымпараметромє також і спектрфункцій ,щопідтримуютьсяпри мінімумізовнішньогообладнання,а стало бутиі простотісистемноїплати.
Проаналізувавширяд процесорівможна з певністюсказати, щонайкращимипараметрамиволодіє процесор80486. У ПорівнянніЗ іншими процесорамивін володієнаступнимиперевагами:
Наявністьвнутрішньоїкеш-пам'ятізначно знижуєнавантаженняна локальнушину;
НаявністьвбудованогоблокуFPU.Алгоритмикеруючих систембуяють операціяминад числамиз плаваючоюкрапкою;
Апаратнапідтримкафункціональнонадлишковоїдвохпроцесорнойсистеми примінімумі зовнішньогообладнання;
Можливістьзміни розрядністьзовнішньоїшини. Многиеприлади працюютьз 8-ми або 16-разряднойшиною даних;
Контрольвірогідностіі що приймаютьсяданих ,що передаютьсяшляхом перевіркипаритету;
Роботапроцесора начастоті локальноїшини. У порівняннізпроцесором80386 дана обставиназначно спрощуєвимоги до чипсету,бо чипсет повиненпрацювати начастоті вдвічіменшої (наприклад,для 80386-33Мгц частоталокальної шиниповинна складати66Мгц);
Невисокавартість;
РозрядністьцілочисельногоАЛУ і РОНів32 біти,що достатньодля широкогокола задач ,щовирішуються;
У порівнянніз іншими сімействамипроцесорівдля сімействах86 є найбільшийобсяг готовогопрограмногозабезпеченнярізноманітногопризначення.
Отже,на підставівищенаведенихдостоїнствможна припустити,що для більшостікеруючих системсередньоїпродуктивностіпроцесор 80486 єнайбільш більшприйнятним.
Вимога доемулятора.
Вколо задачданого емуляторавходить отладкатруднодоступнихдільниць кодупрограмногозабезпечення,неможлива назвичайнихотладчиках.Крім того,даний програмнийпродукт припускаєтьсявключити внавчальнийпроцес в якостінавчальноїпрограми.
На підставівищезгаданогоможна сформулюватинаступні вимогудо програми-емуляторупроцесора:
Широкийнабір эмулюємихкоманд і блоківпроцесора;
Мінімумвимоги допрограмногоі апаратногозабезпеченнякомп'ютера;
Можливістьпокроковоговиконаннядільниць кодуотлаживаємойпрограми;
Можливістьпереглядустану эмулюємогопроцесора іоперативноїпам'яті припокроковомвиконаннікоманд;
Можливістьвнесення змінв вміст регістріві хід виконанняотлаживаємойпрограми;
Якомога більшточне відтворенняроботи кожноїкоманди;
В меті підвищеннярозумінняроботи окремихблоків можливістьзмінюватидеякі параметрицих блоків.
Крімтогов процесі створенняемулятораможуть виникнутиінші функціональніможливості,що або є побічнимпродуктом приреалізаціїбудь-яких алгоритмів,або можуть бутистворені шляхомнезначногодоповненняабо зміни вженаявних.
2.2 Вибірмови програмування,платформи іструктурипрограми
Вибір мовипрограмування.
Наданий моментсамоюгнучкою мовоюпрограмуваннядля створеннянемережовихдодатків длянастольнихсистем є моваЗ, і його функціональнерозширенняС++, що підтримуєконцепціїоб'єктно-орієптованогопрограмування.
Створеннябудь-якої більшменш складноїпрограми спрощуєтьсяпри застосуванніпринципівоб'єктно-орієнтованогопрограмування.Отже для створенняданої програмикращебуде вибратимову С++.
Вибір платформи.
Підплатформоюв даному випадкумимаємоопераційнусистему,в якій будепрацюватипрограмнийпродукт.
Наданий моментє декількаопераційнихсистем, що достатньорозповсюджені.ЦеDOS, Windows, OS/2іUNIX (LINUX).Перша з них єоднозадачнойі може працюватипрактичнона будь-якомупроцесорісімейства х86,в той час якінші три вимагаютьдля нормальноїроботи процесорPentiumі досить великийобсяг оперативноїпам'яті.Такі ресурсище не всякийкористувачможе собі дозволити.Згідно вимозідо програми-емулятору,вона не повиннаподавати високихвимоги до програмногоі апаратногозабезпечення.Крім Того, програманаписана дляроботи вDOSбуде успішнопрацювати іна інших перерахованихплатформах.
Напідставівищезгаданогодоцільно вякості платформивибратиDOS.
Вибір структурипрограми.
Для полегшеннястворенняемуляторадоцільно розбитипрограму надва функціональнихблоку:
Операційначастина. Включаєнеобхідніструктури іпідпрограми,емуляціюроботи ,щореалізуютьвнутрішніхблоків процесораі виконаннякоманд;
Інтерфейсз користувачем.Включає підпрограмиі дані, що реалізуютьдіалог з користувачем,відображеннярезультатіввиконаннякоманд і станемулюємихблоків процесораі управлінняобчислювальнимпроцесом.
Такийрозподіл добреще і тим, щобезпосереднійкористувачможе самийстворити потрібниййому інтерфейсі підключитидо нього функціональнонезалежнуопераційнучастину безїї перекомпіляції.Дана обставинапідвищує гнучкістьпрограми. Отжетака структурабуде оптимальної.
2.3Операційначастина
2.3.1 Поданняданих
Будь-якийбільш меншскладний проектдоцільно починатиз аналізу інформації,що обробляється.В даному проектінам предстоїтьобробляти дані,наведені вформатах щопідтримуютьсяпроцесором.Проаналізувавшиможливі типиоперандів,можна вибратиоптимальнийзасіб їхньогоподання в програмі.Крім того,необхідно щерозробитискладні типидля поданнявнутрішніхблоків, бо такийшлях максимальнонаближає емулятордо реальногопроцесора.
В таблиці2.1 уявлені типиданих, якимиоперує процесор.
Таблиця 2.1.Типи даних80486.
Тип | Довжинав байтах | Примітка |
Байтзі знаком | 1 | Цілий |
Байтбез знаку | 1 | Цілий |
Словозі знаком | 2 | Цілий |
Словобез знаку | 2 | Цілий |
Подвійнеслово зі знаком | 4 | Цілий |
Подвійнеслово без знаку | 4 | Цілий |
Ближнійпокажчик (16 б) | 2 | |
Ближнійпокажчик (32 б) | 4 | |
Дальнійпокажчик (16 б) | 4 | |
Дальнійпокажчик (32 б) | 6 | |
Коротке | 4 | Речовинний |
Довге | 8 | Речовинний |
Повне | 10 | Речовинний |
Яквидно з таблиціформати операндівпроцесоравідповідаютьпростим типаммови С++. Отже,для роботи зоперандамикоманд доцільновиробляти здопомогоюпростих типівмови.
Дляподання різноманітнихблоків слідуєвикористатиструктури ікласи. Для блоків,в яких інформаціятільки зберігаєтьсякраще усьоговикористатиструктури, аякщо необхідноцю інформаціюякось обробляти,доцільно використатитип класу,інкапсулювавшив нього засобидля обробки.
Всіосновні типи,що використаютьсяв емуляторізібрані в файліcomand. h.
Об'єднання_num.Об'єкт цьоготипу передвизначенийдля зберіганнячисловогозначення операндакоманди. Полямають простітипи, і будучив обігу до них,можна трактувативміст, як будь-якийтип.
Структура_op.Об'єкт цьоготипу передвизначенийдля зберіганняінформації,необхідноїдля доступудо операнду.Якщо операндзнаходитьсяв пам'яті, поляbase, indx, sft, offіsegмістять відповідноіндекси базовогоі індексногорегістрів,масштабнийкоефіцієнт,додатковезміщення ііндекс сегментногорегістру дляформуваннялінійної ефективноїадреси. Якщооперанд знаходитьсяв регістрі,полеoffзберігає індексцього регістру,а якщо операндбезпосередній,в тому же полезберігаєтьсяйого безпосереднєчислове значення.Безпосереднідальні покажчикизберігаютьсяяк два операнда.Полеidмістить ідентифікаторрозрядністьоперанда (байт,слово, подвійнеслово).
Структура_decoder.Об'єкт цьоготипу зберігаєдекодованукоманду. В поляхструктуриміститься всянеобхіднаінформаціядля виконаннякоманди, а такождля її відображенняна екрані.
_opop [3].Масив міститьтри операндакоманди. Якщооперандівменш, тозайві компонентине визначені.
charid [3].Масив міститьінформаціюпро місцезнаходженняоперандів.Якщо будь-якийоперанд невизначений,в відповідномуосередку буде-1.
charcomstr [8].Рядок міститьмнемоникукоманди (безоперандів).Поле заповнюєтьсяпри декодуванніі використовуєтьсядля поданнякоманди наекрані спільноз полямиopіid.
ucharcodes [16].Масив зберігаєкодову послідовність,якої уявленакоманда в пам'ятіразом зі всімапрефіксами.Це поле заповнюєтьсяпослідовнопід час декодування.
ucharcom.Поле міститьінформацію,що дозволитьвідрізнитикоманду в групі.Команди коди,що є схожі іоперандиоб'єднані вгрупи з метоюзменшенняобсягу програми.
charlen.Поле міститьдовжину командив байтах разомзі всіма префіксами.Те є в ньомуміститьсяіндекс останньогопевного осередкав масивіcodes [].
charccc.Поле міститькод умови длякоманд умовнихпереходів іумовної настановибайтів.
charseg.Поле міститьознака переопределеннясегменту. Якщоперед командоюстояє префікспереопределеннясегменту, вцьому полібуде міститисяіндекс сегментногорегістру, інакше-1.
charad, od.Поля містятьідентифікаторирозрядністьадреси і операндавідповідно.Перед декодурованнямці поля заповнюютьсяідентифікаторамипоточноїрозрядність.Якщо передкомандою стояєпрефікс переопределеннярозрядністьадреси (67h) абооперанда (66h), даніполя коректуються.
charrep.Поле зберігаєознака префіксівrep/repe.Якщо один зцих префіксівстояє передкомандою, данеполе буде визначене,інакше-1. Придекодуванністроковихкоманд данеполе коректуєтьсязгідно специфіцікоманди. Привиконанні врозгляд приймаютьсятільки значення,що скоректувалися,інакше вмістполя ігнорується.
charjmp.Поле зберігаєідентифікаторпереходу. Вреальномупроцесорі привиконаннікоманди переходучерга команді конвейєрскидаються,і вибіркапочинаєтьсяще раз з цільовоїадреси переходу.Для імітаціїпередвиборкиі конвейєрав емуляторівиробляєтьсявибірка і дешифраціянаступноїкоманди довиконанняпопередньої.За наявностіпереходу наступнадекодованакоманда анулюється,а вибіркавиробляєтьсяще раз з цільовоїадреси переходу.
interr.Поле зберігаєознака помилки,виниклої привибірці абодешифрації.Якщо виниклатака помилка,поле буде міститиномер виключення.Безпосередноперед виконаннямкоманди полеперевіряєтьсяна предметнаявностівиключення,і в залежностівід цьоговиробляєтьсяабо виконаннякоманди, абовиклик виключення.Номер виключеннявиниклого підчас виконаннякоманди заноситьсяв глобальнузміннуerror.
ulongbaseadr.Поле міститьбазова адресакоманди. Переддешифрацієйпрефіксів сюдизаписуєтьсявміст регіструeip.
comand*p.Покажчик наоб'єкт виконання,що реалізуєданої команди.З допомогоюцього покажчикав наслідкубуде викликанийзасібdieдля виконання.
Структурамає засоби дляздійсненнявибірки командиз кодовогосегменту. Єтакож конструктор,що виробляєпочатковуініціалізаціюполівструктури.
Об'єднання_eflag.Об'єкт цьоготипу зберігаєвміст регіструпрапорів. Об'єднаннястворене дляможливостідоступу як доокремих прапорів,так і до регіструв цілому.
Клас_mem.Об'єкт цьоготипу передвизначенийдля виконаннядоступу дооперативноїпам'яті емулятора.Конструкторкласу створюєна диску файл,в що після цьогопереписує весьперший мегабайтоперативноїпам'яті комп'ютера.Єдине полекласу зберігаєдескрипторцього файлу.Засібpageadrвиробляє трансляціюлінійної адресив фізичний привключенійсторінковійадресації. Іншізасоби виробляютьпереадресаціюзапитань почитанню абозаписи в пам'ятьдо дисковогофайлу.
Класи_gdt,_idt.Об'єкти цихтипів подаютьрегістриGDTRіIDTRвідповідно,а також інтерфейсдля доступудо глобальноїдескрипторноїтаблиці і таблиціпереривань.Класи містятьпо два поля:baseіlimit,в яких містятьсяпокажчики ірозміри таблиць.Засібgetвертає лінійнуадресу запрошеногодескриптора,а засібgetaслово атрибутівцього дескриптора.
Клас_reg.Об'єкти цьоготипу об'єднанів масив з восьмихелементів іподають собоюфайл регістрівзагальногопризначення.Полеrмістить числовезначення операндав регістрі, азасоби виробляютьзвертання якдо цілого регістру,так і до йогочастин.
Клас_sreg.Об'єкти цьоготипу об'єднанів масив з шестиелементів іподають собоюфайл сегментныхрегістрів. Полеselзберігає селектор.Поляbaseіlimit,базова лінійнаадреса і розмірсегменту відповідно,а полеaccessзберігає словоатрибутівсегменту. Полеidпередвизначенедля ідентифікаціїсегментногорегістру. Колистворюєтьсямасив примірників,конструкторкласу заноситьв це поле вмістзмінноїidentify,а після цьогозбільшує цюзмінну на одиницю.Таким Чиномстворюютьсяоб'єкти, що “знають”,які регістривони подають.Обработчикперевантаженогооператора “=”виконує командузавантаженнясегментногорегістру. ПриЦьому на підставіполяid,глобальноїзмінноїcpl,а також поточногорежиму процесоравиконуєтьсяперевіркаможливостізавантаженнярегістру. Якщозавантаженняможлива, відбуваєтьсязвертання дооб'єкту типу_gdtабо_ldtдля її виконання.Інакше в зміннуerrorзаноситьсяномер виключення,а в зміннуercode,код помилки.Інші засобикласу виконуютьдоступ до операндампо запису абочитанню шляхомвиклика відповіднихзасобів об'єктутипу_mem.В цих засобахтакож виробляєтьсяперевіркаправ доступудо сегментуі “генерація”виключенняв випадку їхньогопорушення.
Клас_ldt.Об'єкт цьогокласу подаєсобою регістрLDTRі інтерфейсдоступу долокальноїдескрипторноїтаблиці. Данийклас схожийна попереднійза виняткомтого, що засобидоступу заміненіна засобиgetіgeta,що повністюидентичнывідповіднимзасобам класу_gdt.Таким Чином,даний класоб'єднує властивостікласів_gdtі_sreg,що по суті івідбуваєтьсяв реальномупроцесорі.
Клас_tss.Об'єкт цьогокласу подаєсобою регістрTRі інтерфейсдля доступудо сегментустану задачі.Клас схожийна попередній,але має власнізасоби длядоступу. Засібstackвиробляє переключеннястека приміжсегментноїпередачі керуваннязі зміною рівняпривілей. Засібportпровадитьперевіркуможливостідоступу допорту введення/висновкушляхом аналізувідповідногоб в БКВВ. Засібswtaskвиробляє переключеннязадач з виконаннямвідповіднихперевірок і“генерацією”виключенняв випадку неуспіху.
Клас_comand.Цей базовийклас є предкомдля класів, щореалізуютькоманди процесора.Засібmodвиконує дешифраціюmodіsibбайтів.Засобиdeasmіdieпроголошенівіртуальнимиі підлягаютьперевантаженнюв кінцевихкласах дляреалізаціїдекодуванняі виконанняконкретнихкоманд або групкоманд.
Далі в файліслідують оголошеннякласів, що реалізуютьконкретнікоманди і групикоманд.
Вмодуліstructs.cppзнаходитьсяреалізаціязасобів описанихкласів (за виняткомкласу_mem,засоби якогореалізованів окремомумодуліmem. cppв меті можливостізаміни реалізаціїоперативноїпам'яті емулятора).В модуліstructs. cppвиробляютьсятакож оголошенняоб'єктів описанихвище класів,а також реалізаціядеяких сервиснихпроцедур, якте формуваннявиконавчоїлінійної адресина підставіоб'єкту типу_op,збереження/відновленнявмісту регістрівз сегментустану задачіі ін.
Пам'ятьпід об'єкти, щоподають регістривиділяєтьсястатично,тому при стартіпрограми натреба піклуватисяпро створенняпримірниківкласів.
Реалізаціязасобів класівкоманд і групвиробляєтьсяв модуляхcom_ands.cppіcom_movs. cpp.Арифметичніі логічні командиреалізованів першому модулі,а команди пересилкиі керуванняв другому.
Процедурикеруваннядекодуваннямі виконаннямзібрані в модуліcontrol. cpp.Цих процедурчотири:
init.Викликаєтьсяпри стартіпрограми івиконує створенняпримірниківкласів команд.Покажчики напримірникизаносятьсяв масив покажчиківmasна 256 елементів.При декодуваннівиробляєтьсявибірка першогобайта командиі використанняйого вмістув якості індексув цьому масиві.Замість нереалізованихкоманд створюєтьсяпримірникбазового класуcomand,і у разі звертаннядо ним виконуєтьсяповерненняз помилкою.
int_call.Процедуравиконує викликперериванняабо виключення.
step.Дана процедуравикликаєтьсяпри виконаннідекодированиякоманд. В якостіпараметрупередаєтьсязнов створенийпримірниккласу_decoder.При поверненніпримірник будемістити декодованукоманду. В ційже процедурівиробляєтьсядешифраціявсіх префіксівкоманди.
exec_com.Ця процедуравиконує керуваннявиконаннямкоманди шляхомвиклика засобуdieвідповідногооб'єкту.
2.3.2Деколуванняі виконаннякоманд
Процесорисімейства х86мають самийпросторий набіркоманд з всіхнаявних насьогодняшнійдень процесорів.Ця обставиназв'язана з тим,що для цьогосімейства євеличезнакількістьпрограмногозабезпечення,і щоб попит нанові моделіпроцесорівне зменшувався,фірмаIntelпроектує їхнз урахуваннямстопроцентнойєдностізнизу вверх.Нові моделідодають до вженаявній безлічікоманд нові,що наводитьдо ускладненнядекодерів.
В зв'язку звищезгаданимвибір ефективногозасобу декодуваннядозволитьзначно прискоритиемуляцію команді зменшититимчасовіпараметридекодуванняі виконання.
Вданій ситуаціїприменимитри засобидекодування.
Першийзасіб заснованийна конструкціїтипуif.. then.Послідовноперевіряючиті або іншідільниці кодукоманди можнапоступововибрати потрібнупроцедуру.Нажаль цейзасіб сильногроміздкийі медлителен.Вихідний текстпроцедуридешифраціїбуде позичатибагато місця,що погіршитьчитабельністьпрограми ізбільшитьімовірністьпояви помилок.Перебор всіхкомбінаційпризведе доістотномууповільненнювиконання, щов кінці кінціввідіб'єтьсяна неудобствікористуванняемулятором.
Іншийзасіб заснованийна застосуванніконструкціїтипуcase.Многікомпілятористворюютьвнутрішнітаблиці дляшвидкого знаходженнярядка переходу.Ця обставиназначно збільшуєшвидкодія. Алепо-давньомузалишаєтьсяпроблема громіздкостівихідноготексту.
Третійзасіб заснованийна застосуваннівіртуальнихфункцій. Викликвіртуальнихфункцій такожзаснованийна застосуваннітаблиць, що незменшує швидкодіїу порівнянніз попереднімзасобом. Алецей засіб дозволяєуникнути громіздкоготексту і реалізуєтьсяпри мінімумімовних операторів.Цей засіб дозволяєстворюватище і ієрархіїкоманд (конструкціяcaseтакож дозволяєстворювативкладеність,але при отладцівиникаютьситуації, колиотладчик неможе виконатирядок операторівіз-за цієївкладеності).Кожна командаабо група командмає свої процедури,що одержуютьуправліннятоді, коли конкретнакоманда вжевиявлена, ізалишилосятільки виявитиформу і типиоператорів.Це дозволяєгрупувати схожікоманди, щовідрізняютьсятільки декількомабітами.
Отжез певністюможна сказати,що засіб віртуальнихфункцій об'єднуєв собі все гідностіпопередніхзасобів і мінімізуєїхні нестатки,а значить, єнайбільш ефективним.
Воснові засобулежить властивістьспадкування,що полягає втому, що змінноїтипу покажчикана батьківськийклас можнапривласнитипокажчик надочірній клас.В батьківськомукласі є двавіртуальнихзасобу:deasmіdieдля декодуванняі виконаннявідповідно.В дочірніхкласах ці засобиперевантажуютьсязасобами, щообробляютьтільки своюкоманду. ТакимЧином, маючитільки покажчикна командуможна виробитиїї виконанняшляхом викликазасобуdie,передавши йомувідомості прооперанди.Отримати покажчикна командуможна, виконавшивибірку першогобайта командиі використавшицей байт якіндекс покажчикав масиві.
Впам'яті створюєтьсямасив, елементиякого маютьтип покажчикана базовийклас. В модуліcontrol. cppє процедураinit,що виробляєініціалізаціюмасиву покажчикамина динамічністворені примірникикласів команді груп. Хочатекст цієїпроцедури імає поряднийобсяг, але вінлінійний ічитабельний(в тексті немаєветвленнь).
Декодування.
Длядекодуваннянеобхідностворити примірникструктури_decoderі передати йогознаходящейсяв модуліcontrol. cppпроцедуріstep.Дана процедурареалізує стадію1 декодуванняв конвейєріпроцесора. Націй стадіївиробляєтьсядешифрациявсіх префіксіві формуванняRISC-інструкціїдля виконання.Дана функціятакож виробляєдешифраціюпрефіксів, ав якостіRISC-інструкціївикористовуєтьсяпокажчик наоб'єкттипу класуконкретноїкоманди.Дешифрациявиконуєтьсяслідуючимчином. З сегментукодів за адресою,записаномув полеbaseadr,вибираєтьсябайт. Якщо цепрефікс, виробляєтьсявідповіднекорегуванняполів структуриі повторнавибірка понаступнійадресі. Якщовибраний непрефікс, виробляєтьсявиклик засобуdeasmпо покажчикуз масивуmas,використовуючивміст вибраногобайта як індекселемента масиву.Примірникструктури_decoderпередаєтьсязасобу в якостіпараметру.
Засібdeasmреалізує стадію2 декодування.На цій стадіїформуютьсявиконавчіадреси операндіві видаютьсявідповіднізапитання начитання (якщодозволяє попереднякоманда). В даномузасобі дешифруютьсябайтиmodіsibі заповнюютьсявідповідніполя операндів.Для спрощенняалгоритмузапитання начитання невидаються.Також не формуютьсялінійні адресиоперандов, боможе з'явитисянеобхідністьвідобразитимнемоникукоманди наекрані, а зберігатидвічі одна іта же адресанедоцільно.Тут же виробляєтьсязаповненняполя*pпокажчикомthisдля наступноговиконаннякоманди. Декодуванняможе бути перерваневиникненнямякого-або виключення.При цьомув полеerrзаписуєтьсяномер виключенняі виробляєтьсяповерненняз засобу. Згодомзамість виконанняцієї командибуде виробленаобробка виключення.
При поверненніз процедуридекодування,передана їйструктура будезаповнена, ікоманда готовадо виконання.
Виконання.
Впроцесорі 80486присутняпередвиборкакоманд і конвейєризація.В зв'язку з цимна різноманітнихстадіях обробкиможе бути білядвох десятківкоманд. В функціїемулятора невходить повневідтворенняконвейєрареальногопроцесора, томуможна обмежитьсяпередвиборкойоднієї команди.Для створенняповного еквівалентаконвейєранеобхідно такожв точностіповторитироботу всіхвнутрішніхблоків процесора,що виходитьза рамки даногопроекту.
Виконаннямкоманд управляєпроцедураexec_com,щознаходитьсяв модуліcontrol.cpp.Кожний викликцієї процедуринаводить довиконанняоднієї команди.В модулі проголошениймасив з двохзмінних типу_decoder.Процедуравиконує команду,що знаходитьсяв нульовомуелементі масиву,копіює в цейелемент вмістпершого елементаі викликаєпроцедуруstepз першим елементомв якості параметру,попередновикликавшийого конструктор.Таким чиномдосягаєтьсячасткова емуляціяпередвиборки.Якщо була виконанакоманда переходу,процедуравикличе декодуваннядля обох елементівмасиву. Процедураexec_comздійснює такожобчисленнявмісту регіструeipпри лінійномухарактері коду.При виконаннікоманд переходувиконуючізасоби цихкоманд самівиробляютькорекціюпокажчикакоманд. Якщоперед строковойкомандою стояєпрефікс повторення,процедура небуде інкрементуватипокажчик команддо обнуленнярегістру-лічильника(е)сх. В цьомувипадку такожне буде вироблятисядекодуваннячерговий команди.
Ввиконавчомумеханізмівикликає інтересще і вибіркаоперандів.В реальномупроцесорістадії 2 декодуваннякоманди видаєтьсязапитання начитання операндаз пам'яті (якщотакий є). Далікоманда надходитьна стадію виконання.Більшістьзапитаньзадовольняєтьсяз кэша, тому націй стадіїоперанд надходитьв АЛУ. В емуляторіобчисленняефективноїадреси, сегментаціяі сторінковеперетвореннявиконуютьсяна стадії виконання.Процедураconv_adrз модуляstructs. cppвиконує компоновкуефективногозміщення операндав сегменті.Далі зміщеннянадходить наблок сегментації,реалізованийзасобами класу_sreg.Виробляєтьсявиклик одногоз цих засобівшляхом об'єкту,відповідногопотрібномусегментномурегістру. Післяперевірки правдоступу запитанняпередаєтьсязасобу типу_mem.Якщо включенийсторінковиймеханізм, засібpageadrвиробляє трансляціюлінійної адресив фізичний, атакож перевіркуправ доступудо сторінки.Далі ДОСупередає запитанняна читаннядільниці своп-файлу.При поверненніпо ланцюжкупередаєтьсябезпосереднєзначення операнда.Даний механізмдоступу уявленийна рисунку2.1.
Даний ланцюжокможе перерватисяіз-за порушеньправ доступу.
Якщо же операндзнаходитьсяв регістрі,виробляєтьсявиклик засобувідповідногооб'єкту типукласу, що подаєцей регістр.
2.4 Розробкаінтерфейсуз користувачем
2.4.1 Постановазадачі
Проаналізувавшикількістьінформації,що повинна бутидоступнійкористувачу,можна сказати,що вивести їїна екран всюводночас неможливо.
Для рішенняцієї проблемиє два шляху:розбити інформаціюна групи і виводитипослідовношляхом змінизображенняна всьому екрані,або розбитиінформаціюна більш дрібнігрупи і надатикористувачувирішувати,що буде відображенена екрані водночас.Перший засібвідрізняєтьсяпростотоюреалізації,але погіршуєгнучкістьпрограми і,отже, розширяємістьв випадку доданнянових функцій.Другий засібвимагає створеннябагатовіконногоінтерфейсуі застосуванняподійної моделікерування, алезате досягаєтьсязначне підвищеннявигоди користуванняі спрощуєтьсярозширяємість.
На підставівищезгаданогослідує зупинитисяна багатовіконномуінтерфейсі.
Можнатакож сформулюватидва основнихвимога до структуриінтерфейсу.Це передусіммінімальневтручання вроботу операційноїчастини і максимальналегкість доданнянових компонентбез перекомпіляціїстарих.
Для прискоренняпроцесу навчаннякористувачароботі з емуляторомслідує використатинабір керуючихкомбінаційклавішз якої-нибудьдобре відомоїпрограми, наприклад,середиBorland C++.
Слідуєтакож відзначити,що працюватиінтерфейсповинен в одномуз стандартнихрежимів адаптерівEGA абоVGA, ікраще, якщо цебуде текстовийрежим.
Всімавищенаведенимивимогою будеволодіти інтерфейспобудованийна базі бібліотекиTurbo VisionфірмиBorland. Алерезультуючийвиконавчийфайл післяприєднанняопераційноїчастини будедуже більшим,що ускладнитьотладку і ужорсточитьвимогу до вільноїпам'яті.
2.4.2 Розробкабібліотекибазових класів
Багатовіконнийінтерфейс зіспроможністюрозширеннязручніше будуватиз використаннямобєктно-орієнтованогопідходу.
Допоміжнітипи.
Для зберіганнякоординатоб'єктів і їхніхрозмірів доцільнорозробитидопоміжні типи.
КласTpoint. Об'єктцього типузберігає двумірнікоординатиабо розмір.Конструкторкласу виконуєперетвореннядвох чиселX і Y дотипу класу.Перевантаженіоператори“+”і“-“дозволяютьвиконуватиарифметичнідії над обомакоординатамивідразу.
КласTrect. Об'єктцього типузберігає інформаціюпро прямокутник:координативерхньоголівого куту,координатиправого нижньогокуту і розмір(для вигоди).Конструкторидозволяютьстворюватиоб'єкт класуна основі абочотирьох координат,або на основідвох об'єктівтипуTpoint.Перевантаженіоператори“+”і“-“дозволяютьзмінюватирозмір і положенняпрямокутника,а оператори“|”і”&”- виконуватибульовіфункції.
КласTmask. Об'єктцього типузберігає областьвисновку ідозволяє виконуватиз нею бульовіфункції. СправаВ Тому, що приперерисовцівмісту вікнавоно може частковоперекриютьсяіншим вікном,і щоб при висновкуне перерисовувативсі вікна верхнєвікно вичтелогічні своюобласть висновкуз області висновкуперекриваючоговікна. Процедура,що буде позичатисябезпосередновисновком,перевіритьобласть і небуде виводитиперекриттязнакомісця.
КласTEvent. Об'єктцього типузберігає інформаціюпро виниклуподію. Існуєдва джерелаподій: клавiатураі внутрішнійоб'єкт. При натискуклавіші всімоб'єктам передаєтьсяконтейнерподії, в якомумістяться кодклавіші і станслужбовихклавіш.При Необхідностіоновити інформаціюв інших вікнахоб'єкт генеруєподію оновлення,в цьому випадкупередаєтьсяконтейнер, вякому міститьсякод командионовлення. Типподії (клавішаабо команда)зберігаєтьсяв полеwhat.
Видні об'єкти.
Для відображенняінформаціїна екрані служатьвидні об'єкти.Видний об'єктподає собоюобласть висновкуобмеженупрямокутником.До видних об'єктіввідносятьсявікна, рядкивведення, колонкивибору і ін.Всі ці класиє нащадкамикласуTView.
КласTView. Об'єктданого класуподає на екраніпрямокутнуобласть, заповненуяким-або кольорем.Засоби класудозволяютьстворюватиієрархічнедерево об'єктіві маніпулюватиними. Всі об'єктина екраніспадкуютьсявід цього класу.Всі засобикласу проголошеніяк віртуальніі можуть бутиперевантаженів похіднихкласах. Данийклас дозволяєзосередитивсіх дії, зв'язаніз прорисовкоюі арбітражемподій в одномумісці і засобомспадкуваннявстроюватиїхн в інші класи.Підлеглі об'єктирозташовуютьсяу кольцевомубуферіз дуплекснимизв'язками. Об'єкт,що знаходитьсяв кореневомувузлі буферувважаєтьсяпоточним іперекриваючимвсі інші об'єктиданої групи.
КласTPackMenu.Об'єкт даногокласу подаєелемент меню.СпадкуєтьсявідTView ізберігає інформаціюпро назву пунктуменю, гарячомуклавіші і покажчикна підміню.Допускаєтьсявідсутністьякого-або параметру.Для функціонуванняелементів менюнеобхіднідекілька іншівідношенняв ієрархії,тому деякіфункції базовогокласу перевантаженіі додані новізв'язки.
КласTMenu. Об'єктданого класупередвизначенийдля зв'язкуелементів менюз іншими об'єктами.Цей об'єкт якправило невидимі служить дляпередачі подій.
КласTWindow. Об'єктданого класуподає вікнона екрані. Вполях класузнаходятьсяім'я вікна,допустимийрозмір і покажчикна локальнеменю. Засобикласу виконуютьзміну розміруі положеннявікна на екрані.СпадкуєтьсявідTView.
КласTEdit. Об'єктцього класуподає собоюрядок введення.Поля класузберігаютьпоточне положенняі форму курсору,розмір рядкаі покажчик нанеї, а такожпокажчик нарядок зі спискомдопустимихсимволів. Принадходженніподії натискуклавіші данийоб'єкт перевіряєможливістьвведення символу,якщо символзнаходитьсяв рядку допустимих,те він вставляєтьсяв результуючийрядок і виводитьсяна екран.
КласTList. Об'єктданого класуподає списокоб'єктів типурядка. Списокзавжди розташуєтьсявертикально.Весь списокв пам'яті незберігається.При створенніцього об'єктуконструкторув якості параметрупередаєтьсяпокажчик нафункцію. ПриНеобхідностівисновку рядкана екран Об'єктсписку викликаєцю функцію знеобхіднимипараметрамидля формуваннярядка.
КласTSetBox. Об'єктданого класуподає собоюгрупу настанов.В кожному рядкурозміщуєтьсяім'я параметруі ліворуч віднього ознаканастанови ввигляді хрестикав квадратнихдужках. Кожнийпараметр вгрупі можебути незалежновстановленийабо скинутий.
КласTSelect. Об'єктданого класуподає собоюгрупу взаємозависимихнастанов. Віндозволяє вибратиодин пункт зсписку можливих.Пункти розміщуютьсявертикальноі мають ліворучознаку настановив вигляді звездочкив круглих дужках.
КласTLabel. Об'єктцього класуподає собоюрядок заголовкунад об'єктомна екрані. Вінвстроюютьсяв кольцевийбуфер замістьоб'єкту і транслюєподії і команди,відрізняякоманду включенняабо виключенняфокуса, те єознаки поточногооб'єкту. Привключенніфокуса ім'япоміткипідсвічуєтьсязеленим кольорем,а при виключенні- кольорем тла.
КласTButton. Об'єктданого класуподає собоюкнопку. Длякнопки існуєім'я і гарячийклавіша принатиску введення,коли фокусзнаходитьсяна кнопці абонатиск гарячогоклавіші в областічинності кнопкиоб'єкт даногокласу поміщаєв чергу подійпередопреділенукоманду.
КласTApp. Об'єктданого класуздійснює зв'язокз ресурсамикомп'ютера:клавiатуроюі відеоадаптером.Спадкуєтьсявід класуTView, алеперевантажуєвсіх віртуальніфункції зв'язаніз трансляцієюподій і запитаньна перерисовку.Для реєстраціїі зберіганняподій є чергаз політикоюFIFO. Включенняінтерфейсув роботу здійснюєтьсяшляхом створенняпримірникаданого класуі виклика засобуrun (). Прицьомувідбуваєтьсяочистка екрануі створеннярядка статусу.
2.4.3 Описроботи бібліотекибазових класів
В основіпринципу керуваннялежить концепціявзаємодіїтільки з найближчимипідлеглимиоб'єктами ібезпосереднімродичем.Безпосереднімспілкуваннямз ресурсамикомп'ютерапозичаєтьсятільки класTApp, щодозволяє зберегтиконтроль надцими ресурсами.
Всі класивидних об'єктівспадкуютьсявід класуTView, вякому зосередженівсі основніфункції покеруваннюоб'єктами.
При створенніоб'єкту йомузвичайно передаютьсякоординатилівого верхньогокуту і розмір.При цьомуоб'єкт включаєтьсяв кольцевийбуфер якого-абовже існуючогооб'єкту. Предкомоб'єктів верхньогорівня є об'єкткласуTApp. Длявключенняоб'єкту в буфервикористовуєтьсяпроцедураadd (). Об'єктможе бути виключенийз буферу викликомзасобуsub ().
Що виникаєподія реєстраціяугоди в черзіподій і передаєтьсявсім підлеглимоб'єктам поієрархії.Першим контейнерподії одержуєоб'єкт,щознаходитьсяв фокусе те єщо є поточним.Він в свою чергупередає контейнерсвоїм нащадкам.Якщо подіярозпізнанавиконуєтьсяйого обробка,і керуваннявертаєтьсяпредку з кодомповернення,що говорятьпро розпізнанніподії. Якщоподія буларозпізнана,наступномуоб'єкту вононе передається.
Кожний об'єктволодіє мінімальнимнабором функційвисновку. Вданий набірвходять:
Функціявисновку рядказ означениматрибутом;
Функціявисновку рядказ поточниматрибутом(поточний атрибутформуєтьсяз кольору тлаоб'єкту, щозадається пристворенні, іконтрасногойому кольорусимволів);
Функціязаповненняпрямокутноїобласті певнимсимволом зозначеним абопоточним атрибутами;
Функціязаповненняпрямокутноїобласті означениматрибутом беззміни вмістусимвольноїчастини знакомісця.
Викликбудь-який звищенаведенихфункцій проводитьдо передачікерування тієїчастини об'єкту,що була наслідуванавід класуTView. Базовіфункції даногокласу створюютьобласть висновкутипуTMaskнеобхідногорозміру і заповненняцієї областіпереданимисимволами іатрибутами.Далі покажчикна областьвисновку передаєтьсяпредку, що виробляєвиклик функціїworkmask ()перекриваючихоб'єктів. Цяфункція виробляєвиключеннязнакомісць,що безпосередноперекриваютьсяданим об'єктом.Так по ієрархічномудереву областьвисновку доходитьдо об'єкту класуTApp, щовиробляє аналізобласті і висновокнеперекритыхзнакомісцьна екран.
При необхідностіперерисовкибудь-якої областіна екранівикликаєтьсяфункціяdraw (), якоїв якості параметрупередаютьсякоординати прямокутноїобласті,що повиннаперерисоватись.Якщо ця областьне перетинаєтьсяз прямокутникомоб'єкту, керуваннявертаєтьсяназад без виробництвабудь-яких дій.Інакше виробляєтьсявиклик функціїперерисовкипідлеглихоб'єктів.
Слідує відзначити,що підлеглийоб'єкт не може“вылезти” заобласть свогопредка. Данаобставина невиконуєтьсятільки дляоб'єктів, щоподають пунктименю. Їхні нащадкирозташуютьсяповерх зі зміщенням.
2.4.4 Описоб'єктіввіконногоінтерфейсу
Всі класи,безпосередностосовні довіконногоінтерфейсуемулятораспадкуютьсявід класуTWindow. Цедозволяє зосередитисяна створенніфункціональностіне піклуючисьпро взаємодіюцих об'єктів.
КласTCpu. Об'єктданого класуподає собоювікно з дізасемблірованимфрагментомкоду відлагодживаємоїпрограми. Вконструкторіоб'єкту створюєтьсяпримірниксписку длявисновку рядківкоманд. ФункціяhandleEvent ()перевантаженаз метою відспостереженнякомбінаційклавіш,керуючим процесомвиконанняпрограми.
КласTFile. Об'єктданого класуподає собоювікно зі спискомфайлів поточногокаталогу. Туттакож використанийоб'єкт типусписку. Пристворенніоб'єкту відбуваєтьсячитання поточногокаталогу івиділенняфайлів типу“.com” і”.exe”, атакож вкладенихдиректорій.
КласTRegs. Об'єктданого класуподає собоювікно, в якомувідображенийстан регістрівзагальногопризначенняпроцесора ,щоемулюється.Кожний рядокмістить меткуз ім'ям регіструі рядок введенняз вмістом регістру.Натиском клавіші“Tab” виробляєтьсязміна фокусана наступнийпо списку регістр.В якості допустимихсимволів врядок введенняпередаютьсясимволи, щовикористаютьсядля відображенняшістнадцятеричнихчисел.
КласTSregs. Об'єктданого класуподає собоювікно, в якомувідображенийстан сегментнихрегістрів, атакож регіструлокальноїтаблиці дескрипторіві регіструсегменту станузадачі. Кожнийрядок міститьметку з ім'ямрегістру і трирядки введеннядля бази, розміруі атрибутіврегістру. Длярядків введеннябази і розмірузастосовуютьсясимволи, щовикористовуютьсяв написаннішістнадцятеричнихчисел, а длярядка введенняатрибутів -символи дляпозначки двоїчнихчисел.
КласTSysReg. Об'єктданого класуподає собоювікно, в якомувідображаєтьсявміст системнихрегістрів. Вдану групувійшли: покажчиккомандEIP, системнірегістриCRx, атакож регістртаблиця глобальнихдескрипторіві регістр таблиціпереривань.Для відображеннятакож використовуютьсяметки і рядкивведення.
КласTFags. Об'єктданого класуподає собоювікно, в якомувідображаєтьсявміст регіструпрапорів. Длявідображенняпрапорів ізміни їхньогостану застосованийоб'єкт типуTSetBox. Коливікно активно(знаходитьсяв фокусі)клавішами зістрілкамиможна мінятипоточний прапор,а клавішеюпробілу абовстановлюватийого, або скидати.
КласTDump. Об'єктданого класуподає собоювікно, в якомувідображаєтьсявміст вибраноїдільниці пам'яті.Для відображенняпам'яті використанийоб'єкт типусписку. Це вікномає локальнеменю, що викликаєтьсяпо клавішам“Alt+F10”,і служить дляпідтриманнядіалога зкористувачемпри зміні адресидільниці ,щовідображаєтьсяабо засобуподання інформаціїв вікні.
КласTStack. Об'єктданого класуподає собоювікно, в якомувідображенийпоточний кадрстека відлагодживаємоїпрограми. Вкожному рядкувідображаєтьсязміщення івміст осередка.Розрядністьосередка залежитьвід розрядністьсегменту стека(16 або 32 розряду).Для відображеннякадру стекавикористанийоб'єкт типусписку. Поточнийосередок стека(на яку вказуєрегістр(e) sp)помічаєтьсястрілкою ліворучвід адреси.
3РОЗРОБКА АПАРАТНОЇЧАСТИНИ ЕМУЛЯТОРА
При проектуванніматеринськихплат спецЕОМвиникаютьтруднощі зїхньоюотладкою.Застосуванняже стандартнихматеринськихплат не завждивідповідаєпоставленійзадачі, боархітектураможе і не співпадати.Для перевіркиправильностіфункціонуваннячипсета надопомогу можутьприйти внутрисхемніемуляторипроцесорів.Під внутрисхемнимемуляторомв даному випадкурозумієтьсяцифрова схема,що для зовнішньоїапаратури ведесебе в точностіяк і реальнийпроцесор, аленадає можливостівироблятиотладку як впокроковомурежимі (одинковимисинхроімпульсами),так і в динамічномурежимі на частотісинхросигналаабо близькоїпо значенню,або відповідноїреальної.
Внутрисхемныйемуляторнеобов'язковоповинен емулювативесь процесор.Достатньо будепобудуватиемуляторінтерфейсногоблоку, а емуляціювнутрішніхблоків можевзяти на себепрограмнийемулятор.
В попередніхрозділах булодоведенаоптимальністьзастосуванняв спецЕОМпроцесораi486. Отжеі внутрисхемнийемулятор повиненемулюватироботу іменноцього процесора.
Вивчившипротокол роботиінтерфейсупроцесора можнасформулювативимогу довнутрисхемногоемулятора:
Максимальначастота синхросигналаповинна бутиякомога ближчедо реальноїчастоти (33МГц);
Протоколроботи з материнськоюплатою повиненповністю відповідатиреальномупротоколу;
Максимальначастота анулюваннярядків кеш-пам'ятіпершого рівняскладає 16МГц(цикл анулюванняпозичає дватакту). Жоднашина не зможитьпідтримуватитаку інтенсивністьзапитань. Отжекеш-пам'ятьпершого рівнянеобхідновиконати апаратно;
Платаемулятораповинна працюватиз будь-якимIBM-суміснимкомп'ютеромі підтримуватиз ним найбільшуможливу швидкістьобміну.
Проаналізувавшивищенаведенівимога можназробити наступнівисновки:
В якостіэлементноїбази слідуєзастосовуватисерію логічнихмікросхем,що забезпечуютьтиповий часзатримки небільш 3-4 нс.
Час вибіркидля мікросхемстатичноїпам'яті, що будевикористовуватисяв кэше не повинноперевищувати15 нс.
Для забезпеченнянеобхідноїшвидкостіобміну можевикористовуватисяшинаISA, авлаштуванняна ній повиннопрацювати яквлаштуванняпам'яті. Цедозволитьрозвиватипіковуюшвидкістьпередачі до50Мб/з.
Зважаючинаобмеженістьрозмірів платислідує вибиратимікросхемисередньогоі великий ступенюінтеграції.
3.2 Розробкаструктури
Аналізнеобхідногообладнання.
В обов'язкуінтерфейсногоблоку процесоравходить формуваннямолодших розрядівадреси А3-А2,розрядів виборубайтівВЕ3-ВЕ0 і керуючихсигналів. Інформаціящо надходитьна старші розрядишини адресиі шину данихне змінюється.Отже блок будеоброблятичотири розрядиадреси. Запитання,що надходятьв блок від програмноїчастини повиннівключати всебе:
32-розряднуфізичнуадресузапитання;
16 байт данихзапитання;
Довжинузапитання;
Тип запитання.
Апаратначастина повиннавертати сигналготовностідо прийомучерговогозапитання ірезультатпопереднього.
Максимальнадовжина запитанняможе складати16 байт. Значитьнеобхідно матирегістровийфайл на 16 байтз можливістюодночасноївидачі вирівненогоподвійногослова. Цей файлповинен працюватияк на запис(трансляціяданих з емуляторана зовнішнівиходи), так іна читання(трансляціяданих в емулятор).
Адресазапитаннятранслюєтьсятільки в одномунаправленні.Але в циклаханулюваннярядків кеш-пам'яті28 старших розрядівповинні читатисьз зовнішньоїшини адреси.
Кэш-пам'ятьє чотирьохвходовою.Вона має 128 банківпо чотири рядкив кожному. Врядку міститьсятег і 16 байт даних.При цьомуцикл анулюваннярядка не повиненперевищуватидвох тактівзовнішньоїшини.
Щоб анулюватирядок її необхідноспочатку знайти,причому пошукне повиненпозичати більшодного такту.Значить схемаповинна водночасаналізуватичотири тегапо 21 розряду.Такий аналізаторпозичить значнемісце, а значитьскоріше усьогоне підійде длярішення задачі.
В зв'язкуз цим можназробити допущення.Обмежитисядвохвходовимкешемі збільшитикількістьбанків до 256. Прицьомуводночас будутьаналізуватисядва тега по 20розрядів. Цяобставиназначно зменшуєапаратурнівитратиі незначнопогіршує ефективністькеша,а значить допущенняприйнятно.
При системномускиді або принадходженнізапитання наочистку всієїкеш-пам'ятінеобхіднопослідовноперебрати256 банків і скинутив них бітивірогідності.Для цієї метикраще усьогопідійде двоїчнийвосьмирозряднийлічильник.Використавшилічильник зпередустановою,можна скоротитирозрядністьрегістру адреси.
Якщо довжиназапитанняперевищуєдовжину подвійногослова або перетинаєйого межу, реальнийпроцесор виробляєдекілька циклівобміну, починаючизі старшоїчастини. Напідставі цьогоможна запропонуватинаступну структурублоку формуванняадреси. Параметризапитаннянадходять зшиниISA ізапам'ятовуютьсяна регістрі.Далі відбуваєтьсяпідсумовуваннядовжини запитанняз базовою адресою,і результатзапам'ятовуєтьсяна наступномурегістрі. Помірі обробкизапитаннядовжина зменшується,а адреса можеабо збільшуватися,або зменшуватисяв залежностівід дозволупакетногообміну і початковоїдовжини запитання.Для реалізаціїтакої структуризнадобитьсясуматор, декременторі ікрементор/декрементор.
Опис структури.
На підставіусього вищезгаданогоможна попередноскласти структуруапаратноїчастини. Влаштуваннямає дві основнішини: шину адресина 28 розрядіві шину данихна 32 розряду.На шині адресиє два джерела:регістр адресизапитання ізовнішня шинаадреси. Молодшівісімрозрядів регіструадреси запитанняреалізованіна двоїчномлічильникові.На шині данихприсутнічотири джерела:регістр данихзапитання,матриця пам'ятіданих кеша,зовнішня шинаданих і шинаданихISA. Матрицяпам'яті тегівмає довжину40 розрядів, нащо може надходитиінформаціяз шини адреси.Два влаштуванняпорівняннявиконуютьпорівняннятегівз інформацієюна шині адреси.Результатипорівнянняразом з бітамивірогідностіі бітамиLRU надходятьна вхід контролеракеш-пам'яті,реалізованогов вигляді автоматуз жорсткоюлогікою. Молодшірозряди адреси,довжина запитанняі дані типузапитаннянадходять зшини данихISA ізапам'ятовуютьсяна регістрі.Далі знаходитьсясуматор дляобчисленнястартовоїадреси запитанняі регістрипоточної адресиі довжини. Навиходах цихрегістрів стояєсхема, що напідставі поточноїдовжини і адреси,а також сигналівдинамічноїзміни розрядністьформує молодшірозряди адресиі сигнали виборубайтів.Всім цим управляєцентральнийконтролер,собою автомат,що подає нажорсткій логіці.Сигнали керуваннякешемформуютьсякомбинаційноюсхемою на підставістану автоматуконтролераі внутрішніхзмінних. Сигналикерування всімвлаштуваннямформуютьсякомбинаційноюсхемою на підставістану автоматуцентральногоконтролераі сигналівзовнішньоїшини керування.Для збігунеправдивихспрацюванньмайже всі сигнализовнішньоїшини керуваннязаклацуютьсяна регістрів кінці кожноготакту. Що виробляютьсяконтролеромвідповіднісигнали з'являютьсяв наступномутакті. Всевищезгаданене суперечитьлогіці роботиреального блокупроцесора. ЗточкизорушиниISA влаштуванняє швидкою пам'яттюобсягом 21 байті що починаєтьсяза адресою0C8000h.
3.3 Розробкапринциповоїсхеми
Елементи,що забезпечуютьтрансляціюі зберіганняпараметрівзапитання, атакож елементипам'яті можутьбути виконаніна мікросхемахсередньомуступені інтеграції,бо корпусамікросхем,як правило,використовуютьсямаксимально.Інше діло -комбинаційнісхеми формуваннякеруючих сигналів.В них використовуєтьсябезліч різнотипнихпростих логічнихелементів. Длязменшеннякількостікорпусів наплаті доцільнозастосуватидля побудовикомбинаційнихкеруючих схеммікросхемивеликий ступенюінтеграції.До таких схемвідносятьсялогічні матриці,що програмуються.В вітчизнянійелементнійбазі присутняполузаказнамікросхемаК1520ХМ2, виконанапо технологіїЕЗЛз двоступінчастимпереключеннямструмів. Микросхемаподає собоюнабір з 72 топологічнихосередків, вяких можутьбути реалізованіпрактичнобудь-які елементи.Є сенс застосуватидану мікросхемудля реалізаціїкеруючих автоматіві комбинаційнихсхем.
3.4 Описроботи влаштування
Формуваннязапитань наобмін з периферійнимобладнаннямсистемної платиспецЕОМлежить на програмнойчастині емулятора.Апаратна частинавиконує рольтрансляторазапитань іформуваннякеруючих сигналів,що залежатьвід часу і неможуть бутизадані заздалегідь.
Всі запитанняповинні поміщатисьв виравненушістнадцятибайтнуобласть адреспам'яті абовведення-виведення.
Передвидаваннямзапитаннябажано переконатисяв тому, що апаратураготова їхнприйняти. Бітготовностіможна отриматиза адресою0C8014h. Інакшецикл обмінупо шиніISA будезатриманийдо приведенняапаратури встан готовності.
В таблиці3.1наведена областьпам'яті дляобміну з влаштуванням.
Таблиця3.1Область пам'ятіобміну.
Адреса | Довжина,байт | Типобміну | Вміст |
0C8000h | 16 | Запис | Данідля запису |
0C8000h | 16 | Читання | Данідля читання |
0C8010h | 4 | Запис | Адресазапитання |
0C8014h | 1 | Запис | Типзапитання |
0C8014h | 1 | Читання | Байтстану |
0C8015h | 1 | Запис | Довжиназапитання |
Дані слідуєчитати і записуватитільки вирівненимисловами. Те жевідноситьсядо запису адреси,типу запитанняі його довжини.Читання байтастану можнавироблятибудь-яким засобом,але адресаповиннавідповідати.
Запис довжиниі типу запитаннянаводить дозапуску механізмутрансляціїі скиду прапораготовності.
Запитаннячитання операндів.
Післязапуску механізмутрансляціївідбуваєтьсяпідсумовуванняпочатковоїадреси і довжинизапитання дляодержаннястартовоїадреси. Водночасвідбуваєтьсяпошук данихв кеш-пам'яті.Якщо дані знайдені,всі 16 байт зачотири тактусинхронізаціїпереписуютьсяв файл даних,і обслуговуваннязапитаннязакінчується.Після цьогодані можнапрочитати зфайлу даних.Якщо відбувсякеш-промахі зовнішня шинавільна, генеруєтьсязапитання начитання данихі активізуєтьсясигналADS. Якщоза такт до прибуткусигналуRDY абоBRDY прийшовсигналKEN ізаповненнякешарозв'язане,довжина запитанняавтоматичнізбільшуєтьсядо 16, і дані щонадходять ззовнішньоїшини данихзаписуютьсяокрім файлуданих ще і врядок кеш-пам'яті.
Якщо стартоваадреса запитаннянепарний абодовжина запитанняперевищує 12байт, формуєтьсянеактивнийсигналBLAST, ввідповідь нащо чипсет повиненвідповістисигналомBRDY замістьRDY. Якщоце відбулосяцикл вважаєтьсяпакетним, сигналADS більшне видається,а формуваннянаступноїадреси відбуваєтьсяавтоматичніпо наступномуправилу: якщостартова адресанепарна - поточнаадреса зменшується,інакше - поточнаадреса збільшується.
Запитаннязапису операндів.
При записіоперандівзапитання напакетний циклне робиться,бо реальнийпроцесор неможе зібратипакет довжинибільшніж 32біта.Виключенняскладає випадок,коли відбуваєтьсязміна розрядністьшини даних. Вцьому випадкусигналBLASTзалишаєтьсяпасивним,сигналізуючипро можливістьпакетногоциклу.
4 ТЕХНІКО-ЕКОНОМІЧНЕОБГРУНТУВАННЯДИПЛОМНОГОПРОЕКТУ
4.1 Вихіднідані і умови
Програмнийпродукт "Емуляторосновнихфункціональнихблоків мікропроцесоруi486" (в подальшому"емулятор")подає собоюінтегрованусереду длявивчення іперевірки знаньв областіпрограмуваннясучаснихмікропроцесорівтипу i486 на мовіАссемблерана лабораторнихроботах подисципліні"Мікропроцесорнізасоби і системи"по темам:
- мікропроцесорi486, захищенийрежим;
- мікропроцесорi486, сторінковаадресація.
Данийпрограмнийпродукт розробленийдля роботи наПЕОМ на базібільш ранніхмікропроцесорівфірми Intel типу80286 і розрахованийна користувачів,що маютьнеобхіднізнання в областіпрограмуваннямікропроцесорівтипу i486 в машиннихкодах.
Емулятормає простийі зрозумілийінтерфейс зкористувачем,достатньозручний в звертанні.
4.2 Аналізринку подібнихрозробок
В теперішнійчас відчуваєтьсягострий браксистемнихпрограмнихпродуктіввітчизняноговиробництва,в тому числіі програм-емуляторівмікропроцесоріві систем побудованихна їхній базі.
Перевагаданої розробкиполягає в тому,що при існуючомурівні технічноїозброєностілабораторійє можливістьвикористанняїї на застаріломуобладнанні,в відзнаці відіснуючого наринку програмногозабезпечення,що припускаєвикористаннясучаснихобчислювальнихзасобів,що дорого коштують.Не маловажнимфактором, також,є затрати зв'язаніз оплатою праціна розробкупроекту, щобудуть набагатоменші,ніж на подібнірозробки вжеіснуючогопрограмногозабезпечення,що відповіднознизить цінуна програмнийпродукт прийого розповсюдженні.
Такимчином,дана розробка,при її невисокійціні, малихапаратурнихвимогахі більших технічнихможливостяхповинна позичитисвою нишу насучасному ринкуПО.
4.3Проектно-конструкторськадокументація
Для розробкипроекту необхіднанаступнадокументація:
- технічнезавдання нарозробку емулятора;
- комплектдокументаціїна мову програмуванняC++;
-комплектдовідковоїдокументаціїпо архітектуріі програмуваннюмікропроцесоруi486.
При використанняпрограмногопродукту необхіднінаступнітехнічнізасоби:
- персональнийкомп'ютер IBM i80x86або з ним сумісний;
- оперативнапам'ять обсягомне менше 2Мб;
- будь-якийтип відеоадаптераі дісплею дляроботи в текстовомурежимі;
- операційнасистема MS DOS 3.30 абобільш пізньоїверсії;
- наявністьнакопичувачана гнучкихмагнітнихдисках абожорсткогодиску.
До розробленогопрограмногопродукту додаєтьсянаступнадокументація:
- опис програми- відомості прологічну структуруі функціонуванняпрограми;
- керівництвопрограміста- відомості дляексплуатаціїпрограми;
- керівництвооператора -відомості длязабезпеченняпроцедуриспілкуванняоператора зобчислювальноюсистемою впроцесі виконанняпрограми.
4.4 Плануваннятермінів розробкипроекту
Перелік етапіві робіт розробкипроекту уявленийв таблиці 1, деприйняті наступніпозначки:
А) П - інженер-програміст;
Б) К- керівник розробки;
В) Е- економіст-консультант.
З таблицівидно, що нарозробку проектуінженер-програмістз місячнимокладом 160 грн.Витрачає96 днів, керівникз місячнимокладом 190 грн.витрачає35 днів, економіст-консультантз місячнимокладом 120 грн.витрачає3 дні.
Таблиця 1 -Зведена таблицятривалостіі трудомісткості
Найменуванняетапу | Найменуванняроботи | Виконавець, Посада,спеціальність | Кількістьвиконателей | Тривалістьвиконанняроботи |
1 | 2 | 3 | 4 | 5 |
1. Подготови-тельнаястадія |
| П, К П К, Е К К К,Е | 2 1 2 1 1 2 | 2 5 1 1 3 2 |
2. Теоретичнарозробка |
| П, К П П,К | 2 1 2 | 1 1 1 |
3. Практичнареалізація |
| П, К П П,К | 2 1 2 | 5 3 3 |
4. Доопрацюваннясистеми |
| П П П П П П П П | 1 1 1 1 1 1 1 1 | 7 14 7 14 3 3 3 3 |
5. Заключнийетап |
| П, К П П, К П, К П | 2 1 2 2 1 | 7 3 7 2 7 |
4.5Фінансово-економічнаоцінка проекту
В кошторисвитрат на розробкупроекту включаються:
- затрати назаробітнуплату;
- відрахуванняв фонд соц.страхування(4.5%);
- відрахуванняв пенсійнийфонд (25%);
- відрахуванняв фонд Чорнобиля(6%);
- відрахуванняв фонд зайнятості(1%);
- додатковівитрати:
1) затрати надискети;
2) затрати налітературу;
3) затратина папір і смугудля принтера;
- видатки наоренду машинногочасу.
Затратина заробітнуплату розраховуютьсяпо формулі:
Ззп=К* (МО*QДР)/24*Кпр,(7.1)
Де:
Ззп - затратина заробітнуплату;
К - кількістьфахівців;
МО - місячнийоклад;
Qдр - кількістьднів роботи;
Кпр - коефіцієнтпремії.
Затрати назаробітну платуінженерів-програмістів:
Зп.Пр=(160*96)/24*1. 25=800 (грн).
Затрати назаробітну платукерівникапроекту:
Зкп.Зп=(190*35)/24*1. 25=346.36 (грн).
Затрати назаробітну платуекономіста-консультанта:
Зе.Зп=(120*3)/24*1. 25=18.75 (грн).
Загальназаробітнаплата:
Ззп=Зп.Пр+Зкп.Зп+Зе.Зп, (7.2)
Ззп=800+346.36+18.75=1165.11(грн).
Додатковівитратирозраховуютьсяпо наступнійформулі:
Вд=Здс+Зл+Зб,(7.3)
Де:
Вд- додатковівитрати;
Вдс- витратина дискети (1грн);
Вл- витратина літературу(20 грн);
Вп- витратина папір і смугудля принтера(15 грн).
Вд=1+20+15=36(грн).
Вартістьмашинного часу:
Вмч=K*Qдр*7*Сч,(7.4)
Де:
Вмв- витратина оренду машинногочасу (при роботіпрограміста64 дня на машині);
K - кількістьфахівців;
Qдр - кількістьднів роботи;
Сч - ціна однієїгодини машинногочасу.
Вартістьоднієї годинимашинного часувизначаєтьсяз розрахунку:
- річна заробітнаплата основнаі додаткова:
1) керуванняОЦ- ЗПУ=12 250=3000 (грн);
2) обслуговування- ЗПО=160 12=1920 (грн);
3) ремонт - ЗПР=800(грн);
- вартістьмашин і обладнання:
1) вартістькомп'ютерівС1=24000 грн;
2) вартістьоргтехнікиС2=1500 грн;
3) норма амортизаціїНа=11%;
- видаткиелектроенергіїв рік Е=16000кВт 77 0ч;
- ціна 1 кВт77 0ч Це=0.063(грн);
- видатки назапасні частинина ремонт Рр=600(грн);
- видаткина матеріалипри експлуатаціїосновногообладнанняРео=200(грн);
- видаткина матеріалипри експлуатаціїдопоміжногообладнанняРед=400(грн);
- інші витратиРп=800 (грн);
- кількістьгодин корисногочасу за рікЧп=45000 ч;
- рентабельністьР=25%.
Виробничівитрати ОЦ:
І=ЗПУ+ЗПО+ЗПР+(С1+С2) *На+Е*Це+Рр+Рео+Ред+Рп,(7.5)
І=11788 (грн).
Вартість1 години машинногочасу
Сг=І/Чп,(7.6)
Сг=11788/45000=0.26(грн).
Ціна 1 годинимашинного часу
Цг=Сг(Р+1), (7.7)
Цг=0.26(0.25+1)=0.33 (грн).
Такимчином,витратина оренду машинногочасу
Вмч=647 0.33=145.6 (грн).
Витратина розробкукомплексу:
В=Ззп(1+0.045+0.25+0.06+0.01)+Вд+Вмч,(7.8)
В=Ззп1.365+Вд+Вмч,(7.9)
В=1165.111.365+36+145.6=1771.98 (грн).
Такимчином,програмнийпродукт "Емуляторосновнихфункціональнихблоків мікропроцесоруi486" призначенийдля вивченняі перевіркизнань в областіпрограмуваннісучаснихмікропроцесорівтипу i486 в машиннихкодах по дисципліні"Мікропроцесорнізасоби і системи"дозволяє вдосконалитинавчальнийпроцес. Розробленупрограму доцільновикористатидля лабораторнихі практичнихробіт.
5 МЕТОДИЧНІВКАЗІВКИ ДОЛАБОРАТОРНИХРОБІТ
Регістрипроцесора.
Процесормає регістри,що поділяютьсяна наступнікатегорії:
Регістризагальногопризначення;
Покажчикінструкційі регістр прапорів;
Сегментнірегістри;
Системнірегістри;
Регістриотладки;
Регістритестування.
Останні двікатегоріїрегістрів вемуляторі нереалізованіі не мають відношеннядо даної лабораторноїроботи.
Набіррегістрівзагальногопризначеннявключає відповіднірегістри попередніхпроцесорів(8086 і 80286). Всі регістримають розрядність32 біти,і до колишньоїпозначки їхніхімен додашласяприставка Е.Відсутністьприставки вімені означаєзаслання намолодші 16 бітрозширенихрегістрів. Які в 8086, можливонезалежнезвертання домолодшого істаршого байтіврегістрів.
ПокажчикінструкційEIP міститьзміщення наступноївиконуваноїінструкціївідносно базисегменту кодів.
РегістрпрапорівEFLAGS такожпоширений до32 біт.Біти,певні для 8086 і80286, мають колишнєпризначення,але у порівнянніз 80286 з'явилисянові біти.
Призначеннянових прапоріврегіструEFLAGS:
AC(Alignment Check,біт18)- прапор контролювирівнювання.При виконанніпрограм нарівні привілей3 в випадкузвертання дооперанду, невирівненомупо відповідніймежі, і привстановленомупрапоріAC відбудетьсявиключення-відмова17 з нульовимкодом помилки.
VM(Virtual Mashine,біт17)- в захищеномурежимі включаєрежим віртуального8086. Спроба використанняпривілейованихінструкційв цьому режимівикличе виключення13. Бітможе встановлюватисятільки в захищеномурежимі: інструкцієюIRET нанульовомурівні привілейабо переключеннямзадач на будь-якомурівні привілей.На бітне діють інструкціїPOPF, аPUSHF вобраз цьогорегістру завждизаносить 0. Йогоодиничне значенняможе зберегтисятільки в образі,що зберігаєтьсяпри перериванніабо переключеннізадач.
RF(Resume Flag,біт 16)- прапор поновлення,використовуєтьсяспільно з регістрамикрапок останова.
Сегментнірегістри містять16-разрядныеселекторы і64-розряднідескрипторнічастини. В реальномурежимі вмістселекторноїчастини співпадаєадресою сегменту,а розмір сегментузавжди рівний64 Кб. В захищеномурежимі адресасегменту і йогорозмір можутьбути довільнимиі завантажуютьсяз дескрипторасегменту, щорозміщенийв спеціальнійтаблиці. В відзнакувід процесора80286 адреса сегментумає 32 розряду,а розмір 20 розрядів,крім того взалежностівід бітадрібності вполе атрибутівсегменту розмірможе бути уявленийв байтах абосторінках по4 Кб. В поле атрибутівдескрипторадодані дванових прапора:бітдрібностіG і бітрозрядністьD. Останніймає сенс тількидля сегментівкодів і стека.Формат селектораі дескрипторауявленийна рисунку 5.1.
ПолеTI (біт2) служить індикаторомтаблиці. Йогозначення вказуєтаблицю,щовибирається:GDT приTI=0, LDT приTI=1.
Поле ІНДЕКС(біти15-3) служить індексомдля виборуодного з 8192 дескрипторів.
Поле типусистемногодескрипторавизначає йоготип. Типи системнихдескрипторовнаведені втаблиці 5.1.
Таблиця5.1Типи системнихдескрипторів
Тип | Визначення | Тип | Визначення |
0 1 2 3 | Невикористовується ДоступнийTSS 286 ТаблицяLDT ЗайнятийTSS 286 | 8 9 A B | Невикористовується ДоступнийTSS 386+ Зарезервирован ЗайнятийTSS 386+ |
4 5 6 7 | Шлюзвиклика 286 Шлюззадачі Шлюзперериваннь286 Шлюзловушки 286 | C D E F | Шлюзвиклика 386+ Зарезервирован Шлюзперериваннь386+ Шлюзловушки 386+ |
Регістрилокальноїтаблиці дескрипторіві сегментустану задачімають таку жеструктуру які сегментнірегістри. Регістриглобальноїдескрипторноїтаблиці і таблиціперериваньмають тільки32-розряднеполе бази і16-розряднеполе розміру.
СистемнірегістриCR0, CR2, CR3мають 32-розряднуструктуру івикористовуютьсядля настановирежимів і контролю.РегістрCR0 вякості молодшоїчастини включаєв себе бітирегіструMSW процесора80286.
Призначеннябітів регіструCR0 наступне:
PE(Protection Enable,біт0) - дозвіл захисту,настанова бітапереводитьпроцесор взахищенийрежим;
MP(Monitor Processor Extention,біт1) - моніторінгсопроцесора,дозволяє викликативиключення7 по командіWAIT приTS=1;
EM(Processor Extention Emulated,біт2) - емуляціясопроцесора,дозволяє викликативиключення7 по кожній командісопроцесора;
TS(Task Switch,біт3) - задача переключена.Встановлюєтьсяпісля кожногопереключеннязадачі;
ET(Extention Type,біт4) - індикаторпідтримкиінструкційматематичногосопроцесора;
NE(Numeric Error,біт5) - дозвіл стандартногомеханізмуповідомленняпро помилкусопроцесора;
WP(Write Protect,біт16)- дозвіл захистувід запису нарівні привілейсупервизорав сторінкитільки длячитання;
AM(Alignment Mask,біт18)- дозвіл контролювирівнювання;
NW(Not Writethrough,біт29)- заборона наскрізназапису кешаі циклів анулювання;
CD(Cashe Disable,біт30)- забороназаповненнякеша;
PG(Paging Enable,біт31)- включеннямеханізмутрансляціїсторінок.
РегістрCR2 зберігає32-розряднулінійнуадресу,по якійбула отриманаостання відмовасторінки пам'яті.
РегістрCR3 встарших 20 розрядахзберігає фізичнубазовуадресукаталогу сторінок.
Формуваннялінійної адреси.
Механізмформуваннялінійної адресиоднаков в будь-якомурежимі роботипроцесора. Відрежиму залежитьтільки засібзавантаженнясегментногорегістру. Вреальному івіртуальномурежимах значеннясегментноїадреси завантажуєтьсяв селекторнучастину і вполе базидескрипторноїчастини попереднозсунутена 4 розрядуліворуч. Розмірвстановлюєтьсярівним 64 Кб. Досегменту дозволяєтьсядоступ як позапису, так іпо читанню. Взахищеномурежимі дескрипторначастина завантажуєтьсяз глобальноїабо локальноїтаблиці, а вселекторнучастину завантажуєтьсяселектор, здопомогою якогобув вибранийдескриптор.Кодовий сегментслужить тількидля вибіркиінструкційі може бутидоступнийтільки длячитання. Сегментиданих завждидоступні длячитання і можутьбути доступнідля запису.Права доступудо сегментувизначає словоатрибутівдескриптора.
Лінійнаадреса формуєтьсяшляхом підсумовуваннявмісту полябази в дескрипторноїчастині сегментногорегістру іефективногозміщення, щосформувалосьз допомогоюодного з засобівадресації.
В 16-розрядномрежимі адресаціїформуванняефективногозміщення повністюспівпадає зпроцесорами8086 і 80286. В 32-разрядномрежимі безsib-байтаадреса формуєтьсяз вмісту будь-якогорегістру загальногопризначенняі зміщення(зміщення аборегістр можутьбути відстуній).Для формуванняадреси з декількохкомпонент в32-розрядномрежимі післяmod-байтав інструкціїставитьсяsib-байт(Scale-Index-Base,масштаб-індекс-база).В цьому байтіміститьсяінформаціяпро те, що регістрє базовим, щоіндексним іщо фактор зрушеннязастосовуєтьсядо індексу.Вміст індексногорегістру передформуваннямадреси можебути зсунутийна 1, 2 або 4 розрядуліворуч. В якостібазового ііндексногорегістру можевиступатибудь-який регістрзагальногопризначення.
Механізмтрансляціїсторінок.
Трансляціясторінок здійснюєтьсятільки в захищеномуі віртуальномурежимах. Прицьомулінійна виконавчаадреса транслюєтьсяв фізичний здопомогоюдворівневогосторінковогомеханізму.
Лабораторнаробота N1
Метою лабораторноїроботи є вивченняоснов програмуванняв захищеномурежимі длямікропроцесору80486, а також одержаннянеобхіднихнавиків роботиз емуляторомцього процесора.
5.2.1 Завданнядо лабораторноїроботи
В данійроботі студентповинен скластипрограму, щоформує в пам'ятінеобхіднітаблиці, переводитьпроцесор взахищенийрежим, виводитьна екран ФІБстудента івертаєтьсяв реальнийрежим. При цьомурозрядністьсегментів кодуі стека, направленнярозширеннясегменту стекаі засіб адресаціїпри пересилцірядки на екранзадані з допомогоютаблиці варіантів.Програма повиннабути відлагодженаі продемонстрованана емуляторі.
Перед виконаннямлабораторноїроботи рекомендуєтьсяознайомитисяз конспектомлекцій і літературоюпо програмуваннюпроцесора взахищеномурежимі.
Складемопрограму дляпересилкитекстовогорядка з використанняміндексноїадресації змасштабуванням.Кодовий сегменті сегмент стекає 32-розрядными,стек поширюєтьсявниз.
Для роботипрограми взахищеномурежимі достатньомати тількитаблицю глобальнихдескрипторів,що міститьнаступні елементи:
Нульовийдескриптор;
Дескрипторсегменту коду(32-розрядний);
Дескрипторсегменту даних;
Дескрипторсегменту стека(32-розрядний,поширюєтьсявниз);
Дескрипторданих відеобуфера.
Для трансляціївихідноготексту програмив виконавчийфайл проведемоз використаннямтранслятораTasm ілинкераTlink.
; файл“lab1. asm”
IDEAL; режимIdeal
P486; 80486 зінструкціямиProtect mode
model large; модельпам'яті
stack 256; стек реальногорежиму 256 байт
segment stak use32; сегментстека захищеногорежиму
dd 256 dup (0)
stk_len=$; довжинасегменту стека
ends
struc descr; структурадескриптора
limit1 dw 0; розмір,біти15-0
base1 dw 0; база,біти15-0
base2 db 0; база,біти23-16
acs dw 0; словоатрибутів ірозмір (біти19-16)
base3 db 0; база,біти31-24
ends
SEGMENT DATA USE32; сегментданих
label gdt dword; таблицяGDT
d1 descr ; нульовийдескриптор
sel_code= $-gdt; селекторсегменту коду
cod descr ;дескрипторсегменту коду
sel_data= $-gdt; селекторсегменту даних
dat descr ;дескрипторсегменту даних
sel_stk= $-gdt; селекторсегменту стека
stk descr ; дескрипторсегменту стека
sel_video= $-gdt;селекторсегменту відеопам'яті
video descr ;дескрипторсегментувідеопамяті
label dat_gdt pword; покажчикнаGDT
gdt_len dw $-gdt;довжина
gdt_base dd 0; лінійнаадреса
dlen dd data_len; довжинасегменту даних
clen dd pcode_len; довжинасегменту коду
slen dd stk_len; довжинасегменту стека
message db 'РабиновичАбрам Исаакович',0; текстовийрядок
data_len=$
ENDS
; 16-розряднийсегмент кодуреальногорежиму
SEGMENT CODE USE16
assume cs: code, ds: data
; головнапроцедура
proc main
mov ax, data; настройкаDS насегмент даних
mov ds, ax
; настройкадескрипторасегменту коду
mov eax, pcode
shl eax, 4; обчисленнялінійної адреси
push sel_code; селекторсегменту
push409ah; 32-розряднийсегмент коду,
; доступнийпо читанню
push[clen]; довжинасегменту
pusheax; лінійна адресасегменту
call make_desc; заповненнядескриптора
add sp, 14; анулюванняпараметрівв стеке
; настройкадескрипторасегменту даних
mov eax, ds
shl eax, 4; обчисленнялінійної адреси
pushsel_data;селектор сегменту
push4092h; 32-разрядныйсегмент даних,
; доступнийпо запису,поширюєтьсявверх
push[dlen]; довжинасегменту
pusheax; лінійна адресасегменту
call make_desc; заповненнядескриптора
add sp, 14; анулюванняпараметрівв стеке
; настройкадескрипторасегменту стека
mov eax, stak
shleax, 4;обчисленнялінійної адреси
add eax, [slen]; вершинистека
push sel_stk; селекторсегменту
push4096h; 32-розряднийсегмент даних
; доступнийпо запису,поширюєтьсявниз
push[slen]; розмір сегменту
pusheax; лінійна адресасегменту
call make_desc; заповненнядескриптора
add sp, 14; анулюванняпараметрівв стеке
; настройкапокажчика наGDT
mov eax, ds
shl eax, 4
add eax, offset gdt; лінійнаадреса таблиці
mov [gdt_base], eax
lgdt [dat_gdt]; завантаженнярегіструGDTR
cli;заборона апаратнихпереривань
mov eax, cr0; настановабітарежиму в регістріCR0
inc al
mov cr0, eax
; jmp far sel_code: offset pmode;перехід насегмент
; захищеногорежиму
dw 0ea66h
dd offset pmode
dw sel_code
endp
; процедуразаповненнядескриптора
proc make_desc near
; список параметрів
ARG base: dword,; базоваадреса сегменту
len: dword,; розмірсегмента
acs: word,; атрибутисегменту
sel: word; селекторсегменту (нарівні
; привілей0 селектордескриптора
;в таблиціGDT, єтакож
;зміщенням вцій таблиці)
enter 0.0; створеннякадру стека
mov si, [sel]
add si, offset gdt; обчисленняадреси дескриптора
mov eax, [base]
mov [dword si+descr. base2], eax;завантаженнябази сегменту(біти31-24)
mov [dword si+descr. base1], eax;завантаженнябази сегменту(біти23-0)
mov eax, [len]
mov [si], ax; завантаженнярозміру сегменту(біти15-0)
shr eax, 8
xor al, al
or ax, [acs]
mov [si+descr. acs], ax; завантаженняатрибутів і
; розміру(біти19-16)
leave; анулюваннякадру стека
ret; повернення
endp
; завершенняроботи програми
proc rmode
sti
mov ax, 4c00h; функціязавершенняз кодом 0
int 21h; викликДОС
endp
ENDS
; 32-розряднийсегмент кодузахищеногорежиму
SEGMENT PCODE USE32
assume cs: pcode, ds: data, ss: stak
; головнапроцедура
proc pmode
mov eax, sel_stk; настройкастека
mov ss, ax
xor esp, esp; покажчикна вершину
mov eax, sel_data; настройкана сегментданих
mov ds, ax
mov fs, ax
mov gs, ax
mov eax, sel_video; настройкана відеопам'ять
mov es, ax
call print; викликпроцедурипечатки
mov eax, cr0
xor eax, 1
mov cr0, eax; скидбітарежиму в регістріCR0
jmp far code: rmode;поверненняв сегмент реальногорежиму
endp
; процедурапечатки
proc print near
xor edi, edi; зміщення0 в відеопам'яті
lea esi, [message]; адресарядка
mov ah, 17h; атрибутисимволів
; цикл виводу
@@1: mov al, [esi]; завантаженнявal черговогосимволу
or al, al; перевіркана 0
jz @@2; якщо 0, тевихід з циклу
mov [es: edi*2], ax; символз атрибутомв відеопам'ять
inc esi; наступнийсимвол
inc edi; наступнезнакомісце
jmp @@1; повторенняциклу
@@2:
ret; повернення
endp
pcode_len=$
ENDS
end main; крапкавходу в програму
Створеннявиконавчогофайлу здійснювалосяслідуючимчином:
tasm.exe lab2. asm/m2
tlink. exe lab2.obj/
3містзвіту з лабораторноїроботи
Повнасхема формуванняадреси призаписі в відеопам'ятьв відповідностіз заданим варіантом.
Форматщо використаютьсяселекторіві дескрипторівз реальнимизначеннями.
Текст програми.
Вміст регістрів,що використаютьсяі кадру стекапід час пересилкирядка.
Контрольніпитання
Якиймінімальнийі максимальнийрозмір сегментупри встановленомуі скинутомубіті дрібностів дескрипторі?
Як змінитьсяпокажчик32-розрядногостека привталківаніїв нього операндарозміром:
А) слово;
Б) подвійнеслово?
Можна чи невикористатиперехід післяпереключеннярежиму і чому?
Лабораторнаробота N2
Метою даноїлабораторноїроботи є закріпленнязнань про роботумеханізмутрансляціїсторінок, атакож одержаннянавиків в укладаннітаблиць сторінок.
Лабораторнаробота розрахованана 2 академічнихгодини.
В данійроботі студентповинен скластипрограму щоформує в пам'ятінеобхіднісистемні таблиці,переводитьпроцесор взахищений режимз включениммеханізмомтрансляціїсторінок, виводитьв відеопам'ятьрядок з ФІБстудента іпереводитьпроцесор вреальний режим.При цьомувідеопам'ятьповинна знаходитисяпо логічнійадресі 100000h, щодосягаєтьсязастосуваннямсторінковогомеханізму.Розмір сторінкипам'яті беретьсяз таблиці варіантів.
Таблицісторінок слідуєскладати тількидля першогомегабайта плюсобласть відеопам'яті.
Якщо розмірсторінки меншстандартного,поля лінійноїадреси вирівнюютьсяпо правомукраю, а в елементахкаталогу аботаблиці - фізичнаадреса завждипочинаєтьсяз 12-го розряду.
При укладанніпрограми можнаскористуватисявихідним текстомз попередньоїроботи.
Складемопрограму щовикористаєсторінковиймеханізм зрозміром сторінки4Кб. Якщо використативихідний текстз попередньоїроботи, достатньопроголоситив сегментіданих областьдля каталогуі таблиць сторінок,додати в головнупроцедуру коддля формуванняцих таблицьі змінити базовуадресу відеобуфера.
Бо немаєнадоби складатитаблиці дляусього адресногопростору, необхіднообчислитимінімальнукількістьтаблиць сторінокдля покриттінеобхідногоадресногопростору.
/4=
4 [Kb]/4*4 [Kb]=4096 [Kb] =4 [Mb]
Одна сторінкапокриває 4 Мбадресногопростору,а нам необхідно1024Кб+4Кб=1028 Кб, щозначно меншозначеногообсягу. Значитьдостатньозаповнититільки однутаблицю сторінок.Каталог і таблицяповинні бутивирівненіпо межі 4 Кб, асегмент ехе-файлуможе бути вирівнентільки по межіпараграфу, томуусього необхідно3 сторінки по4 Кб.
; файл “lab2.asm”
...
SEGMENTDATA USE32
pagesdd 3*1024 dup (0); буфер длятаблиць сторінок
...;таблицяGDT
videodescr ; адресасегменту 100000h
...
ENDS
SEGMENTCODE USE16
assumecs: code, ds: data
procmain
;заповненнядескрипторовсегментів
movebx, data; обчисленняфізичного
shlebx, 4; адреси каталогусторінок
addebx, 1000h
andbx, 0f000h
mov cr3, ebx; завантаженняадреси каталогувCR3
moveax, ebx; обчисленнязміщення
shrebx, 4; каталогусторінок в
subbx, data; сегментіданих
shlbx, 4
addeax, 1007h; обчисленняадреси 1-й таблиці
mov[bx], eax; завантаженняв каталог
addebx, 1000h; зміщеннятаблиці
moveax, 7; 1-я сторінка,адреса 0
mov cx, 256; 256 сторінок=1Мб
@@1:
mov[bx], eax; заповненнятаблиці
addeax, 1000h; наступні4 Кб
addbx, 4; адреса наступногоелемента
loop@@1; повторенняциклу
; вbx адресуелемента таблицідля відеобуфера
mov [dword bx], 0b8007h; фізичнаадреса відеобуфера
; завантаженняGDTR
moveax, cr0
oreax, 80000001h
mov cr0, eax;настанова бітівPE іPG вCR0
;jmp far sel_code: offset pmode
dw0ea66h
ddoffset pmode
dwsel_code
endp
procmake_desc near; процедуразаповненнядескриптора
...
endp
procrmode; процедуразавершенняпрограми
...
endp
ENDS
SEGMENTPCODE USE32
procpmode
...;головна процедура
endp
procprint near
...;процедурапечатки
endp
pcode_len=$
ENDS
endmain;крапка входу
Створеннявиконавчогофайлу здійснювалосяслідуючимчином:
tasm.exe lab2. asm/m2
tlink. exe lab2.obj/3
Перед отладкоюпрограми необхідновстановитизаданий розмірсторінки вемуляторі. Дляцього требавикликатиголовне меню,вибрати пункт“Настанови”,клавішами“вверх” або“вниз” встановитирозмір і натиснутиклавішу введення.
1. Повна схемаформуванняадреси згідноваріанту.
Текст програми.
Дільницітаблиць сторінок,що використовувалисьпрограмою (втому числі іпід самоюпрограмою).
Контрольніпитання
Який обсягадресногопростору покриваєсторінковиймеханізм прирозмірі сторінки:
А) 2 Кб;
Б) 1 Кб;
С) 0.5 Кб?
Як організуватилінійний буферпам'яті влаштування,якщо доступдо цієї пам'ятіздійснюєтьсяпоблочно черезвікно в фізичномуадресномупросторі, апереміщеннявікна здійснюєтьсяшляхом записуйого номерув порт влаштування.
5.4 Таблицяваріантів
В таблицівикористанінаступні позначкизасобів адресації:
“бісм”- базово-індексназі зміщеннямі масштабурованням;
“бім”- базово-індексназ масштабурованням;
“ім”- індексна змасштабурованням;
“і” - індексна;
“біс”- базово-індексназі зміщенням;
“бі”- базово-індексна;
“б” - базова.
Література
Гук М. “ПроцессорыIntelот 8086 до PentiumII”.- СПб: “ПИТЕР”,1997- 224 с.
Бродин В.Б.Шагурин И.И.“Микропроцессорi486.Архитектура,программирование,интерфейс”.- М.: “ДИАЛОГ-МИФИ”,1993. - 240 с.
ГоленковаЖ.К. ЗаболоцкийА.В. МархасинМ.Л. “Руководствопо архитектуреIBMPC AT”. - Мн.:ООО “Консул”,1992. - 949 с.
Таблиця5.1 Таблицяваріантів.
Варіант | Засібадресації | Розрядністькоду | Розширеннястека | Розмірсторінки, Кб |
1 | Бісм | 16 | Вверх | 4 |
2 | Бім | 32 | Вниз | 2 |
3 | Ім | 16 | Вверх | 1 |
4 | І | 32 | Вниз | 0.5 |
5 | Біс | 16 | Вверх | 4 |
6 | Бі | 32 | Вниз | 2 |
7 | Б | 16 | Вверх | 1 |
8 | Бісм | 32 | Вниз | 0.5 |
9 | Бім | 16 | Вверх | 4 |
10 | Ім | 32 | Вниз | 2 |
11 | І | 16 | Вверх | 1 |
12 | Біс | 32 | Вниз | 0.5 |
13 | Бі | 16 | Вверх | 4 |
14 | Б | 32 | Вниз | 2 |
15 | Бісм | 16 | Вверх | 1 |
16 | Бім | 32 | Вниз | 0.5 |
17 | Ім | 16 | Вверх | 4 |
18 | І | 32 | Вниз | 2 |
19 | Біс | 16 | Вверх | 1 |
20 | Бі | 32 | Вниз | 0.5 |
21 | Б | 16 | Вверх | 4 |
22 | Бісм | 32 | Вниз | 2 |
23 | Бім | 16 | Вверх | 1 |
24 | Ім | 32 | Вниз | 0.5 |
25 | І | 16 | Вверх | 4 |
26 | Біс | 32 | Вниз | 2 |
27 | Бі | 16 | Вверх | 1 |
28 | Б | 32 | Вниз | 0.5 |
ВИСНОВКИ
В данійроботі буввиробленийогляд архітектурипроцесорівсімейства х86фірмиIntel ірозробленийпрограмнийемулятор процесораi486 іапаратна частинавнутрисхемногоемулятора.
Емуляторстворювавсяз метою полегшитиотладку програмногоі апаратногозабезпечення,що орієнтувалосьна даний процесор,а також длянавчання фахівцівпо дисципліні“Мікропроцесорнізасоби і системи”.Його можнарекомендуватив якості навчальноїдопомоги дляпроведеннялабораторнихробіт.
Операційначастина можебути використанав якості базовогомодуля длястворенняемуляторіврізноманітноготипу (програмні,внутрисхемні тощо).При необхідностійого функціїможна поширитиі приєднатибудь-якийкористувачевийінтерфейс.
ВСТУП
Бурхливийрозвитокобчислювальноїтехніки дозволивїй проникнутив усізакуткилюдськогожиття. Нарядуз настольнимиперсональнимисистемамиособливаувага заразприділяєтьсякеруючим системам.Дешевизна ібагаті можливостімікропроцесорівсімейства х86поставили їхв один ряд зіспеціалізованимипроцесорамиі контролерамив області створеннякеруючих систем.Використанняцих мікропроцесорівпривертає щеі тим, що дозволяєвикористатидля створеннясистемногопрограмногозабезпеченняпрактичновесь величезнийнабір інструментальнихзасобів дляперсональнихсистем. Однакотладка такогопрограмногозабезпеченнясопряжена зпевними труднощями,що обмежуютьвикористаннястандартнихотладчиків.В основномуце зв'язане зрізноманітністюархітектурнихрішень в планістворенняапаратногозабезпечення.Тут на допомогуможуть прийтищо емулюютьотладчики, щодозволятьвироблятиконфігуруваннявіртуальноїархітектури.Дані отладчикиможуть використовуватисяв настольнихперсональнихсистемах, виробляючиповну емуляціюсистеми.
Метоюданої роботиє розробка ядраемулюючогоотладчика.Однимз критеріївстворенняемулятора стояєможливістьфункціональногорозширення.Ця обставинадозволитьконфігуруватиотладчик підрізноманітніархітектурикеруючих систем,а значить вироблятиповноціннуотладку. Крімтогоядро можна будевикористатив внутрисхемномуемуляторі.
Додаток А
Емулятор
Керівництвокористувача
ДП 7.091501-037-99.009ДА
Аркушів 9
Донецьк 1999
1 ПРИЗНАЧЕННЯІ ВИМОГА ДОКОНФІГУРАЦІЇ
Емуляторпроцесораi486 версії2.0 передвизначенийдля отладкисистемногопрограмногозабезпеченняспеціалізованихЕОМ. Він можетакож використовуватисяв якості навчальноїдопомоги припідготовціфахівців вобласті обчислювальноїтехніки длявиконаннялабораторнихробіт по дисципліні“Мікропроцесорнізасоби і системи”.
Емуляторвиконує програмнуемуляцію роботиосновнихфункціональнихблоків процесораi486 зточки зорупрограмногозабезпечення.При створенніпрограми головнимкритеріємвиступалавірогідністьроботи блоківпроцесора. Томуприв'язкадешифраціїі виконаннякоманд до сигналусинхронизаціїне вироблялася.Мінімальнимкроком роботиблоків доступнимкористувачує цикл виконаннякоманди ПО,що отладжується.
Для роботипрограми-емуляторадостатньо матиперсональнийкомп'ютер набазі процесора80286+ оснащеного4 Мб оперативноїпам'яті і відеоадаптеромне нижчеEGA. ЗсистемногопрограмногозабезпеченнявимагаєтьсяMS DOS версії3.3+і драйверрозширеноїпам'яті типуHIMEM.SYS.Будь-яких додатковихприладів абопрограм невимагається.
При роботіпід багатоозадачноюопераційноюсистемою бажанозапуск програмивиробляти врежимі емуляціїMS DOS, бов програмівиробляєтьсяпрямий доступдо відеопам'яті.
2 ЗАПУСКЕМУЛЯТОРА
Для запускунеобхідноперейти в каталог,в якому міститьсяісполнімийфайл“i486. exe”і виробити йогозапуск або зкомандногорядка, набравшив ній ім'я файлуі натиснувшивведення, абоможна скористуватисяінтерактивноюпрограмноюоболонкою.
Післязапуску екраночищається.Внизу з'являєтьсярядок статусуз підказкоюв вигляді комбінаційклавіш.В серединіекрану відкриваєтьсявікно з данимипро програму.Натиск будь-якийклавіші переводитьемулятор вробітничийрежим.
3 ГОЛОВНЕМЕНЮ
Головнеменю викликаєтьсяпри натискуклавішіF10. Вньому зосередженіпункти, активізаціяяких наводитьдо видаванняна екран одногоз діалоговихвікон.
Для активізаціїпункту ,що цікавитьнеобхіднопідвестидо нього підсвічуючийкурсор і натиснутиклавішу введення.Многие пунктипісля назвимають назвукомбінаціїклавіш.Такі пунктиокрім засобу,описаного вище,можуть активізуватисяшляхом натискувідповідноїкомбінаціїклавіш,причому навітьякщо головнеменю неактивно.
Пункт “Файл”.
Данийпункт передвизначенийдля генераціїзапитання навідкриттяісполнімогофайлу для отладки.Після активізаціїцього пунктуна екранівідкриваєтьсявікно з вмістомпоточногокаталогу.Скористувавшиськлавішами зістрілкамикористувачможе переміститипідсвічуючийкурсор на щоцікавить ісполнімийфайл (типу“.com” або“.exe”) інатиснутиклавішу введення.Дана операціяпризведе дозавантаженнюфайлу в віртуальнупам'ять емуляторадля отладки.При Цьому відкриєтьсявікно, в якомубуде відображенийвідрізок програмногокоду з асемблерноюмнемоникою.Підсвічуючийкурсор встановитьсяна першу командупрограми.
Пункт“Смотреть...”.
Даний пунктдозволяє активізуватипідміню зісписком вікон,що містятьінформаціюпро стан процесора,що емулюєтьсяі віртуальноїпам'яті емулятора.
В підмінюназви вікон,що вже відкритібудуть відображенісірим кольоремв знак того, щоактивізаціяданого пунктунедосяжна. Теє не можна відкритидва однаковихвікна.
Вікно“РОНы”містить станрегістрівзагальногопризначення;
Вікно“Сегментныерегистры”містить стансегментнихрегістрів ірегістрівлокальноїдескрипторноїтаблиці і сегментустану задачі,причому як їхнселекторнихчастин, так ідескрипторних;
Вікно“Системныерегистры”містить стансистемнихрегістрів,таких якCRx, EIP, GDTR, IDTR;
Вікно“Флаги”містить станрегіструEFLAGS;
Вікно “Память”містить станпевної дільницівіртуальноїпам'яті емулятора;
Вікно “Стек”містить стандільниці пам'яті,в якій розміщенийпоточний програмнийстек.
Всі цівікна можутьбути відкритішляхом натискукомбінаційклавіш,означених ввідповіднихпунктах підмінюпісля іменівікна.
Пункт“Установки”.
Активізаціяданого пунктупризведе довідкриттямвікно, в якомувідображаєтьсярозмір сторінкипам'яті в килобайтах.Користувачможе змінитирозмір сторінки.Це призведедо тому, що привключенійсторінковійадресаціїмеханізм трансляціїсторінок будеоперуватисторінкамиданого розміру.Ця можливістьбуде відстуняв реальномупроцесорі івведена в емулятордля збільшенняефективностінавчання роботизі сторінковиммеханізмом.
Пункт“Выход”.
Активізаціяданого пунктупризведе дозавершеннюпраці емулятораі поверненнюв операційнусистему. Пунктможе бути активованийв будь-якомустані емуляторашляхом натискукомбінаціїклавіш“Alt+X”.
4 ОПИСВІКОН ЕМУЛЯТОРА
Емулятормає багатовіконнийкористувачевийінтерфейс, івся необхіднакористувачуінформаціярозподіленапо різноманітнимвікнам, що об'єднуютьоднотипнуінформацію.
Вся роботакористувачапри отладціпрограми відбуваєтьсяшляхом використанняфункцій, щопідтримуютьсятим або іншимвікном.
Переключенняміж вікнами,те є фокусировкапотоку управлінняна потрібномувікні, виконуєтьсяшляхом натискуклавішіF6. ПриЦьому управлінняодержує вікно,що було відкритеперед поточним.Якщо необхіднопереключативікна в зворотномупорядку, можнаскористуватисякомбінацієюклавішShift+F6.
Активневікно має заголовокпофарбованийв синій колірі підсвічуючийкурсор.
При бажанніможна змінитирозмір і положеннядеяких вікон.Для цього слідуєскористуватисякомбінацієюклавішCtrl+F5. Привключенні цьогорежиму вікноперетворюєтьсяв прямокутникз рамкою. Теперклавішами зістрілками можнапереміщативікно по екрану,а при натиснутойклавішіShift -змінюватирозмір. Вихідз режиму здійснюєтьсяшляхом натискуклавіші введення.
Вікно“РОНы”.
В даному вікнізосередженаінформаціяпро вміст регістрівзагальногопризначення.В процесі виконанняпрограми користувачапо крокам, іменарегістрів,вміст якихзмінився,відображаютьсябілим кольорем.
При відкриттяхвікна підсвічуючийкурсор встановлюєтьсяна першомузгори регістріна старшу тетраду,відзначаючирегістр і тетраду,вміст якої вданий моментможе бутимодифікований.
Для змінивмісту регіструнеобхідноклавішами“вверх” “вниз”встановитикурсор на потрібнийрегістр, післяцього клавішами“праворуч”“ліворуч”встановитикурсор на потрібнутетраду. Модифікаціятетрадиздійснюєтьсяшляхом введенняшістнадцятеричногосимволу з клавiатури.Після введеннясимволу йогочисловий еквівалентвпроміщуєтьсяв тетраду, акурсор переміщаєтьсяна одну позиціюправоруч.
Вікно“Сегментныерегистры”.
В даномувікні зосередженаінформаціяпро вміст сегментнихрегістрахпроцесора,щоемулюється.В кожному рядкурозташуєтьсявміст черговогорегістру. Ліворучправоруч розташуєтьсянаступна інформація:
Ім'я регістру.При зміні вмістурегістру виводитьсябілим кольорем;
Селектор.В шістнадцятеричномувигляді подаєвміст селекторноїчастини даногорегістру;
База. Вшістнадцятеричномувигляді подаєбазова лінійнаадреса сегменту;
Межа. Вшістнадцятеричномувигляді подаєрозмір сегментув прийнятихелементахдрібності(байтиабо сторінкипо 4 Кб);
Атрибути.В двоичномувигляді подаєатрибути сегменту.В захищеномурежимі відображаютьвміст поляправ доступузавантаженогодескриптора,а в реальнійвстановлюютьсяавтоматичнів відповідностіз призначеннямсегментногорегістру.
В данійгрупі знаходятьсятакож регістрлокальноїтаблиці дескрипторіві регістр задачі.Обидва ці регіструмають схожуз сегментнимирегістрамифізичну структуру,тому вонирозглядаютьсяв даному вікні.
Будь-якачастина сегментногорегістру можебути довільномодифікована.Для цього необхідноклавішами“вверх” “вниз”подвести курсордо потрібногорядка. ПісляЦього клавішею“Tab” переміститикурсор до елемента,що цікавить,а клавішами“праворуч”“ліворуч” напотрібну тетрадуабо атрибут.В випадку зміниатрибутівслідує скористуватисясимволами “1”і “0”, бо атрибутиуявлені в двоїчномукоді. Інші полямодифікуютьсяшістнадцятеричнимисимволами.Модифицированиеповністю аналогічноописаному длявікна РОНів.
Слідуєпомітити, щодовільна змінаатрибутів можепризвести донепередсказуємирезультатамв роботі отлаживаемоїпрограми. Даназміна можнапорівняти ззміною вмістусегментнихрегістрівреальногопроцесоранепрограмнимшляхом.
Вікно“Системныерегистры”.
Вікновиробляє індикаціюі дозволяєзмінювати вмістсистемнихрегістрів. Вданій групімістятьсянаступні регістри:
РегістрEIP. Покажчиккоманд;
РегістрCR0. Регістрстану процесора;
РегістрCR2. Лінійнаадреса привідмові сторінки;
РегістрCR3. Фізичнаадреса каталогусторінок;
РегістрGDTR. Регістрглобальноїтаблиці дескрипторів;
РегістрIDTR. Регістртаблиці переривань.
При змінівмісту регістру,його ім'я виводитьсябілимкольорем.Вміст регістріввідображаєтьсяв шістнадцятеричномувигляді. Модифікаціяздійснюєтьсяаналогічноописаним вищевікнам. Регістритаблиць і перериваньперебують здвох частин:32-разряднойбази і 16-разрядногорозміру. Іншірегістри маютьзвичайну 32-разряднуюструктуру.
Вікно“Флаги”.
Вікновідображаєвміст регіструпрапорівEFLAGS. Всіпрапори є однобітными(окрім поляiopl, алеі воно уявленедвома окремимибітами), що дозволилопридати вмістувікна більшзручний, з точкизору модифікації,вигляд. Якщопрапор встановлений,ліворуч відйого імені вквадратнихдужках будестояти крестик.Прапор, доступнийв даний моментдля модифікації,помічаєтьсямигаючимкурсором вквадратнихдужках. Змінапоточногопрапора здійснюєтьсяклавішами“вверх” “вниз”,а модифікаціявмісту - клавішеюпробілу. Модифікаціяреалізованав режимі тригера,те є, якщо прапорбув встановлений,він буде скинутийі навпаки.
Вікно “Стек”.
Дане вікновідображаєдільницю пам'яті,зайнятий сегментомстека. Інформаціярозташуєтьсядвома колонками:адреса (зміщення)і вміст. Стрілкаліворуч відадреси вказуєна поточнувершину стека,той є вмістрегістру (E)SP.Використовуючиклавіші “вверх”“вниз” можнапрокручуватив вікні весьвміст сегменту.Дане вікнопередвизначенетільки длявідображенняі не дозволяємодифікуватиосередки стека.
Вікно “Память”.
Дане вікновідображаєвміст фізичноїпам'яті емулятора.Інформаціяуявлена двомагрупами: лінійнаадреса і вміст.
Вікномає локальнеменю для управлінняподанням даних.Активізаціяменю виробляєтьсякомбінацієюклавішAlt+F10.Активізаціяпунктів менювиробляєтьсяшляхом підводакурсору клавішами“вверх” ”вниз”до пункту ,щоцікавить інатиском клавішівведення. Многиепункти мають“гарячі клавіші”- комбінаціїклавіш,якими їхн можнаактивізуватизнаходячисьпоза меню.
Меню маєнаступні пункти:
Пункт“Перейти”.Передвизначенийдля швидкогопереходу дообласті пам'яті,що цікавить.Після активізаціївідкриваєтьсядіалоговевікно для завданняадреси області.Ліворуч в вікнізнаходитьсясписок джерелбазової лінійноїадреси (адресаобласті завждизадаєтьсявідносно якого-абоджерела). Праворучвгорі знаходитьсярядок введення.Користувачможе ввестив ній в шістнадцятеричномувигляді зміщеннявідносно вибраногоджерела базовоїадреси. Праворучвнизу знаходятьсядві кнопки“Ok” і “Canсel”. Вонимають “гарячі”клавішіEnter іEscapeвідповідно.Перша кнопказавершує діалогз переходомдо заданоїобласті, а другабез переходу.
Пункт “Уявитияк...”. Даний пунктвідкриваєпідміню зісписком доступнихформатів поданнявмісту пам'яті.Нижче наводятьсяці формати.
“Байт”(Alt+B).Вміст подаєтьсярядками по 16осередків, щомістять відповідніїм байтив шістнадцятеричномувигляді;
“Слово”(Alt+W). Теже, тільки рядокподає вісім16-разрядныхслів;
“Подвійнеслово”(Alt+D). Рядокподає чотири32-разрядныхслова;
“Дескриптор”(Alt+E). Кожнийрядок подаєвміст пам'яті,як дескриптор.Виводитьсябаза, межа іатрибути;
“Таблицясторінок”(Alt+P). Вмістпам'яті подається,як таблицясторінок. Кожнийрядок міститьпо дві осередки,що, в свою чергу,уявлені двомаелементами:базова адресав шістнадцятеричномувигляді і атрибутисторінки вдвоичном вигляді;
“Символи”(Alt+S). Рядокподає 32 байтапам'яті їхнімианалогами зтаблиціASCII.Непечатныесимволи уявленікрапками.
Невеликіпереміщенняпо дільниціпам'яті можнавироблятишляхом використанняклавиш “вверх”“вниз”
Вікно програми.
Це вікновідкриваєтьсяпри завантаженнів пам'ять емулятораісполнімогофайлу і має вякості заголовкуім'я цього файлу.Подсвечивающийкурсор післязавантаженнявказує на першукоманду програмикористувача.Дизассемблированиездійснюєтьсяпакетами по32 команди. Прибажанні користувачможе продивитисьцю послідовністьвикористовуючиклавіші “вверх”“вниз”.
Для покроковойотладки користувачудоступні декількафункцій, щовикликаютьсянатиском певнихклавішабо комбінаційклавіш:
“Крокз заходом впідпрограми”(F7).Виробляєтьсядешифраціянаступноїкоманди і виконанняпоточної. Строковыекоманди виконуютьсяяк група команд,кількість якихвизначаєтьсялічильником.Команди викликавиконуютьперехід допідпрограми.
“Крокбез захода впідпрограми”(F8).Запоминаетсяадреса наступноїкоманди і виконаннявиробляєтьсядо збігу вміступокажчикакоманд з запам'ятанимзначенням.Підпрограми,строковікоманди і цикли“Loop” виконуютьсяяк одна команда.При виникненніпомилки виконаннязупиняєтьсяна команді,викликавшейцю помилку.
“Виконатидільницю”(F4).Користувачпереміщаєкурсор на кінецьблоку,щоцікавить команді викликаєфункцію. Виконаннявиробляєтьсядо збігу вміступокажчикакоманд з адресоюкінця блоку.Обробка входівв підпрограми,строковихкоманд і цикліваналогічноїпопередньоїфункції. Привиникненніпомилки виконаннязупиняється.
“Пропуститиблок” (Alt+F8).Користувачпересуваєкурсор в кінецьблоку ,що цікавитьі викликаєфункцію. Всікоманди в блокупропускаються.В суттєвостіпокажчикукоманд привласнюєтьсязначення адресикінця блоку.Дану функціюслідує застосовуватиякщо виконанняблоку можепризвести довиникненнюпомилки, акористувачунеобхіднопродовжитивиконання.
Для відкриттівнового вікназ програмоюкористувачанеобхідноспочатку закритипопереднє.
“Екранкористувача”.
Для розширенняможливостейемулятора впам'яті передбаченаобласть, що вреальній машинівідповідаєтекстовомувідеобуферу.Ця областьрозташуєтьсяпо фізичнійадресі000B8000h імає довжину4 Кб, що відповідаєодній текстовійсторінці вдозволі 80х25.
При стартіемулятора ввіртуальнупам'ять переписуєтьсявміст відеобуфера.Після натискукористувачемкомбінаціїклавішAlt+F5 вмістобласті пам'ятіпереписуєтьсяв реальнийвідеобуфер.Поверненняв багатовіконнийрежим здійснюєтьсяпісля натискубудь-який клавіші.
Додаток Б
Емулятор
Керівництвопрограміста
ДП 7.091501-037-99.010ДБ
Аркушів 6
Донецьк 1999
Дане керівництвомістить описосновних модулейопераційноїчастини програмногоемулятора іінструкціїпо модернізаціїі розширеннюфункцій даногоемулятора.
Необхідністьв модернізаціїможе виникнути,наприклад, придоповненнікоманд функцієюпідрахункутактів виконанняабо при доданнінових команд,реалізованихв процесорахнаступноїґенерації, абопри реалізаціїемуляції яких-нибудьблоків процесора.
Є можливістьтакож змінитимісце дислокаціїоперативноїпам'яті емулятораабо збільшитиїї розмір. Изначальнопам'ять ємністюодин мегабайтзнаходитьсяв розширенійпам'яті і доступначерез драйверHIMEM. SYS.
І, нарешті,можна доопрацюватиемулятор, ввівшив нього периферійніприлади.
1 Описмодулей
Операційначастина перебуєз п'ятьохмодулей, щовиконають певніфункції подешифраціїі виконаннюкоманд процесора,що емулюється.
Модуль“STRUCTS.CPP”
Модуль міститьреалізаціюзасобів класів,що виконуютьпрограмнуемуляціюфункціональнихблоків процесора.
В якостіінтерфейсуз іншими модулямислужить файл“command.hpp”, вякому містятьсяоголошеннязгаданихвище класіві основнихтипів даних.В модулі містятьсяглобальнізмінні, що такожслужать длязв'язку з іншимимодулями.
Глобальнізмінні.
В модуліпроголошенінаступні глобальнізмінні:
intidentify.Идентификаторсегментногорегістру. Пристворенніпримірниківоб'єктів типусегментногорегіструвідбуваєтьсяперенесеннявмісту цієїзмінної в внутрішнєполе ідентифікаторарегістру ізбільшеннязмінної наодиницю. Врезультатів кожномупримірниковікласу міститьсяунікальнийідентифікатор;
intstop. Прапоростанова емулятора.При виникненніситуації остановапроцесора цейпрапор встановлюєтьсяв одиницю іемуляціяприпиняється;
ulongercode. Кодпомилки виключення.При виникненніситуації виключенняв стек при викликовіобрабниказаноситьсякод помилки,що допомагаєлокалізуватиджерело виключення;
interror. Номервиключення.В нормальнійситуації зміннамістить-1. Привиникненнівиключенняв неї заноситьсяномер виключення;
charcpl. Поточнийрівень привілейпрограми. Примежсегментноїпередачі керуванняв якості поточногорівня привілейпрограми виступаєрівень запитанняселектора;
inttekseg. Привідкриттіперед командоюпрефіксу змінисегменту в цюзмінну записуєтьсякод сегментногорегістру;
intpage. Поточнийрозмір сторінкипам'яті присторінковійадресації.Використовуєтьсямеханізмомтрансляціїсторінок дляперетвореннялінійної адресив фізичний;
intad, od.Поточний розмірадреси і операнда.Перед дешифрацієйкоманди берутьсяз бітарозрядностікодового сегменту.За наявностівідповіднихпрефіксівможуть змінюватисяна протилежні;
ulongcr0, cr2, cr3.Системні регістри;
_gdtgdtr. Регістрглобальноїтаблиці дескрипторів;
_idtidtr. Регістртаблиці переривань.
_regron [8]. Файлрегістрівзагальногопризначення;
_segsrg [6]. Файлсегментнихрегістрів.Виконує рольблоку сегментації;
_ldtldtr. Регістрлокальноїтаблиці дескрипторів;
_tsstr. Регістрсегменту станузадачі;
_eflageflag. Регістрпрапорів.
Процедуриі функції.
В модулімістятьсянаступні допоміжніпроцедури:
intmode (). Вертаєпоточний режимпроцесора,аналізуючивміст системногорегіструCR0 ірегістру прапорів;
ulongconv_adr (_op, int).Вираховуєвиконавчуадресу операндана підставіпереданоїскладеноїадреси і поточноїрозрядністьадреси;
intcccc (uchar, char*).Виконує перевіркуумови, код якогопередаєтьсяв якості параметру.Вертає результатперевірки імнемонічнупозначкуумови.
Модуль“CONTROL.CPP”
Модульмістить процедуриі функції, щоберуть участьв процесахдешифраціїі виконаннякоманд процесораі початковоїініціалізаціїмасиву команд.В модулі такожмістятьсяоголошенняі реалізаціїдеяких групкоманд.
Змінні.
Ці змінніхочі проголошеніяк глобальнівикористовуютьсятільки всерединімодуля. Модульмістить наступнізмінні:
_command*mas [256].Масив команд.Містить покажчикина примірникикласів дешифраціюі виконання256 команд ,щореалізуютьі груп;
_decodercmds [2]. Чергакоманд. Передвиконаннямкоманди з індексом0 виробляєтьсядешифраціякоманди з індексом1. Після виконаннякоманда 1 позичаємісце команди0.
Процедуриі функції.
В модулімістятьсянаступні процедуриі функції:
voidinit ().Процедураініціалізаціїмасиву команд.Дана процедуравикликаєтьсяодин раз пристарті емуляторадля створенняпримірниківкласів, щореалізуютьдешифраціюі виконаннякоманд процесора;
voidint_call (int).Процедуравиконує викликобрабникапереривання,номер якогопередаєтьсяїй в якостіпараметру;
intstep (_decoder*).Функція виробляєдешифраціюпрефіксівкоманди і викликзасобуdeasm () класу,що реалізуєцю команду.Вертає заповненуструктурукоманди і ознакапомилки в випадкуїї виникнення;
intexec_com ().Функція виробляєвиконаннякоманди шляхомвиклика засобуdie () класу,що реалізуєкоманду.
Модулі“MEM.CPP”, “COM_ANDS. CPP”, “COM_MOVS. CPP”
В модулі“MEM.CPP”знаходитьсяреалізаціязасобів класу_mem, щоздійснює операціїобміну з пам'яттюі приладамивведення-висновку.
В іншихмодулях знаходитьсяреалізаціязасобівdeasm () іdie () класівкоманд. В модулі“COM_ANDS.CPP”зібрані аріфметичнф,логічні командиі команди зрушень,а в модулі“COM_MOVS. CPP”зібрані командипересилки ікерування.
2 Інструкціїпо модернізаціїі розширеннюфункцій емулятора
Доданнянових команд.
Для введенняв емуляторнової командинеобхідностворити клас,що реалізуєцю команду.Клас повиненспадкуватисявід базовогокласу_command імати свої реалізаціїзасобуdeasm () длядешифрацфїі засобуdie () длявиконаннякоманди. Оголошеннякласу слідуєпомістити вфайл“command. h”.
Коли засібdeasm () одержуєкерування, всіпрефікси вжедешифрованіі проведенінеобхіднікорегуванняполий структурикоманди, щопередаєтьсяв якості параметру.Для необхідностідешифраціїпост-байтівтреба викликатизасібmod () прицьому локальнийпокажчик зміщеннявідносно почалакоманди повиненвказувати напост-байт. Вякості параметрузасобу необхіднопередати номероперанда,що заповнюється.В полеstrcom структуринеобхіднозанести мнемоникукоманди безоперандів,а покажчикзміщення встановитиза останнійбайт команди.Для читаннябезпосередніхоперандівнеобхідновикористативідповіднізасоби структури.В поле*p необхіднозанести покажчикна об'єкт типукласу команди.В якості параметруслідує повернутиознаку помилкив випадку їївиникнення.
Засібdie ()викликаєтьсядля безпосередньоговиконаннякоманди. В якостіпараметру внього передаєтьсяпокажчик наструктурукоманди, щобула попереднодешифрованазасобомdeasm (). Дляодержанняоперандівз пам'яті абозапису їхн впам'ять слідуєвикористативідповіднізасоби класу_seg.
Реалізаціюзасобів бажанорозміститив файлі“COM_ANDS. CPP”або “COM_MOVS.CPP”.
Зміна реалізаціїпам'яті емулятора.
Якщо виникненеобхідністьв зміні реалізаціїпам'яті емулятора,наприклад,реалізуватиїї в виглядіфайлу на диску,слідує переписатиабо внестизміни в реалізаціюзасобів класу_mem, щознаходитьсяв модулі“MEM. CPP”.
Доданняемуляції периферійнихприладів.
Емуляторпериферійноговлаштуванняслідує розміститив додатковомумодулі і створитинеобхіднийінтерфейс зіншими модулями.Також слідуєдоопрацюватиклас_mem, доповнившийого засобамизвертання допортів, і використатиці засоби вреалізаціїкоманд звертаннядо портів.
ПЕРЕЛІКПОСИЛАНЬ
Гук М. “ПроцессорыIntelот 8086 до PentiumII”.- СПб: “ПИТЕР”,1997- 224 с.
Бродин В.Б.Шагурин И.И.“Микропроцессорi486.Архитектура,программирование,интерфейс”.- М.: “ДИАЛОГ-МИФИ”,1993. - 240 с.
ГоленковаЖ.К. ЗаболоцкийА.В. МархасинМ.Л. “Руководствопо архитектуреIBMPC AT”. - Мн.:ООО “Консул”,1992. - 949 с.
БердышевЕ. “ТехнологияММХ. НовыевозможностипроцессоровР5 и Р6”. - М.: “ДИАЛОГ-МИФИ”,1998. - 234с.
Р Е Ф Е Р А Т
Аркушів ____ Рисунків ____ Таблиць ____ Додатків____ Посилань ____
ПРОЦЕСОР,ЗОВНІШНІЙІНТЕРФЕЙС,СТОРІНКОВААДРЕСАЦІЯ,ВІРТУАЛЬНІПЕРЕРИВАННЯ,ПРОГРАМНИЙЕМУЛЯТОР, ЗАХИЩЕНИЙРЕЖИМ