Реферат по предмету "Информатика, программирование"


Програма модифікуюча команди, які використовуються в захищеному режимі

Міністерство Освіти і Науки України
НАЦІОНАЛЬНИЙТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”ЗАТВЕРДЖУЮ
Зав.Кафедрою xxxxxxxxx.
___________/xxxxxxxx./
_________________2002р.Програмамодифікуюча команди, які використовуються в захищеному режиміСпецифікація
ЛИСТЗАТВЕРДЖЕННЯ
Розробники:
Керівникпроекту :
________/ xxxxxxxx./
___________________2002р.Виконавець:
_______/ Хххххххххххх Х.Х./
___________________2002р.Харків
2002

ЗАТВЕРДЖЕНИЙПрограмамодифікуюча команди, які використовуються в захищеному режиміСпецифікаціяХарків
2002

Специфікація Номер документу Назва документу Примітки Xxxxxx- 01 90 01-1 Технічне завдання Xxxxxx- 01 81 01-1 Пояснювальна записка Xxxxxx- 01 13 01-1 Опис програми Xxxxxx- 01 12 01-1 Текст програми

Міністерство Освіти і Науки України
НАЦІОНАЛЬНИЙТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”ЗАТВЕРДЖУЮ
Зав.Кафедрою xxxxx.
___________/xxxxxxxxxА./
_________________2002р.Програма модифікуючакоманди, які використовуються в захищеному режиміТехнічнезавдання
ЛИСТЗАТВЕРДЖЕННЯXxxxxx-01 90 01-1 ЛЗ
Розробники:
Керівникпроекту :
________/ xxxxxxВ./
___________________2002р.Виконавець:
_______/ Хххххххххххх Х.Х./
___________________2002р.Харків
2002

ЗмістВступ
1.        Підставадля розробки.
2.        Призначеннярозробки.
3.        Вимоги допрограмного виробу.
3.1    Вимоги до функціональниххарактеристик.
3.2    Вимоги до надійності.
3.3    Умови експлуатації.
3.4    Вимоги до маркування іпакування.
3.5    Вимоги до транспортування ізбереження.
4.        Вимоги доскладу і параметрів технічних засобів.
5.        Вимоги допрограмної документації.
6.        Техніко-економічніпоказники.
7.        Стадії іетапи розробки.
8.        Порядокконтролю і приймання.

Уведення
Програмний вирібце програма, що модифікує деякі команди, для того, щоб вони могли працювати взахищеному режимі. Програмний виріб орієнтований на комп'ютери серії ІBM PSсумісних ПЭВМ, що використовують мікропроцесори 80286, 80386 і 80486.
1. Підстава длярозробки :
Підставою длярозробки є завдання на курсове проектування.
2. Призначеннярозробки :
Метою розробки єнаписання програми, що модифікує деякі команди для того, щоб вони моглипрацювати в захищеному режимі.
3. Вимоги допрограмного виробу :
3.1. Вимоги дофункціональних характеристик :
3.1.1. Програмнийвиріб повинний забезпечувати, модифікацію команд для того, щоб вони моглипрацювати в захищеному режимі роботи мікропроцесора.
3.1.2.Функціонування програмного виробу повинне бути погоджено з роботою TURBO PASCAL7.0
3.2. Вимоги донадійності :
Програмний вирібповинний стійко функціонувати в апаратному і програмному середовищі,обговореному в п.4
3.3. Умовиексплуатації :
Умовиексплуатації програмного виробу цілком визначаються умовами експлуатації застосованихтехнічних засобів і носіїв даних.
3.4.    Вимоги домаркування і пакування:
Вимоги домаркування і пакування не висуваються.
3.5.    Вимоги дотранспортування і збереження :
Вимоги дотранспортування і збереження не висуваються.
4. Вимоги доскладу і параметрів технічних засобів :
Дляфункціонування програмного виробу необхідна ІBM AT/XT і PS/2 чи сумісна з нею,з наступним мінімальним набором переферійних пристроїв:
— нагромаджувачна гнучких магнітних дисках;
— відеоадаптербудь-якого класу;
— клавіатура.
5. Вимоги допрограмної документації :
— Опис програми;
— Пояснювальназаписка;
— Текст програми;
6.        Техніко-економічніпоказники.
Техніко-еконоічніпоказники в даному проекті не розраховуються.
7.        Стадії іетапи розробки.
Розробка програмиповинна вестись по наступному плану :
1)              одержаннязавдання;
2)              оглядлітератури і обгрунтування необхідності розробки;
3)              розробкаструктури вхідних і вихідних даних, уточнення методів рішення завдання;
4)              опис ірозробка алгоритму рішення завдання;
5)              розробкаструктури програми та остаточне визначення конфігурації технічних засобів;
6)              розробкапрограми, іспити і налагодження;
7)              розробкапрограмної документації.
8.        Порядокконтролю і приймання.
Приприйманні програмного виробу перевіряється :
1)        комплектність, зміст і оформленняпрограмної документації;
2)        відповідність програмного виробупрограмним характеристикам;
3)        відповідність програмного виробуобговореному програмному та апаратному середовищу;
4)        надійність функцінування.

МіністерствоОсвіти і Науки України
НАЦІОНАЛЬНИЙТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”ЗАТВЕРДЖУЮ
Зав.Кафедрою О.Т.П.
___________/xxxxxxxxx./
_________________2002р. Програмамодифікуюча команди, які використовуються в захищеному режиміПояснювальназаписка
ЛИСТЗАТВЕРДЖЕННЯXxxxxx- 01 8101-1 ЛЗ
Розробники:
Керівникпроекту :
________/ xxxxxxxxxx./
___________________2002р.Виконавець:
_______/ Хххххххххххх Х.Х./
___________________2002р.Харків
2002

Зміст
1.        Організаціязахищеного режиму роботи мікропроцесора :
1.1.    Визначеннятипу мікропроцесора.
1.2.    Формуванняглобальної дескрипторної таблиці.
1.3.    Структурадескриптора сегмента.
1.4.    Виконаннядоступу до сегментів.
1.5.    Формуваннядескрипторів сегментів.
1.6.    Завданняадреси і розміру таблиці GDT.
1.7.    Підготовкадо скидання мікропроцесора.
1.8.    Заборонамаскуємих і немаскуємих переривань.
1.9.    Збереженняв пам'яті регістрів мікропроцесора.
1.10.   Перехід мікропроцесора взахищений режим.
1.11.   Повернення в реальний режим.
1.12.   Відновлення регістрівмікропроцесора.
1.13.   Дозвіл маскуємих інемаскуємих переривань.
2.        Системакоманд мікропроцесора :
2.1.    Кодуваннярегістрів.
2.2.    Визначенняефективної адреси.

1.ОРГАНІЗАЦІЯ РОБОТИ МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМІ
Усімікропроцесори (МП) фірми Intel починаючи з 80286 і закінчуючи Pentium III, атакож програмно і конструктивно сумісні з ними МП інших фірм (мікропроцесорисімейства x86) мають два основних режими роботи: захищений (Protected Mode) і режимреальних адрес (Real-Address Mode) чи просто реальний. Найбільше повноможливості мікропроцесорів реалізуються при роботі в захищеному режимі. Прицьому:
• забезпечуєтьсяфізична адресація пам'яті обсягом до 4 Гбайт, а при сторінковій організації — до64 Гбайт, а також доступ до віртуальної пам'яті обсягом до 64 Тбайт;
• працює система захиступам'яті, що регламентує доступ до сегментів пам'яті в залежності від ступеняїхньої захищеності і рівня привілеїв програм і запобігає несанкціонованевтручання в роботу операційної системи і програм користувачів;
• крімсегментації пам'яті може бути виконана її сторінкова організація;
• апаратнопідтримується багатозадачний режим роботи мікропроцесора;
• виконуєтьсярежим віртуального МП 8086.
Після включення харчуванняі при скиданні мікропроцесора в МП установлюється реальний режим роботи. Дляорганізації роботи мікропроцесора в захищеному режимі в загальному випадкунеобхідно виконати наступні дії:
1)        визначититип встановленого в персональному комп'ютері мікропроцесора;
2)        сформуватив пам'яті глобальну дескрипторну таблицю, утримуючу дескриптори усіхвикористовуваних у програмі сегментів пам'яті;
3)        задатибазова адреса і розмір глобальної дескрипторної таблиці;
4)        сформуватидані для повернення в реальний режим;
5)        заборонитимаскуємі і немаскуємі переривання;
6)        зберегтив пам'яті вміст регістрів МП;
7)        перевестимікропроцесор у захищений режим;
8)        виконатив захищеному режимі задані дії;
9)        повернутисяв реальний режим;
10)     відновитивміст регістрів МП;
11)     дозволитимаскуємі і немаскуємі переривання.
1.1.    Визначеннятипу мікропроцесора.
Оскільки перехіду захищений режим, повернення з захищеного режиму, обробка переривань іорганізація багатозадачного режиму здійснюються по-різному для МП 80286 і МПнаступних моделей, необхідно визначити тип МП персонального комп'ютера.Визначення типу мікропроцесора для моделей 8086-i486 ґрунтується на розходженнів різних типів МП у стані і зміні окремих бітов регістра прапорів (FLAGS чи EFLAGSдля 32-розрядних МП):
• 8086: біти12-15 регістра FLAGS завжди встановлені;
• 80286: біти12-15 регістра FLAGS у реальному режимі завжди кинуті;
• 80386: прапорAC (біт 18) регістра EFLAGS не може бути встановлений;
• i486: прапорAC EFLAGS може бути встановлений.
Для останніхмоделей МП i486 і наступних мікропроцесорів (Pentium, Pentium MMX, Pentium Pro,Pentium II, Celeron і Pentium III) з'явилася можливість одержати додаткову інформаціюпро МП за допомогою команди CPUID (CPU IDentification). Чи виконується цякоманда на даному мікропроцесорі можна визначити за допомогою біта ID (21)регістра EFLAGS: якщо програмно стан цього біта можна змінити, значить командаCPUID виконується.
Команда CPUID маєкод 0Fh 0A2h. Параметр команди вказується в регістрі EAX. Значення бітоврегістра EDX (при EAX=1), містить інформацію про особливості мікропроцесора.
Інформація, щоповертається командою CPUID
Таблиця 1. Вхідне значення EAX Інформація, видавана мікропроцесором
EAX – максимальне вхідне значення EAX
EBX – Genu чи Auth
ECX – ine чи enti
EDX – ntel чи cAMD 1
EAX – версія МП: тип, сімейство, модель, Степпинг (stepping) чи старші 32
біта 96-бітного серійного номера МП
EBX – зарезервовано
ECX – зарезервовано
EDX – інформація про особливості МП 2 EAX:EBX:ECX:EDX — інформація про кеш-пам'ять і TLB 3 EDX:ECX- молодші 64 біта 96-бітного серійного номера МП
Кодиідентифікації МП
Таблиця 2
Тип EDX
[13:12]
Сімейство
EDX[11:8]
Модель
EDX[7:4] Мікропроцесор
00
00
00
00
00
00
00
00
00
00
00
01
00
00
01
01
01
00
00
00
00
00
00
00
00
00
01
0100
0100
0100
0100
 0100
 0100
 0100
 0100
 0100
 0100
 0100
 0100
 0101
 0101
 0101
 0101
 0101
 0101
 0101
 0101
 0101
 0110
0110
 0110
 0110
 0110
 0110
0000
 0001
 0010
 0011
 0100
 0101
 0111
 1000
 1001
 1110
 1111
 1000
 0001
 0010
 0001
 0010
 0011
 0100
 0000
 0001
 0010
 0001
0011
 0101
 0110
 0111
 0011
Intel486DX
Intel486DX
Intel486SX
Intel486DX2, Intel486DX2 OverDrive, AMD DX2 у режимі WT
IntelSXL
IntelSX2 OverDrive
IntelDX2 і AMD DX2 у режимі WB
AMD DX4 у режимі WT
AMD DX4 у режимі WB
Am5x86 у режимі WT
Am5x86 у режимі WB
IntelDX4 Overdrive
Pentium (60,66)
Pentium (75..200)
Pentium OverDrive (60,66)
Pentium OverDrive (75..133)
Pentium OverDrive для 486
Pentium MMX (166,200)
AMD-K5-PR75,90,100
AMD-K5-PR120,133
AMD-K5-PR166
Pentium Pro
Pentium II модель 3
Pentium II модель 5,
Pentium II Xeon, Celeron модель 5
Celeron модель 6
Pentium III, Pentium III Xeon
Pentium II OverDrive
При виконаннікоманди CPUID із вхідним значенням EAX=2 мікропроцесор повертає інформацію провнутрішню кеш-пам'ять і TLB. При цьому молодший байт регістра EAX (регістр AL) міститьзначення, що показує, скільки разів необхідно виконати команду CPUID із вхіднимзначенням EAX=2, щоб одержати всю інформацію про кешпам’яті і TLB.
Старший біт (біт31) кожного регістра показує, чи містить даний регістр достовірну інформацію(біт дорівнює 0) чи є зарезервованим (біт дорівнює 1). Якщо регістр міститьдостовірну інформацію, то вона представляється у виді однобайтних дескрипторів.
1.2.    Формуванняглобальної дескрипторної таблиці.
 
Сегментаціяпам'яті, тобто розбивка пам'яті на окремі блоки, називані сегментами,здійснюється по-різному в реальному і захищеному режимах.
У захищеномурежимі атрибути сегментів, що задають місце розташування сегмента в загальномуадресному просторі, його розмір і особливості доступу до нього, представлені увиді 8-байтної структури даних, називаної дескриптором. Дескрипторизберігаються в пам'яті у виді дескрипторних таблиць. Дескриптори сегментів коду,стека, даних, а також системні дескриптори, знаходяться в глобальноїдескрипторної таблиці — GDT (Global Descriptor Table).
Прибагатозадачний роботі кожна задача може мати свої сегменти коду, стека і даних,недоступні для інших задач. У цьому випадку дескриптори цих сегментів містятьсяв локальну дескрипторну таблицю — LDT (Local Descriptor Table), що може бутиформована, якщо це необхідно, для кожної задачі.
Дескрипториоброблювачів переривань зберігаються дескрипторної таблиці переривань — IDT(Interrupt Descriptor Table).
У реальномурежимі для опису атрибутів сегмента дескриптор
не потрібно, томущо базова адреса сегмента (зменшений у 16 разів) зберігається в сегментномурегістрі, границя сегмента (64 Кб — 1) фіксована і завжди може бути зробленийдоступ (запис і читання)
до сегмента.
1.3.    Структурадескриптора сегмента.
Форматдескриптора сегмента для МП починаючи з 80386, що має наступні полючи :
Границя сегмента,рівна розміру сегмента, зменшеному на 1, і його базову адресу займають удескрипторі по двох полючи: границя — байти 0,1 і молодші 4 розряди байта 6,базовий адреса – байти 2-4 і 7 дескриптора сегмента.
Наявність двох полівдля границі і базової адреси сегмента зв'язано з забезпеченням сполучностіпрограм, написаних для МП 80286, з наступними МП: молодші шістьох байтівдескриптора в цьому випадку цілком збігаються з дескриптором МП 80286.
Біти старшої частинибайта 6 дескриптора мають наступне призначення:
G (Granularity) — біт дрібності вказує, у яких одиницях задана границя сегмента: при G=0 — убайтах, при G=1 — у сторінках обсягом по 4 Кбайт. Таким чином, сегмент можемати розмір до 1 Мбайт (2^20) при G=0 і до 4 Гбайт (2^32) при G=1. Коли границязадана в 4 Кб одиницях, те молодші 12 розрядів зсуву не беруть участь упорівнянні при перевірці виходу зсуву за зазначену границю сегмента.
D/B (Defaultsize/Big) — біт розміру за замовчуванням визначає для сегмента коду розрядністьформованої відносної адреси й операнда: при D=0 — 16 розрядів, при D=1 — 32розряду. Розрядність, прийнята за замовчуванням може бути змінена за допомогоюпрефікса розрядності даних (66h) чи адреси (67h).
Для сегментастека цей біт називається B і визначає наступне:
• якщо сегмент стекавизначена як сегмент даних, тобто ED=0, то при B=1 розміри слова стека ірегістра ESP рівні 32 розрядам;
• якщо сегментстека розширюється вниз (ED=1), то B також визначає розмір стека: при B=0 віндорівнює 64 Кб, при B=1 — 4 Гб.
Біт X може бутивикористаний чи системою користувачем за своїм розсудом (цей бітмікропроцесором не обробляється).
Байт доступудескриптора визначає права доступу до обираного сегмента і, у залежності відтипу сегмента, має кілька форматів.
 Біти і полючи байтадоступу мають наступне призначення:
P(Present) — бітприсутності визначає наявність відповідного
сегмента (P=1) чийого відсутність (P=0) у пам'яті. Якщо в регістр сегмента занесений селектордескриптора, що має Р=0, то при зверненні до цього сегмента виникає переривання11;
DPL (Descriptor PrivilegeLevel) — рівень привілеїв дескриптора вказує на ступінь захисту сегмента придоступі до нього;
S (System) — системний біт визначає вид обираного дескриптора: S=0 означає, що це дескрипторсистемного сегмента й у поле TYPE указується його тип ;
E (Execute) — біт“выполняемости” визначає, чи можна сегмент виконати: E=1 означає, що це сегменткоду, E=0 означає, що це чи сегмент даних, чи стека;
А (Accessed) — бітдоступу встановлюється апаратно при доступі до сегмента, т.ч. при завантаженнівідповідного селектора в сегментний регістр;
R (Read) — бітдозволу зчитування використовується для сегмента коду і дозволяє при R=1зчитування його вмісту. При R=0 спроба зчитування приводить до виникненняпереривання 13 (те ж відбувається при спробі запису в сегмент коду незалежновід R);
C (Conforming) — біт підпорядкування визначає додаткові правила звертання із сегментом коду(див. роздягнув 12 “ Захист пам'яті”;
W (Write) — бітдозволу запису використовується для сегмента даних і дозволяє (при W=1) чизабороняє (при W=0) зміна умісту сегмента даних. При порушенні викликаєтьсяпереривання 13. Дескриптор сегмента стека обов'язково повинна мати W=1;
ED (Expand Down)- біт напрямку розширення визначає, як буде вказуватися границя сегмента даних:при ED=0 (расширениe нагору) дані в сегменті розміщаються в напрямку зростанняадрес від базової адреси сегмента до його границі, зазначеної в дескрипторі; приED=1 (расширення униз) дані в сегменті розташовуються в напрямку зменшенняадрес. Це реалізується в сегментах стека, де дані розміщаються починаючи зосередку, адреса який дорівнює базовому, збільшеному на максимальний розмірсегмента (64 Кб чи 4 Гб у залежності від біта B дескриптора). Інші осередкистека мають менші адреси, аж до нижньої границі стека, рівній сумі базовоїадреси сегмента і його границі, зазначеної в дескрипторі.
Біти P і A байтадоступу дескриптора сегмента можуть бути використані операційною системою (ОС)для організації віртуальної пам'яті. ОС періодично переглядаючи (і скидаючи)біти A дескрипторів усіх сегментів, визначає час останнього доступу до кожногосегмента. Якщо сегмента, до якого виконується звертання, немає в пам'яті (P=0),виробляється відповідне переривання, і операційна система, обробляючи цепереривання, зчитує цей сегмент із магнітного диска в пам'ять. І, якщо впам'яті немає для цього вільного місця, з її віддаляється на диск саме тойсегмент, що довше всього залишався незатребуваним.
1.4.    Виконаннядоступу до сегментів.
Доступ до необхідногосегмента здійснюється за допомогою селектора, що заноситься у відповіднийсегментний регістр.
Сегментні регістримістять значення селекторів сегментів, що
указують напоточні адресуємі сегменти пам'яті. З кожним із сегментних регістрів зв'язанийнедоступний програмно (“тіньовий”) дескрипторний регістр сегмента.
Селектор являєсобою 16-розрядний покажчик, що має три полючи :
— поле RPL(Requested Privilege Level) визначає рівень привілеїв запиту, т.ч. вказує тойприпустимий рівень захисту сегмента, при якому сегмент може бути обраний за допомогоюданого селектора.
— поле TI (TableIndicator) служить індикатором вибору дескриптор уторованої таблиці: TI = 0:вибирається GDT; TI = 1: вибирається LDT.
— поле ІНДЕКС служитьномером для вибору одного з дескрипторів, що містяться в таблиці. Першимдескриптором у таблиці завжди указується дескриптор, називаний нуль-дескриптор (вінмістить нулі у всіх полях). Завантаження нуль-дескриптора в сегментні регістрикоду і стека відразу викликає переривання 13 (“Порушення загальної захисту”).При завантаженні нуль-дескриптора в сегментні регістри даних це переривання невиникає. Однак воно виробляється при спробі програми звернутися до цихсегментів. Це може бути використане для запобігання доступу до тих чи іншимсегментної регістрам.
Максимальне числодескрипторів таблиці визначається форматом селектора і дорівнює 8192 .
Число дескрипторнихтаблиць, доступних задачі (GDT і LDT), їх максимальний розмір, а такожмаксимальний розмір сегмента визначають розмір віртуальної пам'ятімікропроцесора: 2*8192*4 Гбайт = 64 Тбайт.
Щораз призавантаженні селектора в сегментний регістр мікропроцесор знаходить у GDT поіндексі необхідний дескриптор сегмента і завантажує дані з цього дескриптора(базова адреса, границя й атрибути) у відповідний дескрипторний “тіньовий”регистер. Якщо значення індексу перевищить границю GDT, то буде переривання 13.
При звертанні до пам'ятімікропроцесор на етапі сегментації формує лінійна адреса операнда чи команди, апотім на етапі сторінкової організації перетворить його у фізичну адресу. Якщосторінкова організація не використовується, те лінійна адреса буде бутифізичним.
Лінійна адресаоперанда чи команди дорівнює сумі базової адреси того сегмента, де знаходятьсяоперанд чи команда, і їхньої відносної адреси. При цьому базова адреса сегментабереться мікропроцесором саме з дескрипторного регістра, а не з дескрипторасегмента в GDT, що зажадало би звертання до пам'яті і додатковим тимчасовимвитратам.
1.5.    Формуваннядескрипторів сегментів.
Структурадескриптора таблиці GDT відповідно до формату дескриптора сегмента. Длясегмента коду байт доступу буде дорівнює:
acc_code:=presentOR nosys OR exe OR read, тобто він знаходитися в пам'яті (P=1), не є системним(S=1), його можна виконувати (E=1) і його можна читати (R=1).
Формуваннядескрипторів таблиці GDT здійснюється за допомогою
занесеннязначення параметрів у відповідні полючи дескриптора, і мають наступне значення:
i — номердескриптора сегмента в GDT;
limit — границясегмента;
base — базоваадреса сегмента;
acces — байтдоступу;
d, g — біти D і Gбайта 6 дескриптора сегмента.
1.6.    Завданняадреси і розміру GDT.
Після формування дескрипторівGDT необхідно вказати мікропроцесору місце розташування цієї таблиці в пам'яті іїї розмір.
Це робиться задопомогою регістра GDTR, що містить 32-розрядний базова адреса таблиці і її16-розрядну границю.
Для формуванняданих регістра GDTR і його завантаження використовується базова адреса і розмірперемінної gdt і за допомогою команди LGDT завантажує ці значення в регістрGDTR.
1.7.    Підготовкадо скидання мікропроцесора.
 
Для МП 80286повернення в реальний режим із захищеного здійснюється тільки шляхом скиданнямікропроцесора, ініційованого командою контролера клавіатури.
Для МП наступнихмоделей можливі два варіанти повернення в реальний режим: за допомогою командиMOV чи також через скидання МП. У випадку повернення через скиданнямікропроцесора необхідно в реальному режимі підготувати структури даних дляздійснення повернення в задану крапку програми після скидання МП.
Після виконанняскидання процесор переходить у реальний режим і керування передається BIOS.BIOS аналізує вміст осередку CMOS-пам'яті з адресою 0Fh — байта станувідключення. Подальші дії визначаються вмістом цього осередку.
Значення байтастану відключення
Таблиця 3.Значення Причина відключення
1
2
3
4
5
6,7,8
9
0Ah
Програмне скидання при натисканні комбінації клавіш
CTRL-ALT-DEL чи несподіване скидання. Виконується звичайний перезапуск системи, але процедури тестування, що працюють при включенні харчування, не виконуються.
Скидання після визначення обсягу пам'яті.
Скидання після тестування пам'яті.
Скидання після виявлення помилки в пам'яті (контроль
парності).
Скидання з запитом перезавантаження.
Після скидання перезавантажується контролер переривань,
потім керування передається за адресою, що знаходиться в області даних BIOS 0040h:0067h.
Скидання після виконання тесту роботи процесора в
захищеному режимі.
Скидання після виконання пересилання блоку пам'яті з
основної пам'яті в розширену.
Після скидання керування негайно передається по
адресі в 0040h:0067h області даних BIOS.
Якщо в захищеномурежимі не використовуються переривання і, відповідно, не перепрограмується контролерпереривань, є зміст застосувати значення 0Ah. При цьому послу скидання МПкерування буде відразу передано за адресою, узятому з області даних BIOS0040h:0067h. У цьому випадку час, витрачений на повернення в реальний режим,буде менше.
Для запису байтаданих в осередок CMOS-пам'яті необхідно спочатку в порт з адресою 70h записатиномер потрібного осередку, а потім у порт 71h — занести дані.
1.8.    Заборонамаскуємих і немаскуємих переривань.
Перед переходом узахищений режим необхідно заборонити всі зовнішні апаратні як маскуємі, так інемаскуємі. Обробка маскуємих переривань мікропроцесором не виконується, якщоскинутий прапор IF регістра FLAFS/EFLAFS. Скидання прапора IF виконує командаCLI. Для заборони немаскуємих переривань необхідно в порт 70h занести байтданих, що містить у старшому розряді одиницю.
1.9.    Збереженняв пам'яті регістрів мікропроцесора.
Оскільки прискиданні МП значення його регістрів губляться, те необхідно попередньоздійснити запис значень сегментних регістрів і регістра покажчика стека впам'ять.
1.10.  Перекладмікропроцесора в захищений режим.
Для того щобперевести МП у захищений режим, необхідно установити 0-й біт регістра керуванняCR0 (Control Register) в одиницю.
Регістр CR0 включає10 розрядів для керування роботою мікропроцесора і визначення його стану (бітиCD, NW, AM, WP і NE з'явилися в МП починаючи з i486):
PE (ProtectionEnable) — біт дозволу захисту встановлюється в “1” для переключення МП у захищений режим. Якщо РЕ скинутий — МП працює в реальному режимі; МР(Monitor coProcessor) — біт керування співпроцесором — блоком FPU (FloatingPoint Unit) використовується разом з битому TS для генерації переривання 7(“FPU недоступний”) при обробці команди WAIT: якщо MP=1 і TS=1, то командаWAIT викликає переривання;
EM (Emulation) — біт емуляції співпроцесора: коли він установлений викликається переривання 7при виконанні команд FPU чи переривання 6 при виконанні команд MMX (для МП, щовиконує набір команд MMX). Значення EM не впливає на команду WAIT;
TS (Task Swiched)- біт переключення задач: біт TS установлюється при переключенні задач. ЯкщоTS=1 і виконується команда FPU чи MMX (якщо MP=1, то і команда WAIT), тевикликається переривання 7;
NE (NumericError) — біт керування обробкою помилок FPU: якщо NE=0, то встановлюєтьсясхема обробки помилок, використовувана в МП 80286 і 80386 — через зовнішнєпереривання IRQ 13 (переривання від співпроцесора). При цьому на вхід IRQ 13контролера переривань надходить сигнал FERR# від МП, що приймає активний(низький) рівень при помилці FPU. Вхідний сигнал МП IGNNE# низьким рівнемдозволяє заборонити обробку помилок FPU. Якщо NE=1, помилки співпроцесора обробляютьсяяк внутрішні переривання з номером 16;
WP (Write Protection)- біт захисту від запису забороняє запис у сторінки, потрібні тільки длячитання для всіх програм;
AM (AlignmentMask) — біт маски вирівнювання: при AM=0 забороняється перевірка невирівняностіоперандів;
NW (Not Writethrough) — біт заборони запису в кеш-пам'ять;
CD (CacheDisable) — біт заборони кэшировання, тобто заповнення рядка кеш-пам'яті;
PG (PaGing) — бітдозволу сторінкової організації. Установка PG=1 дозволена тільки в захищеномурежимі, тобто при PE=1.
Занесення даних урегістр CR0 для мікропроцесорів починаючи с 80386 виконується спеціальноюкомандою MOV, що здійснює промін із системними регістрами.
У МП 80286замість 32-розрядного регістра CR0 мається 16-розрядний регістр MSW (MachineStatus Word). Занесення даних у MSW виконується командою LMSW. Для сумісностімолодші 16 розрядів CR0 збігаються з MSW і запис у них може здійснюватися такожі командою LMSW.Установка біта PE здійснюється для мікропроцесора 80286 задопомогою команди LMSW, що заносить значення перемінної msw у регістр MSW: db0fh,01h,36h { LMSW }
dw msw
jmp @prot
Для МП починаючиз 80386 установка біта PE CR0 без зміни інших розрядів регістра керуванняздійснюється за допомогою команди MOV:
db $0f,$20,0c0h {MOV EAX,CR0 }
db 66h,0dh { OREAX,1 }
dd 1h
db $0f,22h,0c0h {MOV CR0,EAX }
jmp @prot
Відразу післяпереходу МП у захищений режим необхідно виконати програмний перехід дляочищення буфера предвиборки від команд, занесених туди в реальному режимі. Перехідздійснюється на мітку @prot, з яким і починається робота МП у захищеномурежимі. Помітимо, що оскільки в програмі P_MODE не було потрібноперевантажувати сегментний регістр коду (у захищеному режимі використовувалисяті ж базова адреса і розмір сегмента і того ж права доступу), тевикористовується внутрісегментний перехід і завантаження регістра
CS невідбувається. Потім у сегментні регістри DS, SS і ES завантажуються відповідніселектори:
@prot:movax,data_sel
mov ds,ax
mov ax,stack_sel
mov ss,ax
mov ax,video_sel
mov es,ax
На цьому перекладмікропроцесора в захищений режим завершується.

1.11.  Поверненняв реальний режим.
Для повернення в реальнийрежим для МП 80286 використовується процедура RESET, що встановлює ознакувиконання скидання мікропроцесора (res=1), за допомогою команди контролера клавіатуриздійснює скидання МП: mov al,$fe
out $64,al
і очікуєзавершення скидання мікропроцесора:
@wait_res:
hlt
jmp @wait_res.
Після скидання МПBIOS виконує перехід на крапку входу, адреса яке зберігається в осередку$40:$67. Для МП починаючи з 80386 повернення в реальний режим виконується задопомогою команди MOV, що здійснює скидання біта PE регістра CR0. Перед цим необхідновиконати наступні дії :
а) заборонитиапаратні переривання командою CLI;
б) передатикерування сегменту коду з R=1 і FFFFh;
в) завантажити всегментні регістри DS, SS, ES селектори сегмента, що має атрибути, відповідніреальному режиму: границю сегмента, рівну 64ДО-1, ED=0 і W=1;
г) за допомогоюкоманди LIDT завантажити в IDTR базова адреса (0) і границю (1Кб — 1) таблицівекторів реального режиму;
д) очистити бітPE регістра CR0;
е) здійснитимежсегментний перехід.
З перерахованихвище дій у даній програмі потрібно виконати тільки пункти а), в), і д). Пунктб) не потрібно виконувати оскільки сегмент виконуваного коду уже володіє зазначеннимипараметрами. Пункт г) не потрібно, тому що в захищеному режимі не оброблялися ітаблиця векторів (тобто IDT) і її розташування в пам'яті не були змінені.
Нарешті, пункт е)не потрібний через те, що не було завантаження регістра CS при вході взахищений режим.
Для завантаженнясегментних регістрів DS, SS і ES використовується
селектор сегментаданих data_sel, що задовольняє перерахованим у пункті в) умовам: movax,data_sel
mov es,ax
mov ds,ax
mov ss,ax.
Очищення біта PEрегістра CR0 виконуються командою MOV:
db $0f,$20,0c0h
db 66h,25h
dd 0fffffffeh
db $0f,22h,0c0h
jmp ret_r
Перехід на міткуret_r необхідний для очищення буфера предвиборки команд.
1.12.  Відновленнярегістрів МП.
Відновленнярегістрів МП виконується в такий спосіб:
ret_r:
 xor ax,ax {Відновлення регістрів після }
 mov ds,ax {повернення в реальний режим: }
 movds,ds:[4*$60] { DS, }
 mov ss,real_ss {SS, }
 mov es,real_es {ES і }
 mov sp,real_sp {SP }

1.13.  Дозвілмаскуємих і немаскуємих переривань.
Дозвіл маскуємихі немаскуємих переривань здійснюється за допомогою процедури en_int. Цяпроцедура також виконує скидання стану клавіш-перемикачів.

2.        Системакоманд мікропроцесора :
 
2.1.    Кодуваннярегістрів.
При двухбітовомуполі rg :
Таблиця 4. rg 00 01 10 11 Сегментні регістри Es Cs Ss Ds
При трьохбітовомуполі rg :
Таблиця 5.Reg 000 001 010 011 100 101 110 111 W=0 Al Cl Dl Bl Ah Ch Dh Bh W=1 Ax Cx Dx Bx Sp Bp Si Di
2.2.    Визначенняефективної адреси.
Ефективна адресаEA операнда в пам'яті визначається в залежності від значень полів: mod і r/m :
Визначенняефективної адреси :
Таблиця 6.Mod DISP R/m EA 00
000
001
010
011
100
101
110
111
EA = (BX) + (SI)
EA = (BX) + (DI)
EA = (BP) + (SI)
EA = (BP) + (DI)
EA = (SI)
EA = (DI)
EA = DISP
EA = (BX) 01
Disp-low с расширением
со знаком
000
001
010
011
100
101
110
111
EA = (BX) + (SI) + DISP
EA = (BX)+(DI) + DISP
EA = (BP)+(SI) + DISP
EA = (BP)+(DI) + DISP
EA = (SI) + DISP
EA = (DI) + DISP
EA = (BP) + DISP
EA = (BX) + DISP 10 Disp-high: Disp-low
000
001
010
011
100
101
110
111
EA = (BX) + (SI) + DISP
EA = (BX)+(DI) + DISP
EA = (BP)+(SI) + DISP
EA = (BP)+(DI) + DISP
EA = (SI) + DISP
EA = (DI) + DISP
EA = (BP) + DISP
EA = (BX) + DISP 11  –
Код
регистра –

Міністерство Освіти і Науки України
НАЦІОНАЛЬНИЙТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”ЗАТВЕРДЖУЮ
Зав.Кафедрою xxxx.
___________/xxxxxx./
_________________2002р. Програма модифікуючакоманди, які використовуються в захищеному режиміОпис програми
ЛИСТЗАТВЕРДЖЕННЯXxxxxx-01 13 01-1 ЛЗ
Розробники:
Керівникпроекту :
________/ xxxxxxx./
___________________2002р.Виконавець:
_______/ Хххххххххххх Х.Х./
___________________2002р.Харків
2002

ЗАТВЕРДЖЕНИЙ
Xxxxxx-01 13 01-1 ЛЗПрограмамодифікуюча команди, які використовуються в захищеному режиміОпис програмиХарків
2002

Опис програмиЗміст
1.        Описзмінних.
2.        Описпроцедур і функцій.
3.        Списоклітератури.

1.        Описзмінних.Змінна Тип Призначення Dlina  Integer Загальна довжина команди.  Cod Byte Шеснадцятирічне значення коду команди. i Byte Номер команди. p Longint
Число яке перетвориться в
16-річну форму. s String Получене 16-річне значення. Dlin_Kom Integer Довжина команди. b1  Byte Байт, що йде за кодом операції. Md  Byte
Значення поля mod
( Регистровій режим / режим пам'яті з довжиною зсуву). Rm  Byte
Значення поля R/m
( Регистр-операнд / регістри, використовувані в обчисленні зсуву ). hex_tabl Array[0..15] of char
Шеснадцятирічне значення
чисел.
2.        Описпроцедур і функцій.
Процедура Analiz:
( procedureAnaliz;Assembler; )
У даній процедурізнаходиться код програми, написаний мовою Assembler, що аналізується, на розмірформату команди, у наслідку, головною програмою.
Функція hex :
( functionhex(p:longint):string; )
Дана функціяздійснює переклад числа p у шеснадцятирічне значення, для наступного виводуйого на печатку, чи екран монітора.
ФункціяOpred_Dlin_Kom :
( functionOpred_Dlin_Kom(cod:byte;n:word):integer; )
Дана функціяздійснює обчислення розміру довжини байта, який
йде відразу післяКОП ( коду операції ).
Головна програма :
( program Ade; )
У тексті головноїпрограми здійснює обчислення розміру довжини поточної команди, і перехід, поотриманій довжині, до коду наступної команди.

Списоклітератури :
1.   «Апаратне забезпеченняІBM PC » (частина 1) Діалог — Мифи
2.   «Програмування всередовищі Turbo Pascal 7.0» А.І Марченко Л.А. Марченко 1997р.
3.   Методичні вказівки "Засобу обробки переривань у мові Turbo Pascal 7.0" 1993р. Ф.А. Домнін І.С.Зиков.
4.   Методичні вказівки«Архітектура обчислювальних систем » 1993р. А.І. Поворознюк, І.С.Зиков,С.Ю. Леонов.
5.   Методичні вказівки«Робота з машинними кодами і прямою доступ до пам'яті і портів у мовіTurbo Pascal 7.0» 1993р. Ф.А. Домнін И.С. Зиков.

Міністерство Освіти і Науки України
НАЦІОНАЛЬНИЙТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”ЗАТВЕРДЖУЮ
Зав.Кафедрою О.Т.П.
___________/xxxxxxx./
_________________2002р.Програмамодифікуюча команди, які використовуються в захищеному режиміТекст програми
ЛИСТ ЗАТВЕРДЖЕННЯXxxxxx- 01 1201-1 ЛЗ
Розробники:
Керівникпроекту :
________/ xxxxxxxxx./
___________________2002р.Виконавець:
_______/ Хххххххххххх Х.Х./
___________________2002р.Харків
2002

ЗАТВЕРДЖЕНИЙ
Xxxxxx-01 12 01-1 ЛЗПрограмамодифікуюча команди, які використовуються в захищеному режиміТекст програмиХарків
2002

program Ade; {Курсовой проект по МПС на 2002г.}
uses CRT, prot; {Модуль PROT содержит константы, типы переменных, переменные, процедуры ифункции для работы в защищенном режиме }
label ret_r; {Точка возврата в реальный режим }
const code_sel3 =$30;{ селектор кода модуля TURBO }
s:string='Обработкапрерываний в защищенном режиме';
s1:string='Скан-кодыклавиш: ';
var ff:extended;
err,segcode,ip,ofs_div,ofs_next,fl1,fl2,cur_sel,cod_ofs,cod_sel,sel_descr,ofs_analiz,
ds_int,ax_,bx_,ds_,bp_,ss_,cs_,flags,sp_,w,segm,sel_cs,es_:word;
cod_,i,lim1,lim2,prov,i_descr:byte;ss:string;dlina: integer;i_table:byte;
table:array[0..9]of record segm,ofs:word;cod,descr:byte;
end;
Real_Znach_ds:word;Real_Znach_ss: word;Real_Znach_es: word;Real_Znach_cs: word;
procedureout_GDT;{------------------Вывод таблицы GDT------------------}
var i:byte;
begin i:=1;
writeln('ТАБЛИЦАGDT');
whilegdt[i].acc0 do begin
writeln(hex(i*8),':',hex(gdt[i].acc),' ',hex(gdt[i].base_h),hex(gdt[i].base_l),' ',hex(gdt[i].lim_l));inc(i); end
end;
procedureSave_RG;Assembler;
asm { Сохранениезначений сегментных регистров DS,SS,ES}
movReal_Znach_ds,ds
movReal_Znach_ss,ss
movReal_Znach_es,es
 movReal_Znach_cs,cs
end; {save_rg}
procedure Analiz;{Assembler;}
begin
asm mov ax,2 end;
end;
procedurereal_code;Assembler;
asm
inc ax
inc cx
inc ax
inc cx
mov es,es_
mov segm,ax
end;
procedurepost(ofs,sel:word);
vari,cur_ofs,cur_ofs1,cur_ofs_:word; { Текущее смещение }
cod_p,cod,cod1,cod2,cod3,cod4,k,cod1_:byte;
functionDlin_Kom(cod:byte):integer;
var md, rm:byte;
begin
md:=cod shr6;rm:=cod and 7;
case md of
$0: case rm of
$0..$5,$7:Dlin_Kom:=1;
$6: Dlin_Kom:=2;
end;
$1: Dlin_Kom:=2;
$2: Dlin_Kom:=3;
$3: Dlin_Kom:=1;
end;{case}
end;{Dlin_Kom}
begin
asm
mov es_,es {Сохранить ES в es_ }
end;
cur_ofs:=ofs; {Текущее смещение процедуры }
i:=1; { Номеркоманды процедуры }
repeat
asm
mov es,sel {Загрузить селектор в ES }
mov bx, cur_ofs
dec bx
mov al, byte ptres:[bx] { Префикс команды: }
mov cod_p,al {cod_p }
mov al, byte ptres:[bx+1] { 1-й байт команды (КОП): }
mov cod,al
mov al, byte ptres:[bx+2] { 2-й байт команды }
mov cod1,al {(modregr/m): cod1 }
mov al, byte ptres:[bx+3] { 3-й байт команды: }
mov cod2,al {cod2 }
mov al, byte ptres:[bx+4] { 4-й байт команды: }
mov cod3,al {cod3 }
mov al, byte ptres:[bx+5] { 5-й байт команды }
mov cod4,al {cod4 }
cmp cod,9ah { Этокоманда межсегментного перехода? }
jnz @2 { Если да:}
mov ax, word ptres:[bx+2] { определение смещения }
mov cod_ofs,ax
mov ax, word ptres:[bx+4] { и селектора перехода }
mov cod_sel,ax
mov al,0cch
mov byte ptres:[bx+1],al
jmp @2
@1:
cmp cod,8eh { Этокоманда загрузки сегмента данных? }
jnz @2 { Если да:}
mov al,35h
mov byte ptres:[bx],al
jmp @2
mov ax,sel_cs {Занесение значения CS процедуры }
mov es,ax {Real_code в регистр ES }
mov bx,offsetreal_code
mov al,cod_p {Запись префикса искомой команды в }
mov byte ptres:[bx],al { качестве 1-го байта процедуры }
mov al,8bh {Замена: вместо сегментного регистра }
mov byte ptres:[bx+1],al { будет загружаться регистр AX }
mov al,cod1 {Коррекция байта modregm/r }
and al,0c7h
mov byte ptres:[bx+2],al
mov al,cod2
mov byte ptres:[bx+3],al { Занесение 3-го байта }
xor ax,ax {искомое значение сегментного регистра }
@2:mov es,es_
end;
cur_ofs1:=cur_ofs;
case cod of
$88..$8B:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$C6:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+2;
$C7:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+3;
$B0..$B7:cur_ofs:=cur_ofs+2;
$B8..$BF:cur_ofs:=cur_ofs+3;
$A0..$A3: cur_ofs:=cur_ofs+3;
$8E,$8C:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$FF:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$50..$57:cur_ofs:=cur_ofs+1;
$06,$0E,
$16,$1E:cur_ofs:=cur_ofs+1;
$68:cur_ofs:=cur_ofs+3;
$6A:cur_ofs:=cur_ofs+2;
$60:cur_ofs:=cur_ofs+1;
$8F: cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$58..$5F:cur_ofs:=cur_ofs+1;
$07,$17,
$1F:cur_ofs:=cur_ofs+1;
$61:cur_ofs:=cur_ofs+1;
$86,$87:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$90..$97:cur_ofs:=cur_ofs+1;
$E4,$E5:cur_ofs:=cur_ofs+2;
$EC,$ED:cur_ofs:=cur_ofs+1;
$E6,$E7:cur_ofs:=cur_ofs+2;
$EE,$EF:cur_ofs:=cur_ofs+1;
$D7:cur_ofs:=cur_ofs+1;
$8D:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$C4,$C5:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$9C..$9F:cur_ofs:=cur_ofs+1;
$00..$03:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$80,
$82,$83:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+2;
$81:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+3;
$04:cur_ofs:=cur_ofs+2;
$05:cur_ofs:=cur_ofs+3;
$10..$13:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$14:cur_ofs:=cur_ofs+2;
$15:cur_ofs:=cur_ofs+3;
$FE,$FF:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$40..$47:cur_ofs:=cur_ofs+1;
$28..$2B:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$2C:cur_ofs:=cur_ofs+2;
$2D:cur_ofs:=cur_ofs+3;
$18..$1B:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$1C:cur_ofs:=cur_ofs+2;
$1D:cur_ofs:=cur_ofs+3;
$FE,$FF:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$48..$4F:cur_ofs:=cur_ofs+1;
$38..$3B:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$3C:cur_ofs:=cur_ofs+2;
$3D:cur_ofs:=cur_ofs+3;
$F6,$F7:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$27,$37:cur_ofs:=cur_ofs+1;
$2F,$3F:cur_ofs:=cur_ofs+1;
$69:cur_ofs:=cur_ofs+4;
$6B:cur_ofs:=cur_ofs+3;
$D4,$D5:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$98,$99:cur_ofs:=cur_ofs+1;
$D0..$D3:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$C0,$C1:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+2;
$20..$23:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$24:cur_ofs:=cur_ofs+2;
$25:cur_ofs:=cur_ofs+3;
$84,$85:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$F6:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+2;
$F7:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+3;
$A8: cur_ofs:=cur_ofs+2;
$A9:cur_ofs:=cur_ofs+3;
$08..$0B:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$0C:cur_ofs:=cur_ofs+2;
$0D:cur_ofs:=cur_ofs+3;
$30..$33:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$34:cur_ofs:=cur_ofs+2;
$35:cur_ofs:=cur_ofs+3;
$A4,$A5:cur_ofs:=cur_ofs+1;
$A6,$A7:cur_ofs:=cur_ofs+1;
$AE,$AF:cur_ofs:=cur_ofs+1;
$AC,$AD:cur_ofs:=cur_ofs+1;
$AA,$AB:cur_ofs:=cur_ofs+1;
$6C..$6F:cur_ofs:=cur_ofs+1;
$F2,$F3:cur_ofs:=cur_ofs+2;
$E8:cur_ofs:=cur_ofs+3;
$9A:cur_ofs:=cur_ofs+5;
$EB:cur_ofs:=cur_ofs+2;
$E9:cur_ofs:=cur_ofs+3;
$EA:cur_ofs:=cur_ofs+5;
$C3:cur_ofs:=cur_ofs+1;
$C2:cur_ofs:=cur_ofs+3;
$CB:cur_ofs:=cur_ofs+1;
$CA:cur_ofs:=cur_ofs+3;
$70..$7F:cur_ofs:=cur_ofs+2;
$E0..$E3:cur_ofs:=cur_ofs+2;
$C8:cur_ofs:=cur_ofs+4;
$C9:cur_ofs:=cur_ofs+1;
$CD:cur_ofs:=cur_ofs+2;
$CC:cur_ofs:=cur_ofs+1;
$CE:cur_ofs:=cur_ofs+1;
$CF:cur_ofs:=cur_ofs+1;
$62:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$F8..$FD:cur_ofs:=cur_ofs+1;
$F4,$F5:cur_ofs:=cur_ofs+1;
$9B:cur_ofs:=cur_ofs+1;
$65,$F0:cur_ofs:=cur_ofs+1;
$0F:cur_ofs:=cur_ofs+2;
$D8..$DF:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
$26,$2E,
$36,$3E:cur_ofs:=cur_ofs+1;
$0F:cur_ofs:=cur_ofs+Dlin_Kom(cod2)+2;
$63:cur_ofs:=cur_ofs+Dlin_Kom(cod1)+1;
end;
write(i:4,'.',sel,':',cur_ofs1,' Код => ',hex(cod):3,';');
if(cur_ofs-cur_ofs1) >1 then write(' ',hex(cod1):3,' ');
if(cur_ofs-cur_ofs1) >2 then write(' ',hex(cod2):3,' ');
if(cur_ofs-cur_ofs1) >3 then write(' ',hex(cod3):3,' ');
if(cur_ofs-cur_ofs1) >4 then write(' ',hex(cod4):3,' ');
inc(i);
if cod=$9a thenbegin
writeln('Межсегментныйпереход!');
withtable[i_table] do begin segm:=sel;ofs:=cur_ofs1;cod:=$9a;descr:=sel_descr; end;
inc(i_table); {Формирование дескриптора сегмента кода: }
init_gdt(i_descr,$ffff,lin_adr(cod_sel,0),acc_code,0,0);
inc(i_descr);sel_descr:=sel_descr+8;post(cod_ofs,cod_sel);
end;
until (cod=$C3)or (cod=$CB) or (cod=$C2) or (cod=$CA);{ret}
writeln('End ofprocedure');readkey;
end;{post}
begin
textbackground(0);clrscr;textcolor(15);
asm cli end;w:=0; i_table:=0;
for i:=0 to 9 dotable[i].segm:=0;
memL[0:3*4]:=Longint(@int3);asm sti end;
i_descr:=6; sel_descr:=$30;Save_RG;
writeln('ЗначениеDS,SS,ES,CS для реального режима: ', hex(Real_Znach_ds),',',hex(Real_Znach_ss),',', hex(Real_Znach_es),' ',hex(Real_Znach_cs));sel_cs:=Cseg;
asm movofs_analiz,offset analiz end; post(ofs_analiz,Cseg);
analiz;
writeln('w=',w,'sp=',sp_,' cod_=',hex(cod_),' bp=',bp_,' ss=',hex(ss_),' cs=',hex(cs_),'ds=',hex(ds_),' bx=',bx_); i:=0;
whiletable[i].segm0 do with table[i] do begin
writeln('segm=',segm,' ofs=',ofs,' cod=',hex(cod),' desr=',hex(descr));inc(i);
end; readkey;
lim1:=0;lim2:=10;
{---Определениезначения сегмента кода cs1 процедур, описанных в модуле PROT----}
cs1:=Seg(int_30h);
excep:=$ff; {Отличное от FFh значение переменной excep }
semaf:=0; {Начальная установка семафора }
res:=0; { МПсброшен не был }
{-----------Определениетипа микропроцессора----------------}
get_cpu_type(0,cpu_type);{ В cpu_type — номер типа МП }
if cpu_type=2then t:=0 { 16-разрядный МП }
else t:=8; {32-разрядный МП }
{ Формированиебайта доступа прерывания: }
acc_int:=presentOR type_int OR t;
{ Формированиебайта доступа ловушки: }
acc_trap:=presentOR type_trap OR t;
{--------------Формированиетаблицы GDT-------------------- }
{Нуль-дескриптор: }
init_gdt(0,0,0,0,0,0);
init_gdt(1,$ffff,lin_adr(cseg,0),acc_code,0,0);
init_gdt(2,$ffff,lin_adr(cs1,0),acc_code,0,0);
init_gdt(3,$ffff,lin_adr(dseg,0),acc_data+$60,0,0);
init_gdt(4,0,lin_adr(sseg,0),acc_stack,0,0);
init_gdt(5,4000-1,lin_adr($b800,0),acc_data,0,0);
{------Формированиеданных регистра GDTR и его загрузка-----}
out_GDT; readkey;exit; init_gdtr;
{----Определениеселектора (sel_ret) и смещения (ofs_ret)---}
sel_ret:=Cseg;
asm movofs_ret,offset ret_r end;
{-------------Формированиеданных для перехода на метку ret_r после сброса МП-------}
save_ret_real(sel_ret,ofs_ret,5);
not_int;{------Запретмаскируемых и немаскируемых прерываний--------}
{--------------Формированиетаблицы IDT-------------------- }
init_idt(0,ofs(exc_00),code_sel2,acc_trap);
init_idt(1,ofs(exc_01),code_sel2,acc_trap);
init_idt(2,ofs(exc_02),code_sel2,acc_trap);
init_idt(3,ofs(exc_03),code_sel,acc_trap);
init_idt(4,ofs(exc_04),code_sel2,acc_trap);
init_idt(5,ofs(exc_05),code_sel2,acc_trap);
init_idt(6,ofs(exc_06),code_sel2,acc_trap);
init_idt(7,ofs(exc_07),code_sel2,acc_trap);
init_idt(8,ofs(exc_08),code_sel2,acc_trap);
init_idt(10,ofs(exc_10),code_sel2,acc_trap);
init_idt(11,ofs(exc_11),code_sel2,acc_trap);
init_idt(12,ofs(exc_12),code_sel2,acc_trap);
init_idt(13,ofs(exc_13),code_sel2,acc_trap);
init_idt(14,ofs(exc_14),code_sel2,acc_trap);
init_idt(16,ofs(exc_16),code_sel2,acc_trap);
init_idt(17,ofs(exc_17),code_sel2,acc_trap);
init_idt(18,ofs(exc_18),code_sel2,acc_trap);
init_idt($20,ofs(PIC_1),code_sel2,acc_int);
init_idt($21,ofs(keyb),code_sel2,acc_int+$60);
for i:=2 to 7 do
init_idt($20+i,ofs(PIC_1),code_sel2,acc_int);
for i:=8 to 15 do
init_idt($20+i,ofs(PIC_2),code_sel2,acc_int);
init_idt($30,ofs(int_30h),code_sel2,acc_trap);
init_idtr_p;
init_idtr_r;
pic(1);
save_sreg;
real_sp:=SPtr;
if cpu_type=2then
{--------Переходв защищенный режим для МП 80386 и выше-----}
asm { Установкабита PE=1 в регистре управления CR0: }
db 0fh,20h,0c0h {MOV EAX,CR0 }
db 66h,0dh { OREAX,1 }
dd 1h
db 0fh,22h,0c0h {MOV CR0,EAX }
end;
asm
db 0eah {Межсегментный переход на метку @prot }
dw offset @prot {для очистки буфера команд МП }
dw code_sel { изагрузки регистра CS }
@prot:movds,data_sel { DS, }
mov ss,stack_sel {SS }
mov es,video_sel {и ES }
mov ah,1 {Установка маркера: }
mov bx,1001h {строка 1, столбец 10 }
int 30h
mov ah,4 { Выводстроки s на экран: }
mov dh,1eh {видеоатрибут, }
mov si,offset s {адрес строки }
int $30
mov ah,1 {Установка маркера }
mov bx,004h
int 30h
mov ah,4 { Выводстроки s1 на экран: }
mov dh,30h
mov si,offset s1
int $30
mov ah,1 {Установка маркера }
mov bx,006h
int 30h
sti
@wait:
cmp semaf,0
jz @wait
cmp cpu_type,2
jnz @mov
db 9ah {межсегментный вызов процедуры reset }
dw offset reset
dw code_sel2
{---Подготовка квозврату в реальный режим по команде MOV---}
@mov:movds,data_sel
mov ss,data_sel
mov es,data_sel
{---------------Восстановлениеатрибутов IDT----------------}
db 0fh,01h,1eh {LIDT idtr_r }
dw idtr_r
{-------Возврат вреальный режим по команде MOV-------------}
db 0fh,20h,0c0h {MOV EAX,CR0 }
db 66h,25h { ANDEAX,FFFFFFFEh }
dd 0fffffffeh
db 0fh,22h,0c0h {MOV CR0,EAX }
mov bx,offsetofs_ret
db 0ffh {Косвенный межсегментный переход на метку ret_r }
db 2fh { дляочистки буфера команд МП и загрузки CS }
{db 2eh} {вместо2fh}
{dw ofs_ret}
{-----------------Работав реальном режиме------------------}
ret_r: xor ax,ax
mov ds,ax
mov ds,ds:[4*$60]{ DS, }
mov ss,real_ss {SS, }
mov es,real_es {ES }
mov sp,real_sp {и SP }
end;
if res=0 thentest_wr; { Если запрет сохранился — }
{ вырабатываетсяпрерывание 13, обработчик которого }
{ с помощьюпроцедуры reset сбрасывает МП }
{----------Размаскированиеконтроллеров прерываний----------}
port[$21]:=0; { первогоКП }
port[$a1]:=0; { ивторого КП }
{-----Разрешениемаскируемых и немаскируемых прерываний-----}
en_int;
{-------------Проверкавозникновения исключений-------------}
ifexcep$ff then {if excep=11 then
writeln('Обработаноисключение 11 (селектор ', err shr 3,')')
else}writeln('Исключение ',excep);
{----------Анализвозврата МП из защищенного режима---------}
if res=0 thens:='по команде MOV' else s:='через сброс МП';
writeln('Возвратиз защищенного режима выполнен ',s);
writeln('prov=',prov,ss);
readkey;
end.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :