тавши нулі). Сам алгоритм такий:
1. Ініціалізувати лічильник.
2. Зберегти в регістрі значення з пам'яті за адресою [лічильник].
3. Записати в пам'ять тестове значення (у нашому випадку це буде AAh)
4. Читати всі з пам'яті.
5. Відновити старе значення за цією адресою.
6. Порівняти записане і прочитане значення.
7. Якщо рівні - лічильник = лічильник +1, якщо ні - вихід з циклу.
8. JMP пункт 2.
На перший погляд все дуже просто, при практичній же реалізації наведеного алгоритму виникає безліч проблем: по-перше сама програма яка вважає пам'ять розташована в цій самій пам'яті і рано чи пізно вона сама себе перезапише тестовим значенням. Цей нюанс зазвичай вирішується так: програма виконується в реальному режимі в межах першого мегабайта, рахунок же починається з адрес вище мегабайта. p align="justify"> Цей метод породжує іншу проблему - в реальному режимі безпосередньо доступний тільки цей самий один мегабайт. Ця проблема вирішується шляхом застосування В«нереальногоВ» режиму, він же Big real-mode. p align="justify"> Як відомо в процесорі кожен сегментний регістр має приховані або тіньові (shadow parts) частини, в яких в захищеному режимі кешируєтся дескриптор сегмента, для програміста вони невидимі. У захищеному режимі ці частини оновлюються щоразу, коли в сегментний регістр завантажується нове значення, в реальному ж режимі оновлюються тільки поля базової адреси сегмента. Якщо в захищеному режимі створити сегмент з лімітом у 4Гб і завантажити в сегментний регістр такий селектор, після чого перейти в реальний режим, і, не дотримуючись рекомендацій Intel, залишити межа рівним 4Гб - значення ліміту сегмента збережеться, дозволяючи використовувати 32-бітові зміщення. Алгоритм переходу в нереальний режим:
1. Створити дескриптор з базою рівною 0.
2. Встановити межа сегмента в 4Гб.
3. Переключитися в захищений режим.
4. Завантажити селектор сегмента в якій-небудь сегментний регістр.
5. Переключитися в реальний режим.
Після цих дій можна в реальному режимі використовувати конструкції типу:
ax, word ptr fs: [edx]
Де EDX може змінюватися від нуля до 4Гб не викликаючи жодних винятків захисту (в В«справжньомуВ» реально...