74 lines
1.1 KiB
NASM
74 lines
1.1 KiB
NASM
% MODEL MEM_MOD
|
|
|
|
CODESEG
|
|
|
|
;PUBLIC __pex_dummy , __pex_set_pex_ds , __pex_set_pb_ds
|
|
PUBLIC _CallPEX
|
|
|
|
PROC _CallPEX
|
|
ARG p:PTR
|
|
|
|
push bp
|
|
mov bp,sp
|
|
|
|
les bx,[p]
|
|
|
|
mov ax,[es:bx+2] ; Get segment of function
|
|
or ax,ax
|
|
jz @@no_func
|
|
|
|
push ds
|
|
push [bp+16]
|
|
push [bp+14]
|
|
push [bp+12]
|
|
push [bp+10]
|
|
|
|
mov ds,[es:bx+4]
|
|
|
|
call [dword ptr es:bx]
|
|
|
|
add sp,8
|
|
pop ds
|
|
|
|
@@no_func:
|
|
pop bp
|
|
ret
|
|
ENDP _CallPEX
|
|
|
|
|
|
;PROC __pex_dummy
|
|
; ret
|
|
;ENDP __pex_dummy
|
|
;
|
|
;PROC __pex_set_pex_ds
|
|
; push bp
|
|
; mov bp,sp
|
|
; mov bx,[bp+6]
|
|
; mov ds,bx
|
|
; pop bp
|
|
; ret
|
|
;ENDP __pex_set_pex_ds
|
|
;
|
|
;PROC __pex_set_pb_ds
|
|
; push bp
|
|
; mov bp,sp
|
|
;
|
|
; mov bx,@Data
|
|
; mov ds,bx
|
|
; mov bx,[bp+6]
|
|
; mov cx,[bp+8]
|
|
; or bx,bx
|
|
; or bx,cx
|
|
; jz @@no_set
|
|
;
|
|
; pop bp
|
|
; ret
|
|
;
|
|
;@@no_set:
|
|
; xor ax,ax ; So PEX_RET returns NOT_HANDLED
|
|
; pop bp
|
|
; ret
|
|
;ENDP __pex_set_pb_ds
|
|
;
|
|
END
|