Протоколы Internet




Сетевые драйверы - часть 7


/p>

.CODE

PUBLIC

_INFACE

_INFACE

PROC

NEAR

CLD

MOV DFLAG, 0

; Очистка флага драйвера

MOV _PARAM.ER_CODE, 0

; Очистка флага ошибки

PUSH BP

; Спасение регистров

MOV BP, SP

PUSH SI

PUSH DI

PUSH ES

PUSH DS

MOV CX, 32

MOV AL, 60H

; Установка начального номера прерывания

LEA SI, _PARAM.LINTN

; Формирование указателя на список номеров прерывания

CHECK:

PUSH AX

PUSH CX

PUSH SI

CALL CHK_INT

POP SI

POP CX

MOV byte ptr [SI], 0 ;

JNE NO_SIGNATURE

INC DFLAG

; Установка флага <Это драйвер>

MOV BYTE PTR [SI], 1

; Установка флага наличия

NO_SIGNATURE:

POP AX

INC AL

; Следующий номер прерывания

INC SI

; Актуализация указателя

LOOP CHECK

CMP DFLAG, 0

; Драйвер присутствует?

JNE HAVE_SIGNATURE

MOV _PARAM.ER_CODE, 271

; Установка флага <No signature>

JMP OKAY

INT_PKT:

PUSH ES

pushf

cli

call _PARAM.HANDLER

POP ES

RET

CHK_INT:

PUSH ES

; AL = номер прерывания

PUSH DI

MOV AH, 35H

; Получение вектора прерывания

INT 21H

; ES:BX=seg:offs драйвера

MOV _PARAM.HANDLER.OFFS,BX

; Записываем адрес драйвера

MOV _PARAM.HANDLER.SEGM, ES

LEA DI, 3[BX]

; Устанавливаем смещение сигнатуры драйвера

MOV SI, OFFSET SIGNATURE

; Проверка сигнатуры драйвера

MOV CX, SIGNATURE_LEN

; Присутствует ли здесь драйвер?

REPE CMPSB ; DS:[SI] - ES:[DI]

<


Содержание  Назад  Вперед