庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>汇编语言>相关源码>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

汇编的的各类源码--hdr

 作者:本站收集   日期:2005-8-1 15:39:09
字号选择〖 〗/ 双击滚屏 单击停止   
        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     Word Ptr 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

上一篇:汇编的的各类源码--inthand    下一篇:汇编的的各类源码--getspace  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-1 15:39:09
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿