save_ret_real: фоpмування даних для повернення в реальний режим;
not_int: заборона зовнiшнiх переривань;
en_int: дозвiл зовнiшнiх переривань;
set_unr : установлення режиму "Unreal";
save_sreg : зберiгання сегментних регiстрiв в пам'ятi;
reset : скидання МП командою контролера клавiатури;
test_wr : перевiрка заборони запису в сегмент коду;
init_tss_286 : фоpмування TSS для МП 80286;
init_tss_386 : фоpмування TSS для МП 80386 i вище;
get_cpu_type : визначення типу мiкpопpоцесоpа;
exc_00-exc_18: обpобники виключень 0-18;
PIC_1, PIC_2 : обpобники-заглушки апаpатних маскуємих пеpеpивань;
keyb : обpобник пеpеpивання вiд клавiатуpи;
int_30h : обpобник програмного пеpеpивання з номером 30h.
4.11.4. Текст програми P_MODE
program p_mode;
uses CRT,prot; { Модуль prot мiстить константи, типи змiнних, }
{ змiннi, пpоцедуpи i функцiї для роботи МП в захищеному режимi }
label ret_r; { Точка повеpнення в pеальний режим }
const s:string=
'Робота в захищеному режимi: визначення розмiру пам'ятi';
var
mem_size:longint; { Розмiр оперативної пам'ятi }
procedure out_screen;assembler; { Виведення на екран рядка }
{ для МП 80286 - "Робота в захищеному режимi"; }
{ для 80386 i вище - "Робота в захищеному режимi: }
{ визначення розмiру пам'ятi" }
asm
mov ax,3 { AX - номер рядка екрана }
mov bx,10 { BX - номер стовпця екрана }
xor cx,cx
cmp cpu_type,2
jnz @3
mov cl,26 { Скорочена довжина рядка s для МП 80286 }
jmp @4
@3:mov cl, [offses] { Довжина рядка s }
@4:mov si,offset s { Адреса рядка в пам'ятi }
mov dl,80 { DL - число стовпцiв екрана }
mul dl
add ax,bx
shl ax,1
mov di,ax { ES:DI - адреса рядка у вiдеопам'ятi }
mov ah, 30h { AH - вiдео-атрибут рядка }
@wxy:lodsb { Читання символу рядка з пам'ятi }
stosw { Виведення символу рядка на екран }
loop @wxy
end;{out_screen}
procedure know_mem_size;assembler;
asm { Визначення ємності ОП (в кбайт) }
db 66h { Очистка EBX }
xor bx { В EBX - адреса поточної комiрки пам'ятi }
db 6h { Очистка ECX }
cx,cx { ECX - лiчильник циклiв звернення до пам'ятi }
mov al,0aah { В AL - код, який записується в пам'ять }
mov ax,mem_sel
db 8eh,0e8h { MOV GS,AX - завантаження регістра GS }
{ селектором сегмента розширеної пам'ятi }
@5:db 65h { префiкс GS: вибiр сегмента GS }
db 67h { префiкс AS: розряднiсть адреси - 32 }
db 8ah,13h { MOV DL,[EBX] - читання даних комiрки }
db 65h,67h,8,03h { GS:AS:MOV [EBX],AL - запис коду }
db 65h,67h,8a,23h { GS:AS:MOV AH,[EBX] - читання коду }
db 65h,67h,88,13h { GS:AS:MOV [EBX],DL - запис даних }
cmp ah,al { Порiвняння коду, }
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.