Програма, що модифікує деякі команди для того, щоб вони могли працювати в захищеному режимі роботи мікропроцесора. Вимоги до надійності, маркування і пакування. Умови експлуатації. Стадії і етапи розробки програми. Опис і розробка алгоритму рішення.
Аннотация к работе
Програмний виріб це програма, що модифікує деякі команди, для того, щоб вони могли працювати в захищеному режимі. Програмний виріб орієнтований на компютери серії ІВМ PS сумісних ПЭВМ, що використовують мікропроцесори 80286, 80386 і 80486. Програмний виріб повинний забезпечувати, модифікацію команд для того, щоб вони могли працювати в захищеному режимі роботи мікропроцесора. Вимоги до надійності : Програмний виріб повинний стійко функціонувати в апаратному і програмному середовищі, обговореному в п.4 Умови експлуатації : Умови експлуатації програмного виробу цілком визначаються умовами експлуатації застосованих технічних засобів і носіїв даних.Чи виконується ця команда на даному мікропроцесорі можна визначити за допомогою біта ID (21) регістра EFLAGS: якщо програмно стан цього біта можна змінити, значить команда CPUID виконується. У реальному режимі для опису атрибутів сегмента дескриптор не потрібно, тому що базова адреса сегмента (зменшений у 16 разів) зберігається в сегментному регістрі, границя сегмента (64 Кб - 1) фіксована і завжди може бути зроблений доступ (запис і читання) до сегмента. Формат дескриптора сегмента для МП починаючи з 80386, що має наступні полючи : Границя сегмента, рівна розміру сегмента, зменшеному на 1, і його базову адресу займають у дескрипторі по двох полючи : границя - байти 0,1 і молодші 4 розряди байта 6, базовий адреса - байти 2-4 і 7 дескриптора сегмента. ED (Expand Down) - біт напрямку розширення визначає, як буде вказуватися границя сегмента даних: при ED=0 (расширение нагору) дані в сегменті розміщаються в напрямку зростання адрес від базової адреси сегмента до його границі, зазначеної в дескрипторі; при ED=1 (расширення униз) дані в сегменті розташовуються в напрямку зменшення адрес. Якщо сегмента, до якого виконується звертання, немає в памяті (P=0), виробляється відповідне переривання, і операційна система, обробляючи це переривання, зчитує цей сегмент із магнітного диска в память.
План
Зміст
Вступ
1. Підстава для розробки.
2. Призначення розробки.
3. Вимоги до програмного виробу.
3.1 Вимоги до функціональних характеристик.
3.2 Вимоги до надійності.
3.3 Умови експлуатації.
3.4 Вимоги до маркування і пакування.
3.5 Вимоги до транспортування і збереження.
Вимоги до складу і параметрів технічних засобів.
Вимоги до програмної документації.
Техніко-економічні показники.
Стадії і етапи розробки.
Порядок контролю і приймання.
Уведення
Список литературы
Опис змінних.
Змінна Тип Призначення
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 Шеснадцятирічне значення чисел.
Методичні вказівки "Робота з машинними кодами і прямою доступ до памяті і портів у мові Turbo Pascal 7.0" 1993р. Ф.А. Домнін И.С. Зиков.
Міністерство Освіти і Науки України
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра : “ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”
ЗАТВЕРДЖУЮ
Зав. Кафедрою О.Т.П.
___________ /xxxxxxx./
_________________ 2002р.
Програма модифікуюча команди, які використовуються в захищеному режимі
Текст програми
ЛИСТ ЗАТВЕРДЖЕННЯ
Xxxxxx- 01 12 01-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="Обработка прерываний в защищенном режиме";
while table[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=2 then t:=0 { 16-разрядный МП } else t:=8; { 32-разрядный МП }
{ Формирование байта доступа прерывания: } acc_int:=present OR type_int OR t;
{ Формирование байта доступа ловушки: } acc_trap:=present OR type_trap OR t;
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=2 then
{--------Переход в защищенный режим для МП 80386 и выше-----} asm { Установка бита PE=1 в регистре управления CR0: } db 0fh,20h,0c0h { MOV EAX,CR0 } db 66h,0dh { OR EAX,1 } dd 1h db 0fh,22h,0c0h { MOV CR0,EAX } end;
asm db 0eah { Межсегментный переходна метку @prot } dw offset @prot { для очистки буфера команд МП } dw code_sel { и загрузки регистра CS }
@prot:mov ds,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
{---------------Восстановление атрибутов IDT----------------} db 0fh,01h,1eh { LIDT idtr_r } dw idtr_r
{-------Возврат в реальный режим по команде MOV-------------} db 0fh,20h,0c0h { MOV EAX,CR0 } db 66h,25h { AND EAX,FFFFFFFEH } dd 0fffffffeh db 0fh,22h,0c0h { MOV CR0,EAX } mov bx,offset ofs_ret db 0ffh { Косвенный межсегментный переходна метку ret_r } db 2fh { для очистки буфера команд МП и загрузки CS }
if res=0 then test_wr; { Если запрет сохранился - }
{ вырабатывается прерывание 13, обработчик которого }
{ с помощью процедуры reset сбрасывает МП }
{----------Размаскирование контроллеров прерываний----------} port[$21]:=0; { первого КП } port[$a1]:=0; { и второго КП }
{-----Разрешение маскируемых и немаскируемых прерываний-----} en_int;
{-------------Проверка возникновения исключений-------------} if excep$ff then {if excep=11 then writeln("Обработано исключение 11 (селектор ", err shr 3,")") else} writeln("Исключение ",excep);
{----------Анализ возврата МП из защищенного режима---------} if res=0 then s:="по команде MOV" else s:="через сброс МП";
writeln("Возврат из защищенного режима выполнен ",s);