Локальные сети персональных компьютеров Использование протоколов IPX, SPX, NETBIOS


Точка входа API драйвера IPX/SPX - часть 3


; =================================================== ; Листинг 2. Инициализация и вызов драйвера IPX/SPX ; Файл ipxdrv.asm ; ; (C) A. Frolov, 1993 ; ===================================================

.286 .MODEL SMALL ; --------------------------------------- ; Структура для вызова драйвера IPX/SPX ; ---------------------------------------

IPXSPX_REGS struc rax dw ? rbx dw ? rcx dw ? rdx dw ? rsi dw ? rdi dw ? res dw ? IPXSPX_REGS ends

.DATA

; Точка входа в драйвер IPX/SPX

_ipxspx_drv_entry dd ?

.CODE

PUBLIC _ipxspx_entry, _ipx_init PUBLIC _ipxspx_drv_entry

; --------------------------------------- ; Процедура, вызывающая драйвер IPX/SPX ; ---------------------------------------

_ipxspx_entry PROC FAR

; Готовим BP для адресации параметра функции

push bp mov bp,sp

; Сохраняем регистры, так как драйвер IPX/SPX ; изменяет содержимое практически всех регистров

push es push di push si push dx push cx push bx push ax

; Загружаем регистры из структуры, ; адрес которой передается как параметр

push ds mov bx, [bp+6] ; смещение mov ds, [bp+8] ; сегмент mov es, ds:[bx].res mov di, ds:[bx].rdi mov si, ds:[bx].rsi mov dx, ds:[bx].rdx mov cx, ds:[bx].rcx mov ax, ds:[bx].rax mov bx, ds:[bx].rbx pop ds

; Вызываем драйвер IPX/SPX

call [dword ptr _ipxspx_drv_entry]

; Сохраняем регистры

push ds push dx mov dx, bx

; Записываем в структуру содержимое регистров после вызова драйвера

mov bx, [bp+6] ; смещение mov ds, [bp+8] ; сегмент mov ds:[bx].rax, ax mov ds:[bx].rcx, cx mov ds:[bx].rbx, dx pop dx mov ds:[bx].rdx, dx pop ds

; Восстанавливаем регистры

pop ax pop bx pop cx pop dx pop si pop di pop es

pop bp retf _ipxspx_entry ENDP

; --------------------------------------------- ; Процедура инициализации драйвера IPX/SPX ; ---------------------------------------------

_ipx_init PROC NEAR push bp mov bp,sp

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

mov ax, 7a00h int 2fh

; Если драйвера нет, завершаем процедуру

cmp al, 0ffh jne _ipx_init_exit

; Сохраняем адрес точки входа




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



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