Частина 14: Прапори
Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
Тема прапорів є однією з найбільш складних і складних концепцій мови збірки та управління потоком програми при відтворенні інженерії. Інформація нижче стане більш чіткою, коли ми увійдемо у фінальну фазу нашої підготовки, коли ми відтворюємо застосування C у мову збірки. Що важливо тут — це те, що прапори допомагають контролювати, перевірювати та підтверджувати виконання програми та є механізмом визначення того, чи кожна операція, виконувана процесором, була успішною чи ні. Прапори є критичними для застосувань мови збірки, оскільки вони є перевіркою для підтвердження успішної реалізації кожного програми. Ми працюємо з 32-бітною мовою збірки, в якій існує єдиний 32-бітний регістр, який містить групу статусу, управління та системних прапорів. Цей регістр називається регістром EFLAGS, оскільки він містить 32 біти інформації, які відображають конкретні прапори інформації. Є три види прапорів: статусні прапори, прапори управління та системні прапори. Статусні прапори такі:
CF: Прапор перенесення
PF: Прапор парності
AF: Прапор регулювання
ZF: Прапор нуля
SF: Прапор знака
OF: Прапор переповнення
Прапор перенесення встановлюється, коли математична операція над не підписаним цілим числом створює перенесення або позичку для найбільш значущої цифри. Це стан надлишку для регістра, який бере участь у математичній операції. Коли це відбувається, залишкова інформація в регістрі не є правильним рішенням математичної операції. Прапор парності використовується для вказівки корумпованої інформації як результату математичної операції в регістрі. Коли перевірений, прапор парності встановлюється, якщо загальна кількість 1-бітів у результаті є парною, і очищується, якщо загальна кількість 1-бітів у результаті є непарною. Коли перевірений прапор парності, застосунок може визначити, чи регістр був корумпований після операції. Прапор регулювання використовується в бінарних операціях з десятковою системою числення і встановлюється, якщо відбувається перенесення або позичка операція від біт 3 регістра, який використовується для розрахунку. Прапор нуля встановлюється, якщо результат операції є рівним нулю. Прапор знака встановлюється до найбільш значущої цифри результату, яка є знаковою цифрою і вказує, чи результат позитивний чи негативний. Прапор переповнення використовується в підписаних цілих числах арифметики, коли позитивне значення є занадто великим або негативне значення занадто малим для представлення в регістрі. Прапори управління використовуються для управління певним поведенням процесора. Прапор DF, який є прапором напрямку, використовується для управління тим, як обробляються strings процесором. Коли встановлений, строкові інструкції автоматично зменшують адреси пам'яті, щоб отримати наступний байт в рядку. Коли очищено, рядові інструкції автоматично збільшують адреси пам'яті, щоб отримати наступний байт рядка. Системні флаги використовуються для керування операціями рівня операційної системи, які ніколи не повинні бути змінені жодним відповідним програмним забезпеченням або застосунком. TF: Прапор захоплення
IF: Прапор включення переривання
IOPL: Прапор рівня привілеїв I/O
NT: Прапор вкладеної задачі
RF: Прапор відновлення
VM: Прапор режиму Virtual-8086
AC: Прапор перевірки відповідності
VIF: Прапор віртуального переривання
VIP: Прапор очікування віртуального переривання
ID: Прапор ідентифікації
Прапор захоплення встановлюється для включення режиму однокрокової обробки і коли в цьому режимі процесор виконує лише одне кодове слово в час, чекаючи сигналу виконати наступне кодове слово. Це необхідно при відладці. Прапор включення переривання керує тим, як процесор відповідає на сигнали, отримані з зовнішніх джерел. Прапор рівня привілеїв I/O вказує на рівень привілеїв вхідно-вивідного доступу поточного виконуваного завдання і визначає рівні доступу до простору адрес вхідно-вивідного доступу, які повинні бути менше або рівні рівні доступу, необхідному для доступу до відповідного простору адрес. У випадку, коли він не менше або рівний рівні доступу, необхідному для доступу, будь-яка спроба доступу до простору адрес буде відхилена. Прапор вкладеної задачі керує тим, чи є поточне виконуване завдання зв'язане з попередньо виконуваною задачею і використовується для ланцюгової обробки перериваних і викликаних завдань. Прапор відновлення керує тим, як процесор відповідає на винятки при відладці. Прапор VM вказує, що процесор працює в режимі virtual-8086 замість захищеного або реального режиму. Прапор перевірки відповідності використовується в поєднанні з бітом AM в реєстрі контролю CR0 для включення перевірки відповідності пам'яті посилань. Прапор віртуального переривання реплікує прапор IF, коли процесор працює в віртуальному режимі. Прапор очікування віртуального переривання використовується, коли процесор працює в віртуальному режимі, щоб вказувати, що відбувається переривання. Прапор ідентифікації вказує, чи підтримує процесор інструкцію CPUID. У нашому наступному навчанні ми обговоримо стек.