Протоколы Internet


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


/p>


 

POP DI

 

POP ES

 

RET


HAVE_SIGNATURE:

 

MOV CX, 32

; Установка начального значения счетчика

 

LEA SI, _PARAM.LINTN

; Устанавливаем указатель списка

 

MOV AL, 60H

; Задаем начальный номер прерывания

CHOICE:

CMP BYTE PTR [SI], 0

 

 

JNE SETDRV

 

 

INC AL

 

 

LOOP CHOICE

 


SETDRV:

MOV AH, 35H

 

 

INT 21H

 

 

MOV _PARAM.HANDLER.OFFS,BX

; Определяем адрес драйвера

 

MOV _PARAM.HANDLER.SEGM, ES

 


 

PUSH DS

 

 

POP ES

 

 

MOV CX, EADDR_LEN

 

 

MOV SI, OFFSET ETHER_ADDR

 

 

MOV DI, OFFSET ETHER_BDCST

 

 

REPE CMPSB

 

 

JE GET_MODE

; Адрес не определен


 

MOV AH, 25

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

 

MOV DI, offset ETHER_ADDR

 

 

MOV CX, EADDR_LEN

 

 

call int_pkt

 

 

MOV _PARAM.ER_CODE, DX

; Устанавливаем код ошибки

 

JMP OKAY

 

GET_MODE:

 

MOV SAFE, DS

; Спасаем DS

 

PUSH DS

 

 

MOV AH, 2

; Открываем доступ пакетам

 

MOV AL, 1

; Класс интерфейса

 

MOV BX, -1

; Тип интерфейса

 

MOV DL, 0

; Номер интерфейса

 

MOV CX, 2

; Используем длину type = 2

 

MOV SI, OFFSET BOGUS_TYPE

 

 

PUSH CS

; ES:DI -> Receiver.

 

POP ES

 

 

MOV DI, OFFSET RECEIVER

 

 

call INT_PKT

 

 

JNC $_$

 

 

MOV _PARAM.ER_CODE, DX

; Устанавливаем код ошибки

$_$:

MOV _PARAM.HANDLES, AX

; Записываем указатель-Handle


 

MOV AH, 6

; Определяем ethernet-адрес интерфейса

 

PUSH DS

 

 

POP ES

 

 

MOV DI, offset _PARAM.ETHER_ADR

 

 

MOV CX, EADDR_LEN

 

 

MOV BX, _PARAM.HANDLES

 

 

call int_pkt

 

 

JNC NOBAD

 

 

MOV _PARAM.ER_CODE, 273

; Ошибка при определении Ethernet-адреса

 

POP DS

 

 

JMP OKAY

 

<


Начало  Назад  Вперед



Книжный магазин