关于内存驻留程序请教各们高手,多谢!

welkinsun 2001-05-27 11:43:00
我在学习汇编语言时,对内存驻留程序有很多不明白的地方。请各位高手不吝赐教
1.驻留程序是如何驻留的?
2.驻留以后是怎样响应外部事件的,也就是说如何激活这个驻留(DOS操作系统中)
3.驻留程序如何释放?
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
seedundersnow 2001-05-29
  • 打赏
  • 举报
回复
cpu 不会主动去招待你的驻留程序。

只有利用中断。

驻留程序需要截取某个中断。 也就是说, 它要修改中断向量,使中断向量指向驻留的程序。当中断得到响应,你的驻留程序将会得到控制。
蚊子王 2001-05-29
  • 打赏
  • 举报
回复
1.用DOS中断(INT 21H)的31H功能。
2.一般都是修改一个定时调用的中断(如1CH号中断)。比如把1CH号中断的地址替换成你自己程序的地址,到时候会每1/18.2秒调用一次新的1CH中断;如果你觉得1/18.2秒还不够实时,可以加快时钟。
3.利用DOS中断(INT 21H)的49H功能释放驻留的内存和环境块(如果在驻留前没释放)
阿发伯 2001-05-29
  • 打赏
  • 举报
回复
在DOS系统下,内存的最低端0开始有1024子节保留内存,用来存放所有中断例程起始地址,每32位(4子节)存放一个,共256个,对应于0-255中断号,这就是所谓的中断向量。使用如:mov ax,3517h int 21h安装驻留程序时,将程序的驻留代码部分装入到内存某地址,然后将该起始地址存放到17h*4的处。激活驻留程序时int 17h就是到该地址处找到驻留程序的起始地址,然后跳转到这个地址,执行驻留程序代码。
神奇的太阳 2001-05-29
  • 打赏
  • 举报
回复
如我给的离子,是加在打印中断int 17h的,这样当你打印时就会用到驻留的代码,或者你在程序中用int 17h直接进行中断调用。热键激活其实也是中断调用。当然也可以在程序中直接调用某个内存位置的代码,不过我没用过。
神奇的太阳 2001-05-27
  • 打赏
  • 举报
回复
1.int2131h 驻留内存的功能调用
2.看要做什么用了,通过中断调用,热键激活...
3.int2149h

给你一小段驻留的例子,

INSTALL:MOV SIGN,1234H
MOV AL,0
MOV TEXTGRAP,AL ;TEXT AND DIRECT
MOV TEXTDIRE,AL ;初始化打印状态
MOV DX,OFFSET MESS1 ;运行结束
CALL SHOW
MOV AX,3517H
INT 21H
MOV INT17OFF,BX
MOV INT17SEG,ES
MOV AX,2517H
MOV DX,OFFSET INT17H
INT 21H ;截17H号中断
MOV DX,OFFSET BEGIN
MOV CL,4
SHR DX,CL
INC DX
MOV AL,0
MOV AH,31H
INT 21H ;驻留内存
JMP REXIT
REMOVE: MOV AX,3517H
INT 21H
MOV AX,ES:[BX-2]
CMP AX,1234H
JZ MOVESTR
JMP REXIT
MOVESTR:PUSH CS
POP DS
MOV DX,OFFSET MESS2
CALL SHOW
MOV DX,ES:[BX-6]
MOV AX,ES:[BX-4]
MOV DS,AX
MOV AX,2517H
INT 21H ;恢复17H号中断
MOV AX,ES:[BX-8] ;PSP_SEG
MOV ES,AX
PUSH ES
MOV AX,ES:[02CH]
MOV ES,AX
MOV AH,49H
INT 21H
POP ES
MOV AH,49H
INT 21H
JMP REXIT
welkinsun 2001-05-27
  • 打赏
  • 举报
回复
请问究竟如何激活?我有点不明白,驻留程序驻留在内存里计算机是会不定期的招待这段代码还是这个驻留程序就一直死在那里不动,我想了解整个激活的过程和原理是怎么样的!请不吝赐,小妹我多谢了!

21,494

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧