-292- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
TSR.ASM code main msg start: tail main code |
segment assume org proc jmp db mov mov int mov int label endp ends end |
cs:code,ds:code 100h near start 'I am already installe ah,9 dx,offset msg 21h dx,offset tail 27h near main |
;跳过数据区 d in the memory',07h,0dh,0ah,24h ;显示字符串MSG ;将驻留内存部分的长度送入DX寄存器 ;驻留内存并返回操作系统 ;程序尾 |
||||||||||||||||||
将此程序编译连接生成一个COM文件,然后在DOS状态下运行这个程序,它会显示一段文字,之后重新回到DOS状态。此时可以用MEM程序观察一下内存中的变化: C:\ASM\>MEM/C/P[Enter] |
|||||||||||||||||||||
![]() |
|||||||||||||||||||||
可以看到内存中的确多了个TSR程序,占据了576个字节。如果反复运行TSR.COM,那么内存中就会出现越来越多的TSR,同时内存也会逐渐减少。 为什么一个很小的程序驻留内存后却占了不少内存?这个问题说起来话就长了。真正驻留在内存中的并不仅仅是程序代码,还有DOS安排的PSP,以及环境信息。而且无论驻留内存的东西总量有多少,DOS为其分配的内存也总是16字节的整数倍。换句话说,即使驻留内存的数据只有一个字节,DOS也要分出16个字节给它。 |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |