敬业的IT人 >> 编程开发 >> 其他语言 >> 汇编源码--hdr

汇编源码--hdr

敬业的IT人 互联网 佚名 2008-2-19 16:12:19
    ·汇编源码--BRK
    ·汇编源码--CLOCK
    ·汇编源码--BURNOUT
    ·汇编源码--DOSSYM
    ·汇编源码--circle
    ·汇编源码--DEV
    ·汇编源码--getspace
    ·汇编源码--CLEAR
    ·汇编源码--col
    ·汇编源码--gameport
PAGE 60, 132 TITLE HDR 22-Feb-85 Device Driver Header | ;-----------------------------------------------------------------------| ; | ; Device Driver Library | ; Device Driver Header | ; | ;-----------------------------------------------------------------------| ; REVISION HISTORY | ; | ; Number DD-MMM-YY WHO WHY | ;-------|---------------|-----------------------|-----------------------| ; 0.0 | 22-Feb-85 | Frank Whaley | Initial Release | ;-----------------------------------------------------------------------| PAGE ;-----------------------------------------------------------------------| ; Equates | ;-----------------------------------------------------------------------| StkSiz EQU 2048 ; local stack size PAGE ;-----------------------------------------------------------------------| ; Group Selection | ;-----------------------------------------------------------------------| PGROUP Group PROG, TAIL DGROUP Group DATA, DTAIL PROG Segment Para Public 'PROG' PROG EndS DATA Segment Para Public 'DATA' ; define first DATA EndS Assume CS:PROG, DS:DATA, ES:DATA, SS:DATA PAGE ;-----------------------------------------------------------------------| ; Program Segment | ;-----------------------------------------------------------------------| PROG Segment Para Public 'PROG' Extrn Init:Near, MediaChe:Near, BuildBPB:Near Extrn IoCtlIn:Near, Input:Near, ndInput:Near Extrn InputSta:Near, InputFlu:Near, Output:Near Extrn OutVerif:Near, OutStatu:Near, OutFlush:Near Extrn IoCtlOut:Near, DevOpen:Near, DevClose:Near Extrn RemMedia:Near ORG 0 HDR Proc Far ;-----------------------------------------------------------------------| ; Device Header | ;-----------------------------------------------------------------------| DD -1 ; -> next device ; DW theAttribute ; you must enter attribute field DW 8000H ; character only device DW Strategy ; -> device strategy DW Interrupt ; -> device interrupt ; DB theName ; you must put something here DB "MON " ; mono ;-----------------------------------------------------------------------| ; Code Segment Variables | ;-----------------------------------------------------------------------| RHptr DD (?) ; -> Request Header ssEntry DW (?) ; entry SS spEntry DW (?) ; entry SP PAGE ;-----------------------------------------------------------------------| ; Device Strategy | ; | ; ENTRY : ES:BX -> Request Header | ; | ; EXIT : Request Header copied to ReqHdr | ; all registers preserved | ; | ;-----------------------------------------------------------------------| Strategy: MOV WordPtr CS:RHptr,BX ; save request header ptr MOV Word Ptr CS:RHptr + 2,ES PUSHF ; (+1) save the world PUSH ES ; (+2) PUSH DS ; (+3) PUSH SI ; (+4) PUSH DI ; (+5) PUSH CX ; (+6) PUSH BX ; (+7) MOV SI,BX MOV BX,ES MOV DS,BX ; DS:SI -> Request Header MOV BX,Offset PGROUP:TAIL MOV CL,4 SHR BX,CL MOV CX,CS ADD BX,CX MOV ES,BX MOV DI,Offset DGROUP:ReqHdr ; ES:DI -> ReqHdr CLD XOR CH,CH MOV CL,[SI] REP MOVSB ; copy Request Header POP BX ; (+6) restore POP CX ; (+5) POP DI ; (+4) POP SI ; (+3) POP DS ; (+2) POP ES ; (+1) POPF ; (+0) RET PAGE ;-----------------------------------------------------------------------| ; Device Interrupt | ; | ; ENTRY : anything | ; | ; EXIT : all registers preserved | ; | ;-----------------------------------------------------------------------| Interrupt: PUSH DS ; (+1) save the world PUSH ES ; (+2) PUSH AX ; (+3) PUSH BX ; (+4) PUSH CX ; (+5) PUSH DX ; (+6) PUSH SI ; (+7) PUSH DI ; (+8) PUSH BP ; (+9) MOV CS:ssEntry,SS ; save entry SS MOV CS:spEntry,SP ; and SP MOV AX,Offset PGROUP:TAIL ; set our DS, SS, BP, and SP MOV CL,4 SHR AX,CL MOV CX,CS ADD AX,CX MOV BX,Offset DGROUP:MyStack MOV DS,AX MOV ES,AX MOV SS,AX MOV SP,BX MOV BP,BX ; ; call our function ; MOV AL,ReqHdr + 2 ; AL = Command Code SHL AL,1 CBW MOV SI,Offset DGROUP:FuncTab ADD SI,AX CALL Word Ptr [SI] ; ; copy back Request Header ; LES DI,RHptr ; ES:DI -> original space MOV SI,Offset DGROUP:ReqHdr ; DS:SI -> our (updated) copy CLD XOR CH,CH MOV CL,[SI] REP MOVSB ; copy Request Header MOV SS,CS:ssEntry ; restore original stuff MOV SP,CS:spEntry POP BP ; (+8) restore POP DI ; (+7) POP SI ; (+6) POP DX ; (+5) POP CX ; (+4) POP BX ; (+3) POP AX ; (+2) POP ES ; (+1) POP DS ; (+0) RET HDR EndP PROG EndS TAIL Segment Public 'PROG' ; for finding end of code segment TAIL EndS PAGE ;-----------------------------------------------------------------------| ; Data Segment | ;-----------------------------------------------------------------------| DATA Segment Para Public 'DATA' Public ReqHdr DB StkSiz DUP (?) ; our stack, overflows into code MyStack Label Word FuncTab Label Word DW Offset PGROUP:Init DW Offset PGROUP:MediaChe DW Offset PGROUP:BuildBPB DW Offset PGROUP:IoCtlIn DW Offset PGROUP:Input DW Offset PGROUP:ndInput DW Offset PGROUP:InputSta DW Offset PGROUP:InputFlu DW Offset PGROUP:Output DW Offset PGROUP:OutVerif DW Offset PGROUP:OutStatu DW Offset PGROUP:OutFlush DW Offset PGROUP:IoCtlOut DW Offset PGROUP:DevOpen DW Offset PGROUP:DevClose DW Offset PGROUP:RemMedia ReqHdr DB 256 DUP (?) ; copy of Request Header DATA EndS DTAIL Segment Public 'DATA' ; for finding end of data segment DTAIL EndS END HDR ; of HDR.ASM 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com