Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab7-2012.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
224.26 Кб
Скачать

Int 21h ; чекать введення з клавіатури

mov ax,3

Int 10h ; переключить відеоконтролер

;закінчення роботи програми (стандартно)

mov ax,4c00h

int 21h

  1. Етап 2. Підготовка системних структур даних для забезпечення функціонування механізму переривань

    1. Формування процедур обробки переривань

Процедури обробки переривань доцільно розмістить в окремому сегменті кодів. Для цілей проведення експериментів по ініціалізації захисту рекомендується, щоб кожна процедура обробки переривань виводила на екран номер вектора переривань, наприклад

Int_code segment para public 'code' use16

Assume cs:Int_code

Vector=0

I_beg:

Pusha

Mov ax,vector

Jmp common_int

I_end:

Proc_int_size = I_end - I_beg

; Процедура обробки 0-го переривання виділена виключно

; для автоматичного визначення її розміру (Proc_int_size)

;

;

Vector=1

Rept 255

pusha

Mov ax,vector

Jmp common_int

Vector = Vector + 1

Endm

;

Mes_int Db 'INTERUPT N'

;

common_int:

; формування номера переривання в Mes_int

mov cl,10

div cl; молодша цифра в ah

or ah,30h ;формування текстового коду цифри

mov bh,ah

xor ah,ah

div cl; середня цифра в ah, старша - в al

or ax,3030h ;формування текстового коду цифр

mov dx,ax

; виведення повідомлення на екран

push offset deskr_es; селектор дескриптора із 1-го етапу

pop es

mov si,offset Mes_int

mov cx,10

mov di,2620 ;початкова адреса для виведення

mov ah,07h ;атрибут символів

outstr:

mov al,CS:[si]

stosw

inc si

loop outstr

mov al,' '

stosw

mov al,dl ;старша десяткова цифра номера вектора

stosw

mov al,dh ;середня десяткова цифра номера вектора

stosw

mov al,bh ;молодша десяткова цифра номера вектора

stosw

; після виведення повідомлення організуємо передачу управління

; в основний сегмент для переключення в режим реальних адрес

; Для цього використаємо команду IRET

; В даній точці програми в стек записано вміст всіх регістрів, адреса

;команди, яка визвала виключення, та вміст регістра ознак.

; Ми все це проігноруємо і запишемо в стек нові дані

pushf

push offset descr_cs; селектор дескриптора сегмента

; кодів із 1-го етапу

push offset return_dos

iret; передача управління по адресі return_dos основного сегмента кодів

common_end:

Int_code_size =common_end - l_beg

Int_code ends

    1. Розміщення та формування дескриптора сегмента Int_code в gdt.

В відповідності з п.1.2.1. доповнимо сегмент GDT дескриптором сегменту Int_code .

deskr_Int_code descr <>

Основну програму доповнимо командами формування дескриптора сегмента Int_code

;Формування дескриптора сегмента Int_code

mov deskr_Int_code.limit_1,int_code_size ; розмір сегмента кодів

; формування фізичної адреси сегмента Int_code

xor eax,eax

mov ax, Int_code

shl eax,4 ;

mov dword ptr deskr_Int_code.base_1, eax

; атрибути сегмента Int_code

mov deskr_Int_code.attrib,code_seg

;--------------------------------------------------------

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]