Регістр EFLAGS - це тридцятидвохрозрядний регістр стану, що містить групу позначок (англ. flags) статусу, контролю, і групу системних позначок (бітів). Початкове значення регістра — 00000002h. Біти 1, 3, 5, 15, і всі з 22 до 31 зарезервовані для майбутнього використання. Робота програм не має залежати від тих бітів.
Деякі з позначок EFLAGS можна редагувати напряму, використовуючи спеціальні інструкції. Немає інструкції, яка б дозволяла відстежити, чи редагувати стан всього регістра прямо. Проте, існують інструкції що дають змогу переміщувати групи позначок у стек і з нього чи в регістр EAX: , , , , . Після того, як вміст EFLAGS переміщено у стек чи EAX, позначки можна відстежити, і змінити за допомогою інструкцій маніпулювання бітами (, BTS, , BTC).
При призупиненні задачі (з допомогою засобів багатозадачності), процесор автоматично зберігає стан регістра EFLAGS в сегменті стану задачі (). При переході до нової задачі, процесор завантажує регістр EFLAGS, з даними з нової задачі.
При виконанні викликів переривань, чи процедур винятків, процесор автоматично зберігає стан регістра EFLAGS, в процедурний стек. Коли переривання чи виняток обробляється переключенням на іншу задачу, позначки зберігаються в .
При переході до 32 розрядної архітектури, були додані деякі позначки, але функції і розміщення старих не змінено. Як результат — зворотна сумісність з регістром архітектури x86 — FLAGS.
Позначки статусу
Позначки статусу (біти 0, 2, 4, 6, 7, і 11) — індикатори результату роботи арифметичних інструкцій, таких як ADD, SUB, MUL, DIV. Функції позначок статусу:
- CF (Carry Flag) Позначка переносу (біт 0) — піднімається, якщо арифметична операція генерує перенос, чи виходить за межі значущих бітів результату. Показує переповнення при операціях з беззнаковими цілими.
- PF (Parity Flag) Позначка парності (біт 2) — піднімається, якщо найменш значущий байт результату містить парне число одиничок. Інакше опускається.
- AF (Adjust Flag) Позначка підстройки (біт 4) — піднімається, якщо арифметична операція спричинює перенос, чи виходить за межі на три біти. Цей прапор використовується в арифметиці з двійково-десятковим представленням (BCD).
- ZF (Zero Flag) Позначка нуля (біт 6) — піднімається, якщо результат нуль.
- SF (Sign Flag) Позначка знаку (біт 7) — встановлюється рівним найбільш значущому біту результату, який є бітом знаку в знакових цілих. 0 — вказує на додатне значення, 1 — від'ємне.
- OF (Overflow Flag) Позначка переповнення(біт 11) — піднімається, якщо ціле число завелике додатне, чи замаленьке від'ємне (виключаючи біт знаку), щоб влізти в операнд призначення, в протилежному випадку опускається. Прапор сигналізує про стан переповнення, в знакововій цілій арифметиці.
Умовні інструкції Jcc (cc — condition code), SETcc, LOOPcc, і CMOVcc використовують ідентифікатори позначок статусу, як коди умов. Наприклад команда умовного переносу, яка виконує перенос якщо результат попередньої операції від'ємний:
CMOVSF eax,ebx;
Позначка DF
DF (Direction Flag) — позначка напрямку. Знаходиться в біті 10. Контролює рядкові інструкції: (MOVS, CMPS, SCAS, LODS, і STOS). Якщо позначка піднята, то рядкові інструкції виконують автодекремент (рядки обробляються від більших адрес до менших). Якщо вона опущена, то відбувається автоінкремент.
Інструкція STD піднімає цю позначку, а CLD — опускає.
Системні позначки і поле IOPL
Системні позначки регістра EFLAGS контролюють операційну систему, і пристрої. Вони не мають змінюватись прикладною програмою. Функції системних позначок:
- IF (Interrupt enable flag) дозвіл переривання (біт 9)
- TF (Trap flag) пастка (біт 8) Піднімається щоб дозволити покроковий режим зневадження. Інакше цей режим відключений.
- IOPL (I/O priviledge level field) рівень пріоритету вводу-виводу. (біти 12 і 13). Чим менше рівень, тим більше повноважень має задача. Цей рівень можна модифікувати інструкціями POPF і IRET, викликаними на нульовому рівні.
- NT (Nested task) вкладена задача (біт 14). Контролює зв'язок перерваної і викликаної задачі.
- RF (Resume flag) продовження (біт 16). Контролює реакцію процесора на виключення зневадження.
- VM (Virtual mode) віртуальний режим (біт 17) Піднімається щоб запустити режим віртуального 8086. Щоб повернутись в захищений режим, його опускають.
- AC (Alignment check) перевірка вирівнювання (біт 18) Щоб ввімкнути перевірку вирівнювання підніміть цей прапор, і біт AM регістра CR0. Щоб вимкнути це, опустіть один з бітів.
- VIF (Virtual interrupt flag) (біт 19)
- VIP (Virtual interrupt pending) (біт 20)
- ID (Identification) (біт 21). Здатність програми змітити цю позначку означає підтримку інструкцій CPUID.
Примітки
- flag // Англійсько-український словник з математики та інформатики / уклад. Є. Мейнарович, М. Кратко. — 2010.
Література
- Intel Architecture Software Developer’s Manual. volume1: Basic Architecture, Order Number 243190;
- Intel Architecture Software Developer’s Manual. volume3: System Programming, Order Number 243192;
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Registr EFLAGS ce tridcyatidvohrozryadnij registr stanu sho mistit grupu poznachok angl flags statusu kontrolyu i grupu sistemnih poznachok bitiv Pochatkove znachennya registra 00000002h Biti 1 3 5 15 i vsi z 22 do 31 zarezervovani dlya majbutnogo vikoristannya Robota program ne maye zalezhati vid tih bitiv Deyaki z poznachok EFLAGS mozhna redaguvati napryamu vikoristovuyuchi specialni instrukciyi Nemaye instrukciyi yaka b dozvolyala vidstezhiti chi redaguvati stan vsogo registra pryamo Prote isnuyut instrukciyi sho dayut zmogu peremishuvati grupi poznachok u stek i z nogo chi v registr EAX Pislya togo yak vmist EFLAGS peremisheno u stek chi EAX poznachki mozhna vidstezhiti i zminiti za dopomogoyu instrukcij manipulyuvannya bitami BTS BTC Pri prizupinenni zadachi z dopomogoyu zasobiv bagatozadachnosti procesor avtomatichno zberigaye stan registra EFLAGS v segmenti stanu zadachi Pri perehodi do novoyi zadachi procesor zavantazhuye registr EFLAGS z danimi z novoyi zadachi Pri vikonanni viklikiv pererivan chi procedur vinyatkiv procesor avtomatichno zberigaye stan registra EFLAGS v procedurnij stek Koli pererivannya chi vinyatok obroblyayetsya pereklyuchennyam na inshu zadachu poznachki zberigayutsya v Pri perehodi do 32 rozryadnoyi arhitekturi buli dodani deyaki poznachki ale funkciyi i rozmishennya starih ne zmineno Yak rezultat zvorotna sumisnist z registrom arhitekturi x86 FLAGS Poznachki statusuPoznachki statusu biti 0 2 4 6 7 i 11 indikatori rezultatu roboti arifmetichnih instrukcij takih yak ADD SUB MUL DIV Funkciyi poznachok statusu CF Carry Flag Poznachka perenosu bit 0 pidnimayetsya yaksho arifmetichna operaciya generuye perenos chi vihodit za mezhi znachushih bitiv rezultatu Pokazuye perepovnennya pri operaciyah z bezznakovimi cilimi PF Parity Flag Poznachka parnosti bit 2 pidnimayetsya yaksho najmensh znachushij bajt rezultatu mistit parne chislo odinichok Inakshe opuskayetsya AF Adjust Flag Poznachka pidstrojki bit 4 pidnimayetsya yaksho arifmetichna operaciya sprichinyuye perenos chi vihodit za mezhi na tri biti Cej prapor vikoristovuyetsya v arifmetici z dvijkovo desyatkovim predstavlennyam BCD ZF Zero Flag Poznachka nulya bit 6 pidnimayetsya yaksho rezultat nul SF Sign Flag Poznachka znaku bit 7 vstanovlyuyetsya rivnim najbilsh znachushomu bitu rezultatu yakij ye bitom znaku v znakovih cilih 0 vkazuye na dodatne znachennya 1 vid yemne OF Overflow Flag Poznachka perepovnennya bit 11 pidnimayetsya yaksho cile chislo zavelike dodatne chi zamalenke vid yemne viklyuchayuchi bit znaku shob vlizti v operand priznachennya v protilezhnomu vipadku opuskayetsya Prapor signalizuye pro stan perepovnennya v znakovovij cilij arifmetici Umovni instrukciyi Jcc cc condition code SETcc LOOPcc i CMOVcc vikoristovuyut identifikatori poznachok statusu yak kodi umov Napriklad komanda umovnogo perenosu yaka vikonuye perenos yaksho rezultat poperednoyi operaciyi vid yemnij CMOVSF eax ebx Poznachka DFDF Direction Flag poznachka napryamku Znahoditsya v biti 10 Kontrolyuye ryadkovi instrukciyi MOVS CMPS SCAS LODS i STOS Yaksho poznachka pidnyata to ryadkovi instrukciyi vikonuyut avtodekrement ryadki obroblyayutsya vid bilshih adres do menshih Yaksho vona opushena to vidbuvayetsya avtoinkrement Instrukciya STD pidnimaye cyu poznachku a CLD opuskaye Sistemni poznachki i pole IOPLSistemni poznachki registra EFLAGS kontrolyuyut operacijnu sistemu i pristroyi Voni ne mayut zminyuvatis prikladnoyu programoyu Funkciyi sistemnih poznachok IF Interrupt enable flag dozvil pererivannya bit 9 TF Trap flag pastka bit 8 Pidnimayetsya shob dozvoliti pokrokovij rezhim znevadzhennya Inakshe cej rezhim vidklyuchenij IOPL I O priviledge level field riven prioritetu vvodu vivodu biti 12 i 13 Chim menshe riven tim bilshe povnovazhen maye zadacha Cej riven mozhna modifikuvati instrukciyami POPF i IRET viklikanimi na nulovomu rivni NT Nested task vkladena zadacha bit 14 Kontrolyuye zv yazok perervanoyi i viklikanoyi zadachi RF Resume flag prodovzhennya bit 16 Kontrolyuye reakciyu procesora na viklyuchennya znevadzhennya VM Virtual mode virtualnij rezhim bit 17 Pidnimayetsya shob zapustiti rezhim virtualnogo 8086 Shob povernutis v zahishenij rezhim jogo opuskayut AC Alignment check perevirka virivnyuvannya bit 18 Shob vvimknuti perevirku virivnyuvannya pidnimit cej prapor i bit AM registra CR0 Shob vimknuti ce opustit odin z bitiv VIF Virtual interrupt flag bit 19 VIP Virtual interrupt pending bit 20 ID Identification bit 21 Zdatnist programi zmititi cyu poznachku oznachaye pidtrimku instrukcij CPUID Primitkiflag Anglijsko ukrayinskij slovnik z matematiki ta informatiki uklad Ye Mejnarovich M Kratko 2010 LiteraturaIntel Architecture Software Developer s Manual volume1 Basic Architecture Order Number 243190 Intel Architecture Software Developer s Manual volume3 System Programming Order Number 243192