{----------Повернення в реальний режим-через скидання мiкропроцесора------------}
{----------------------------------------для МП 80286--------------------------------------------------}
mov al,$fe { Команда контролера клавiатури, яка }
out $64,al { визиває скидання мiкропроцесора }
@wait_res: { Очикування пiд час скидання МП }
hlt
jmp @wait_res
{-------------------Визначення ємності оперативної пам'ятi комп'ютера------------------}
@mem:call know_mem_size
{---------Пiдготовка до повернення в реальний режим за командою MOV------------}
{--------------------------------------для МП 80386і вище-------------------------------------------}
{------------------------Вiдновлення параметрiв сегментiв DS, SS i ES----------------------}
@mov:mov ax,data_sel
mov ds,ax
mov ss,ax
mov es,ax
{---------------------Повернення в реальний режим за командою MOV--------------------}
db $0f,$20,0c0h { MOV EAX,CR0 }
db 66h,25h { AND EAX,FFFFFFFEh }
dd 0fffffffeh
db $0f,22h,0c0h { MOV CR0,EAX }
jmp ret_r
{--------------------------------------Робота в реальному режимi----------------------------------}
ret_r:
xor ax,ax { Вiдновлення регiстрiв пiсля }
mov ds,ax { повернення в реальний режим: }
mov ds,ds:[4*$60] { DS, }
mov ss,real_ss { SS, }
mov es,real_es { ES i }
mov sp,real_sp { SP }
end;
{-------------------------Дозвiл маскуємих i немаскуємих переривань-----------------------}
en_int;
if cpu_type>2 then writeln ('Розмiр оперативної пам'ятi : ',
mem_size shr 10+1024,' кбайт');
readkey
end.
4.11.4 Текст модуля PROT
unit prot;
interface
uses CRT;
const
hex_tabl:array[0..15] of char='0123456789ABCDEF';
{-----------------------------Селектори дескpиптоpiв сегментів---------------------------------}
code_sel =$08; { сегмента коду програми }
code_sel2 =$10; { сегмента коду модуля }
data_sel:word =$18; { сегмента даних }
stack_sel:word =$20; { сегмента стека }
video_sel:word =$28; { сегмента вiдеопам'ятi }
mem_sel:word =$30; { сегмента розширеної пам'ятi }
task_sel =$38; { задачі task }
task_1_sel =$40; { задачі task_1 }
task_2_sel =$48; { задачі task_2 }
keyb_sel =$50; { задачі keyb }
main_sel:word=$58; { задачі main }
{---------------------------------Бiти байта доступу сегментiв-------------------------------------}
present =$80; { сегмент є в пам'ятi (P=1) }
nosys =$10; { сегмент несистемний (S=1) }
exe =$08; { сегмент виконуємий (E=1) }
down =$04; { сегмент розширяється вниз (D=1) }
write =$02; { дозволений запис (W=1) }
read =$02; { дозволене читання (R=1) }
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.