{ який записаний з кодом, який прочитаний}
jnz @6 { Якщо коди не рiвнi, тобто адреса бiльше }
нiж ємність пам'ятi комп'ютера - закiнчити аналiз пам'ятi }
db 66h,43h { INC EBX - збiльшення на 1 адреси поточної }
db 67h { комiрки пам'ятi }
loop @5 { i перехiд до її аналiзу }
@6:db 66h
mov word ptr mem_size,bx { Запис в mem_size з EBX }
end;{know_mem_size} { значення знайденого розмiру пам'ятi }
begin
clrscr;
{-----------------------------Визначення типу мiкропроцесора----------------------------------}
get_cpu_type(0,cpu_type); { В cpu_type - номер типу МП }
{---------------------------------Формування таблицi GDT---------------------------------------}
{ Нуль-дескриптор: }
init_gdt(0,0,0,0,0);
{ Дескриптор сегмента коду: }
init_gdt(1,$ffff,lin_adr(cseg,0),acc_code,0);
{ Дескриптор сегмента даних: }
init_gdt(3,$ffff,lin_adr(dseg,0),acc_data,0);
{ Дескриптор сегмента стека: }
init_gdt(4,0,lin_adr(sseg,0),acc_stack,0);
{ Дескриптор сегмента вiдеопам'ятi: }
init_gdt(5,4000-1,lin_adr($b800,0),acc_data,0);
{ Дескриптор сегмента розширеної пам'ятi: }
init_gdt(6,$fffff,1024*1024,acc_data,$80);
{-----------------Формування даних регістра GDTR i його завантаження----------------}
init_gdtr;
{------------------------Пiдготовка до повернення в реальний режим-----------------------}
{------------------через скидання мiкропроцесора (тiльки для МП 80286)----------------}
if cpu_type=2 then begin
asm { В змiнну ofs_ret заноситься змiщення }
mov ofs_ret,offset ret_r { мiтки повернення }
end; { в реальний режим ret_r }
save_ret_real(Cseg,ofs_ret,$A); { Процедура забезпечує }
end; { перехiд на мiтку ret_r пiсля скидання МП }
{--------------------Заборона маскуємих i немаскуємих переривань-------------------------}
not_int;
{-----------------------Зберiгання змiсту регiстрiв DS, SS, ES i SP---------------------------}
save_sreg;
real_sp:=SPtr;
if cpu_type=2 then
{------------------------Перехiд в захищений режим для МП 80286---------------------------}
asm { Установка біта PE = 1 в регiстрi MSW: }
db 0fh,01h,0e0h { SMSW AX }
or ax,1
db 0fh,01h,0f0h { LMSW AX }
end else
{-------------------Перехiд в захищений режим для МП 80386 i вище----------------------}
asm { Установка біта PE = 1 в регiстрi управлiння CR0: }
db $0f,$20,0c0h { MOV EAX,CR0 }
db 66h,0dh { OR EAX,1 }
dd 1h
db $0f,22h,0c0h { MOV CR0,EAX }
end;
asm
jmp @prot { Перехiд для очистки буфера команд МП }
{-----------------------------------Робота в захищеному режимi---------------------------------}
{ Завантаження сегментних регiстрiв }
@prot:mov ds,data_sel { DS }
mov ss,stack_sel{ SS }
mov es,video_sel { i ES вiдповiдними селекторами }
{------------------------------------Виведення на екран рядка-------------------------------------}
call out_screen;
cmp cpu_type,2
jnz @mem
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.