更新时间:2024-06-25 11:09
内存常驻程序(Terminate-and-Stay Resident program 简称TSR程序)是把自己装入内存后将控制返回给操作系统,然后在后台等待用户按下指定的组合键(热键)或产生相应的中断时,TSR被激活,立即中断当前运行的程序,并允许立即访问它所提供的服务。采用.COM格式书写。
常驻程序(resident program)
存在于计算机内存储器中某一特定区域内的程序。
例如:常用的DOS命令,或BASIC语言等固化在只读存储器(ROM)中,供用户随时调用。
怎样使代码常驻内存
要使代码常驻内存,必须在程序中重新定义中断向量表中的部分单元,在初始化程序时用自己的地址取代中断向量表中的地址,此时需要确定常驻部分程序的大小,然后使用中断去通知系统结束执行当前程序,并把指定的部分保留在内存中。在本题中系统的定时器将触发运行常驻程序。(详见源程序中过程main)
为什么初始化代码不需要常驻内存
初始化代码只需要在程序第一次执行时运行,在程序运行后需要初始化的部分已经完成。在本题中需要初始化的是使程序留驻内存和鼠标的初始化。在第一次运行本程序时初始化程序以完成使驻留部分常驻内存,在调用过程mouseup之后鼠标操作即可进行,此时若使初始化代码常驻内存已无必要,而且会造成内存空间的浪费。
常驻程序也叫常驻内存程序、TSR程序或驻留程序,是指那些一旦执行便永久地占据内存(这些程序永远呆在内存里不出来)的程序。程序常驻内存后,就有机会随时发挥作用,监视和控制用户的工作。例如病毒就是典型的常驻程序,启动汉字操作系统时需运行的程序如SPIIB.COM、SPDOS.COM、PY.COM,鼠标管理程序MOUSE..COM等都是常驻程序。DOS6.22中的SMARTDRV.EXE、DOSKEY.COM、VSAFE.COM等也是常驻程序。
常驻程序都必须在DOS提示符下运行,不能写在CONFIG.SYS中。所以判断一个程序是设备驱动程序还是一个常驻程序的通常方法是:若其必须写在CONFIG.SYS中,则便是设备驱动程序;若只能在DOS提示符下运行便是一个常驻程序(当然能在DOS提示符下运行的并不都是常驻程序)。
如果运行常驻程序时没写LOADHIGH,如MOUSE,则该常驻程序便将驻留在常规内存中,若想将常驻程序调到UMB中,必须在命令的前面写上LOADHIGH(注意:LOADHIGH简写为LH),例如:LOADHIGHMOUSE.COM.则MOUSE.COM被放到UMB中。
要特别注意这两个命令的用法差别:设备驱动程序只能用“DEVICEHIGH=”命令,常驻 内存只能用“LOADHIGH”命令(或“LH”命令),并且DEVICEHIGH前面必须写上等号,而LOADHIGH 后面绝不可写等号,用一个空格与常驻程序名隔开就可以。