汇编语言编写DOS下的内存驻留程序
2007-04-25 09:29:48 来源:WEB开发网核心提示: >大多硬件中断如INT 13H,INT 0BH和INT 0CH等都是不可重往返.如果设置一引起寄存器,而在此时被TSR打断,执行类似的设置 ,就会出现非常情况,端口是不会自动保持值的.在进入这些中断时设置一个进入的标志,如果TSR检查到标志已置,则不调用相应的中断. >最好也不要重入INT 10H,I
>大多硬件中断如INT 13H,INT 0BH和INT 0CH等都是不可重往返.如果设置一引起寄存器,而在此时被TSR打断,执行类似的设置 ,就会出现非常情况,端口是不会自动保持值的.在进入这些中断时设置一个进入的标志,如果TSR检查到标志已置,则不调用相应的中断.
>最好也不要重入INT 10H,INT 25H,和INT 26H中断.在进入这些中断时设置一个进入的标志,如果TSR检查到标志已置,则不调用 相应的中断.
>最好能接管INT 1BH,INT 23H和INT 24H中断.
>保存DOS的数据交换区(SDA)可以安全地使用的DOS的功能.SDA保存了DOS几乎所有内部数据,如果保存(5D06H)和恢复(5D0BH)SDA ,DOS就变成在任何时候都可以重入的了.当DOS处在关键区中时,调用INT 2AH.一旦处在关键区中,就不能改变SDA.在关键区的结束处会 调用INT21H的81H和82H功能.
0.3 内存驻留程序设计一般过程
驻留程序分成两个部分,即暂驻部分和驻留部分.驻留程序要完成安装检测,激活和删除等过程.
基本上可抽象成以下几个过程:
>取中断向量
>保存旧的中断向量
>设置或恢复中断向量
>中断处理程序的链接
>检测是来呀已驻留
>执行终止并驻留
>TSR的删除
删除TSR比较复杂,必须按下列步骤进行:
>检查中断向量是否已经被替换.如果没有替换,就恢复所有的中断向量;如果某个中断向量被替换,则跳过下面各步,不能删除该 TSR.
>TSR的PSP中偏移量16H存放着父进程的PSP.把这个值改为当前进程的地址.
>把当前PSP设为TSR的PSP
>执行INT 21H的4CH功能,释放TSR占用的内存,关闭所有文件,并使用PSP中存放的父进程地址和终止地址.
>这里控制返回到初始进程中,当前PSP也指向初始进程,所有寄存器值包括SS和SP都不确定.
在执行完上述步骤后,要恢复寄存器.
如果要无条件地删除TSR,必须监控每个TSR对中断向量表,内存控制块和设备驱动程序链的修改.
0.5 缩写语表
ASCIZ: 以零结束的ASCII字符串.
BPD: "BIOS Parameter Block (BIOS 参数块)"的缩写.含有对驱动器的低级参数的说明.
CDS: "Current Directory Structure(当前目录结构)"的缩写,含有某个逻辑驱动器的当前目录,类型和其它信息.
DPB: "DOS Drive Parameter Block(DOS驱动器参数块)"的缩写,含有某个逻辑驱动器的介质说明及一些内部信息.
DPL: "DOS Parameter List (DOS参数表)"的缩写,该数据结构用来传递参数给SHARE和网络功能调用.
DTA: "Disk Transfer Address(磁盘传输地址)"的缩写,指示对磁盘进行数据读写的功能调用不必显式地给出缓冲区地址.
FAT: "File Allocation Table(文件分配表)"的缩写,磁盘的文件分配表记录了所使用的簇信息.
FCB: "File Control Block(文件控制块)"的缩写,在DOS的1.X版本中,用FCB来记录文件打开的状态..
IFS: "Installable File System(可安装的文件系统)"的缩写,它允许一个非DOS格式的介质被DOS所使用. 大多数情况下IFS 与网络驱动器非常相似,尽管IFS最典型的情况是一个本地驱动器而不是一个远程驱动器.
JFT: "Job File Table(工作文件表)或Open File Table(打开文件表)"的缩写,程序PSP中的JFT可用来将文件句柄转换成SFT值.
NCB: "Network control Block(网络控制块)"的缩写.NCB可用传递对NETBIOS的请求和接受来自NETBIOS处理程序的状态信息.
PSP: "Porgram Segment Prefix(程序段前缀)"的缩写.当程序被装入时,PSP为一个预留的256字节的数据区它包含了程序调用时 的命令行内容和一些DOS的内部信息.
SDA: "DOS Swappable Data Area (DOS对换数据区)"的缩写.SDA中包含有DOS内部使用的记录某个正在处理的功能调用状态的 所有变量.
SFT: "System File Table(系统文件表)"的缩写,SFT是一个DOS内部数据结构,在DOS 2+版本的句柄功能调用中用于管理某个已打 开文件的状态,这就和在DOS1.X中,FCB管理已打开文件状态一样.
更多精彩
赞助商链接