Програмування текстової відеопам’яті у захищеному режимі.

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп’ютерів та комп’ютерних систем

Частина тексту файла (без зображень, графіків і формул):

Лабораторна робота № 2 ТЕМА: Програмування текстової відеопам’яті у захищеному режимі. МЕТА: Навчитись виводити текстову інформацію на екран комп’ютера у захищеному режимі роботи процесора шляхом програмування текстової відеопам’яті. Короткі теоретичні відомості Під час увімкнення комп’ютера, у процесорі автоматично встановлюється режим реальної адреси (реальний режим). Перехід у захищений режим здійснюється програмно. Оскільки багато деталей функціонування процесора в реальному і захищеному режимах істотно відрізняються, програми, призначені для захищеного режиму, повинні бути написані особливим чином. Реальний і захищений режими є несумісними. Розглянемо програму, яка у захищеному режимі виводить рядок символів з заданим атрибутом (колір символа і його фон) на монітор шляхом програмування текстової відеопам’яті комп’ютера. .386P ;Дозвiл трансляцiї привiлейованих команд ;Структура для опису дескрипторiв сегментiв descr struc limit dw 0 ;Межа (бiти 0..15) base_l dw 0 ;База, бiти 0..15 base_m db 0 ;База, бiти 16..23 attr_1 db 0 ;Байт атрибутiв 1 attr_2 db 0 ;Межа (бiти 16..19) i атрибути 2 base_h db 0 ;База, бiти 24..31 descr ends ;Сегмент даних data segment use16 ;16-розрядна програма ;Таблиця глобальних дескрипторiв GDT gdt_null descr <0,0,0,0,0,0> ;Селектор 0 - обов'язковий ;нульовий дескриптор gdt_data descr <data_size-1,0,0,92h,0,0> ;Селектор 8,сегмент даних gdt_code descr <code_size-1,0,0,98h,0,0> ;Селектор 16,сегмент команд gdt_stack descr <255,0,0,92h,0,0> ;Селектор 24, сегмент стеку gdt_scree descr <4095,8000h,0Bh,92h,0,0> ;Селектор 32,відеобуфер gdt_size=$-gdt_null ;Розмiр GDT pdescr dq 0 ;Псевдодескриптор для lgdt real_sp dw 0 ;Змiнна для збереження SP sym db 1 ;Символ для виведення на екран attr db 1eh ;Його атрибут mes db 27, '[31;42m Повернулися в реальний режим! ',27,'[0m$' data_size=$-gdt_null ;Розмiр сегменту даних data ends ;Кiнець сегменту даних ;Сегмент команд text segment 'code' use16 ;16-розрядна програма assume CS:text, DS:data main proc mov AX, data ;Iнiцiалiзацiя DS mov DS, AX ;у реальному режимi ;Знайдемо 32-бiтову лiнiйну адресу сегменту даних mov DL,0 shld DX,AX,4 shl AX,4 mov BX,offset gdt_data mov [BX]. base_l,AX mov [BX]. base_m,DL ;Знайдемо 32-бiтову лiнiйну адресу сегменту команд mov AX, CS mov DL,0 shld DX,AX,4 shl AX,4 mov BX,offset gdt_code mov [BX]. base_l,AX mov [BX]. base_m,DL ;Знайдемо 32-бiтову лiнiйну адресу сегменту стеку mov AX,SS mov DL,0 shld DX,AX,4 shl AX,4 mov BX,offset gdt_stack mov [BX]. base_l,AX mov [BX]. base_m,DL ;Пiдготуємо дескриптор i завантажимо регiстр GDTR mov BX,offset gdt_data ;Адреса GDT mov AX,[BX].base_l;Одержимо та занесемо у pdescr mov word ptr pdescr+2, AX ;базу, бiти 0..15 mov DL,[BX]. base_m;Одержимо i занесемо у pdescr mov byte ptr pdescr+4, DL ;базу, бiти 16..23 mov word ptr pdescr, gdt_size-1 ;Межа GDT lgdt pdescr ;Завантажимо регiстр GDTR ;Пiдготуємося до повернення в реальний режим mov AX, 40h ;Налаштуємо ES на область mov ES,AX ;даних BIOS mov word ptr ES:[67h],offset return;Зсув точки повернення mov ES:[69h],CS ;Сегмент точки повернення ;Пiдготуємося до переходу в захищений режим cli ;Заборона апаратних переривань mov AL,0Fh ;Вибiрка байту стану вiдключення out 70h,AL ;Порт КМОП-мiкросхеми mov AL, 0Ah ;Установка режиму вiдновлення out 71h,AL ;пiсля скидання процесора ;Перехід в захищений режим smsw AX ;Одержимо слово стану машини or AX,1 ;Встановимо бiт PE lmsw AX ;Запишемо слово стану ;Процесор працює в захищеному режимi ;Завантажуємо в CS:IP селектор:зсув точки continue db 0EAh ;Код команди far jmp dw offset continue ;Зсув dw 16 ;Селектор сегменту команд continue: ;Робимо щоб адресувалися данi mov AX,8 ;Селектор сегменту даних mov DS,AX ;Робимо щоб адресувався стек mov AX,24 ;Селектор сегменту стеку mov SS,AX ;Iніціалізуємо ES i виводимо символи mov AX,32 ;Селектор сегменту відеобуферу mov ES,AX mov BX,800 ;Початковий зсув на екранi mov CX,640 ;Кількість виведених символiв (циклів) mov AX,word ptr sym ;Початковий символ з атрибутом screen: mov ES:[BX],AX ;Вихiд у відеобуфер add BX,2 ;Зсунемося у вiдеобуферi inc AX ;Наступний символ loop screen ;Цикл виведення на екран ;Поверння ЦП у реальний режим mov real_sp,SP ;Збережемо SP mov AL,0FEh ;Команда скидання процесора out 64h,AL ;у порт 64h hlt ;Зупиняемо процесор до кiнця скидання ;Процесор працює в реальному режимi ;Вiдновлення операцiйного середовища реального режиму return: mov AX,data ;Вiдновимо адресуємість даних mov DS,AX mov SP,real_sp ;Вiдновимо адресуємість стеку mov AX,stk mov SS,AX sti ;Дозволимо апаратнi переривання mov AH, 09h ;Функцiя виведення на екран рядка mov DX, offset mes ;Адреса рядка int 21h mov AX, 4C00h ;Завершимо програму звичайним чином int 21h main endp ;Кiнець головної процедури code_size=$-main ;Розмiр сегменту команд text ends ;Кiнець сегменту команд stk segment stack 'stack' ;Початок сегменту стеку db 256 dup ('^') stk ends ;Кiнець сегменту стеку end main ;Кiнець програми Дескриптор gdt_screen описує відеосторінку 0 текстової відеопам’яті. Розмір відеосторінки, як відомо, складає 4096 байт, тому в поле межі записано число 4095. Базова фізична адреса відеосторінки відома (В8000h). Молодші 16 бітів бази (число 8000h) заповнюють слово base_l дескриптора, біти 16...19 (число 0Bh) – байт base_m. Біти 20...31 базової адреси рівні 0, оскільки відеобуфер розміщується в першому мегабайті адресного простору. Фрагмент програми mov AX,32 ;Селектор сегменту відеобуфера mov ES,AX mov BX,800 ;Початковий зсув на екранi mov CX,640 ;Кількість виведених символiв mov AX,word ptr sym screen: mov ES:[BX],AX ;Вихiд у відеобуфер add BX,2 ;Зсунемося у вiдеобуферi inc AX ;Наступний символ loop screen ;Цикл виведення на екран забезпечує циклічне виведення символа (змінна sym) з атрибутом 1eh (attr). ЗАВДАННЯ Розробити та відлагодити програму, яка: описує таблицю глобальних дескрипторів; описує дескриптори відеосторінки 0 текстової відеопам’яті, сегментів даних, сегменту команд, сегменту стеку програми; ініціалізує дескриптори, завантажує в регістр процесора GDTR дані про таблицю глобальних дескрипторів та переводить ЦП у захищений режим; виводить рядок символів (ПІБ студента, група) з атрибутом згідно варіанта: Номер варіанта Колір символа Колір фону   чорний білий   синій рожевий   червоний синій   фіолетовий жовтий   жовтий синій   фіолетовий жовтий   жовтий блакитний   зелений жовтий   фіолетовий сірий   синій блакитний   коричневий білий   зелений рожевий   фіолетовий синій   білий жовтий   синій зелений   коричневий жовтий   зелений блакитний   фіолетовий яскраво-білий   білий сірий   чорний салатовий   синій білий   червоний рожевий   білий блакитний   синій червоний   коричневий сірий   повертає процесор у реальний режим. ПИТАННЯ ДЛЯ САМОКОНТРОЛЮ Яка базова адреса текстової відеопам’яті? Скілький відеосторінок має текстова відеопам’ять? Яку інформацію зберігає дескриптор сегменту? Який об’єм (розмір) відеосторінки текстової відеопам’яті? Що таке таблиця глобальних дескрипторів? Чи можна модифікувати сегменти команд в захищеному режимі під час виконання програми? Яке призначення тіньових регістрів? Чи доступні вони програмісту? Що таке регістр таблиці глобальних дескрипторів? Які таблиці треба підготувати для виходу в захищений режим? У який спосіб можна повернутися з захищеного режиму до реального?
Антиботан аватар за замовчуванням

14.05.2018 22:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!