【汇编】TSR内存驻留程序实现与删除及热键设置——以实现时钟为例

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

【汇编】TSR内存驻留程序实现与删除及热键设置——以实现时钟为例

最近完成了一个关于时钟中断驻留的汇编大作业,对于TSR很是感兴趣,查阅了不少资料,发现现在很少相关的内容资料。尤其是TSR删除这一块几乎找不到在低的水平完全正确的做法,下面我对于TSR的删除我会介绍一种几乎小程序可以完成的方法。当然,标题中的TSR实现,热键设置我也会一一介绍。

一、TSR的介绍(对TSR的基本概念已了解的朋友可以直接跳过第一部分):

先介绍下TSR内存驻留程序(或称中断驻留程序)即Terminate and Stay Resident Program,,缩写为TSR。这种程序加载进内存,,执行完成后,,就驻留在内存里,,当满足条件时(例如热键启动等),调到前台来执行。

程序常驻内存的目的有两个:第一,,对操作系统或BIOS 进行某些修改或补充, 比如转入用户编写的必须恒起作用的中断处理程序;第二,,解决PC DOS 不能实现多任务处理的问题,,例如在运行其他程序的过程中,定时地在屏幕上闪现一些日历、时间和其他提示信息。

 

二、TSR的基本格式

下面我先给出TSR程序的一般设计格式:

codes segment
			assume	cs:codes,ds:codes
			org		100h
start:
			jmp		install	   		
			;;此处定义需要用到的数据
			;;例:	flag	dw		0

subprogram:	
			;;此处为要驻留入内存的程序(称为驻留部分)
			
install:
			;;此处为将上面驻留部分驻留入内存的代码(称为暂驻部分)

codes ends
    		end	start

(1)我们需要注意到TSR的代码中只有一个段(code段),而“数据段”被搬到  jmp    install  之后,这是为了减少程序驻留时所需的内存——当在同一个段时,我们至多需要占用64K的内存;而多了一个数据段,为了保证驻留部分全部被驻留进内存,我们可能需要占用128K的内存,这明显是对空间的浪费。

(2)org    100g  的作用是强制使得 start 的偏移为0100h,其实这个语句会对我们后面的暂留部分计算驻留区大小有帮助,具体作用我们留到下面解释。

 

三、暂驻部分程序的设计

由于暂驻部分较为简单,下面我们先来解决程序的暂驻部分。暂驻程序主要完成两种工作:(1)如何使DOS再次执行常驻内存的驻留部分,这个我们会通过修改相关中断向量来完成,如int 1ch,int 09h等;(2)驻留程序的驻留及暂驻程序的结束,这个我们可以通过int 21h的31h子功能或int 27h来实现(下面我们只介绍int 21h的31h子功能)。因此,暂驻部分可以抽象为以下过程:

(1)取中断向量

(2)保存旧的中断向量

(3)设置新的中断向量

(4)调用中断(int 21h的31h子功能)使驻留程序驻留并结束暂驻程序

我们下面以时钟程序(显示系统时间)为例,我们将会用到以下DOS中断:

INT AH 功能 调用参数 返回参数
21H 25H 设置中断向量 DS:DX=中断向量,AL=中断类型
21H 31H 结束并驻留 AL=返回码,DX=驻留区大小
21H 35H 取中断向量 AL=中断类型 ES:BX=中断向量

我们再介绍一下时钟程序常用的一个中断接口(我们将用来设置,调用我们驻留程序的“窗口”)int 1ch——在系统定时器(中断类型为08h)的中断处理程序中,有一条中断指令int 1ch,时钟中断每发生一次(约每秒18.2次)都要嵌套调用一次中断类型1ch的处理程序。简而言之,就是int 1ch会以每秒18.2次的频率被系统自动调用,利用这个机制,我们可以通过在每次调用int 1ch时,取出系统时间并显示来完成时钟设计。以下我先给出暂驻部分的代码:

codes segment
			assume	cs:codes,ds:codes
			org		100h
start:
			jmp		install
			OLD1C		DW		2 DUP(?)

newint1c:	
			iret																										;;此处为要驻留入内存的程序(称为驻留部分)												
i
内存驻留程序-实程序 vodi setexterr(struct DOSERROR near *err)//设置扩展错误信息的函数。if((bioskey(2)&KEYMASK)==KEYMASK)//读取移位状态。//CTRL_BREAK中断。#define PSP_PARENT_PSP 0x16 //PSP中的父进程的PSP。//CTRL_C中断。 阅读详情

相关推荐

汇编语言简易时钟

代码解释如下: ;从CMOS RAM中读取存储的时间信息,显示当前的系统时间在屏幕上 assume cs:code data segment db 'YY MM DD HH MM SS',0 ;时间以这个形式显示 data ends code segment info: db 9,8,7,4,2,0 ;标志年 月 日 时 分 秒不同时间的位置 start: cal

God Liao On The Way 4448

TSR驻留程序的演示

TSR驻留程序的演示

Turbo C环境下内存驻留程序开发指南

内存驻留程序,亦称为 TSR(Terminate and Stay Resident)程序,是一种在DOS操作系统环境下开发的,能够在系统中常驻内存,并在需要时被激活的应用程序。它们允许用户在不退出当前程序的情况下,通过调用特定中断或热键来运行其他程序或执行某些功能。在计算机中,中断是一种通知处理器暂停当前任务并立即处理紧急事件的机制。当中断发生时,处理器会保存当前任务的执行状态,然后跳转到一个预先定义好的中断服务程序(ISR),执行完中断处理后,再恢复之前的状态继续执行被打断的任务。

weixin_35899324的博客 686

DOS 下多任务系统的设计实现 (1995-7)

DOS 下多任务系统的设计实现 (1995-7)作者:wxzself一、引言:  将DOS扩展为多任务系统,在理论和实践中都有很重要的意义。但由于DOS系统单用户,单任务的设计局限,在实现中有不少难点。 本文提出一种实现方法及其具体设计。  现有的多任务DOS系统,可以分为两类。 一类是在其它多任务系统(如OS/2、UNIX、WINDOWS NT等)的支持下的DOS多任务。在这类系统中,有着严格

Tunix126的专栏 3453

回忆中的TSR技术

然而,TSR技术也带来了一些问题,比如资源管理、内存冲突等,因此在现代操作系统中,这种技术在实时操作系统中,TSR(Terminate and Stay Resident)技术的应用因为实时系统通常更关注任务的响应时间和可预测性,而TSR技术可能引入一些不确定性和复杂性。在使用这些代码的同时,需要权衡利弊,并且考虑是否有更好的替代方案。:在一些老旧的项目中,会存在一些高效的代码段,这些代码段可能是为了在早期硬件或软件环境下优化性能而写的,但是由于历史原因一直保留了下来,成为了项目的一部分。

一只老虎的专栏 814

计算机维护,电脑维护,计算机维护硬件,电脑硬件维护

"  计算机维护,电脑维护,计算机维护硬件,电脑硬件维护 "这是个很让新手头疼的问题,你该怎么做?一些不懂电脑的新手,可能总是被一个很小的计算机问题搞的焦头烂额,很简单的问题就是他不懂怎么去计算机维护,电脑维护的知识也很是缺乏,对电脑硬件的维护那更就不谈了,现在就一起学习下这个课题吧>      可能没有意识到,但您的计算机和您的汽车确实有某些相似之处:它们都需要定期的维护。的确,

成功的心 Blog 2183

第八篇 TSR程序设计初探

这篇博文介绍一个简单的TSR程序设计的子。   一、TSR是什么 TSR内存驻留程序(Terminate and Stay Resident Program)的简称。内存驻留程序是指这样 一种程序,TA在执行结束后,将一部分留在内存中,受到操作系统的保护,可由外界激活。一 般来说,TSR都会和DOS或BIOS中断相联系。   二、本篇博文介绍的TSR的设计思路是什么 设计的功能

ON THE WAY TO GEEK 3530

汇编编写DOS下的内存驻留程序

绪言 0.1 内存驻留中断 内存驻留程序英文叫Terminate and S 绪言 0.1 内存驻留中断 内存驻留程序英文叫Terminate and Stay Resident Program,缩写为TSR.这些程序加载进内存,执行完后,就驻留在内存里,当

forpersonal 7233

BC++ 3.1经典开发环境:从DOS编程到现代迁移的实战指南

集成开发环境(IDE)编译器是软件开发的基础工具,它们将代码编辑、编译、链接和调试等功能集成于一体,极大提升了开发效率。其核心原理在于通过预处理器、编译器、汇编器和链接器的协同工作,将高级语言源代码转换为机器可执行文件。在技术价值上,经典开发环境如BC++ 3.1不仅代表了特定历史时期的高效解决方案,更深刻体现了在有限硬件资源下对性能极致的追求,其轻量级设计、直接的内存管理模型和贴近硬件的编程模式,为理解计算机底层原理提供了绝佳实践。这类环境尤其适用于嵌入式系统、工控设备以及遗留代码维护等场景,其中对**

weixin_30512089的博客 418

内存驻留程序

学习DOS下内存驻留程序的基本思想,了解熟悉用汇编语言编写程序。本课程设计将完成一个小的.com程序,运行程序后,你的所有按键输入(指在DOS或Windows的DOS模式下)将不被接受,所有输入将被替换成特定的字符串(回车键除外)。 二、内存驻留程序的基本框架(framework of a TSR)   内存驻留程序的基本思想就是让程序一直停留在内存中,不断的执行特定的命令。但内存驻留如何被执行

IT is Alex.Net 3787

内存驻留程序设计-TSR程序简介

最著名的,也是商业上较成功的TSR程序可以说是Borland公司的side kick软件,它是一个办公用具软件,随一些定义的热键被激活而弹出相应的TSR程序。为了更好支持TSR程序(虽然Microsoft公司公开并不这么讲),Micosoft公司还修改了DOS系统,增加了int 21H功能的31H子功能,允许,EXE程序驻留内存,还增加了DOS键盘忙循环中断历程int 28H等。最早的DOS被设计成单任务、单用户操作系统,后来,程序员们要求改变这种状况,改变的结果是将所写的程序成为DOS的扩展。

qq_41237850的博客 593

DOS中使用扩展内存XMS操作库设计

DOS中使用扩展内存XMS操作库设计作者:彭学周(Favory.Peng)DOS系统常规内存指的是0-640K的内存区。在DOS下,一般的应用程序只能使用系统的常规内存,因而都要受到640KB内存的限制。而且由于DOS本身和config.sys文件中的安装的设备驱动程序和autoexec.bat文件中执行的内存驻留程序都要占用一些常规内存,所以应用程序能使用的常规内存是不到640K的

【拥抱变化 -- 知识改变命运】 5034

程序从DOS/bios驻留内存到WINNT下监视读入内存数据

作者:成松林QQ:179641795Email:cheng_5103@126.com注意:欢迎大家转载,请大家转载注明原出处和作者信息.发篇文章不容易..大家请保留作者信息..586p                            ;########################################################################.model

1897

汇编编写DOS下的内存驻留程序(3) (转)

汇编编写DOS下的内存驻留程序(3) (转)[@more@]三中断矢量3.1IBM PC提供的中断IBM PC有两种基本形态的中断.如果是由外围设备所产生的中断就叫做硬件中断(Hardware interrupt),譬...

ciya3282的博客 339

汇编语言|时钟程序

要求编写一个时钟程序时钟信号放在屏幕右上角并在程序结束后常驻内存

weixin_69000477的博客 787

驻留程序

实验要求:编写一个驻留程序实现每天固定一个时间自动删除 D://file4.txt ,而且当用户双击一个文本文件时,自动删除文件。注:本程序运行后 将自身复制到系统目录下,并加入注册表开机运行。修改TXT关联方式为本程序。每天定时12:00 删除 c:/test.txt。 双击TXT文件时 删除该文件。/*---------------------------------------------

lionzl的专栏 1492

c语言内存驻留程序,关于用C语言检查内存驻留问题的研究

编制某些实用程序时,有时会遇到检查某一内存驻留程序是否驻留的问题,为了实现这一特殊功能,往往要书写很长的代码,有时还很难达到目的。事实上,语言系统已经提供了特定的程序来解决刚才提到的问题,因此有必要对语言的内部函数检查内存驻留问题进行深入地研究。三类调用外部程序的函数特点及功能在语言里提供了三类调用外部程序的函数,这三类函数的各自特点和功能如下:)()函数。功能是执行一个-命令,它通过-的命令解释...

weixin_42599908的博客 324

masm彩色版常驻内存时钟

.model small.stack.datatemp     db    1tempcount db   ?temp2    db    ?clock    db    ?minute   db    ?second   db    ?count    db    1save1    db    ?save2    db    ?clr      db    08h  ;当前字符的颜色.code

大模型大数据攻城狮的专栏 1096

程序内存驻留木马原型

冰河”木马开发于1999年,在设计之初,开发者的本意是编写一个功能强大的远程控制软件。但一经推出,就依靠其强大的功能成为了黑客们发动入侵的工具,并结束了国外木马一统天下的局面,成为国产木马的标志和代名词。在2006年之前,冰河在国内一直是不可动摇的领军木马,在国内没用过冰河的人等于没用过木马,由此可见冰河木马在国内的影响力之巨大。“冰河”木马有如下功能。

L_C_S_S_G的博客 1517
下一篇: 《thinking in c++》Volume 1知识点总结(一)
cly116
博客等级 码龄12年 290粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值