这个SideKick是个好东东。 qR+!l(
Z^MNf
下面的程序不是我写的。 =^ 50FI|
K~ehP[^
用汇编编写DOS下的内存驻留程序(1) 6MdiY1Lr!K
.gOL1`b*
`(/w y
ysf~|r4s
aM0f/"-_
:y jKL^G>
n3
r3"~i
绪言 ]^K4i)\
?R.j^S^
G?/DrnK:
0.1 内存驻留与中断 )+t0:GwP`:
3]3|
m#Z#
.j_2
内存驻留程序英文叫Terminate and Stay Resident Program,缩写为TSR.这些程序加载进内存,执行完后,就驻留在内存里,当满足条件时,调到前台来执行。 ^\&e:Nkh
Px`!A EFd[
WKa~[j|-K
内存驻留程序的常用形式有: 2JcjZn
xLH)P<^`C
PxkOT*
>诸如Borland 的SideKick弹出式实用程序 Bad:no\W
%m$Sp47
*CTlOy
>日历系统 2n"V}p>8i#
eb"5-
0
nq8C'Fo!6T
>网络服务器 +l{=
ptxbDzOz
6]%sFy2
>通讯程序 LsS
Jd^,]
i|*)I:SHU
>本地的DOS扩展(如CCDOS,UCDOS等中文系统都属于这个范畴) k%QpegN
Qtv&ijFC
\<TXS)w]
>一些可恶的人利用TSR技术制作很多可恶的病毒程序,几乎所有的病毒程序都是TSR程序. 9kS^Abtk
!LN?PKJ
0o*8#i/)!3
就象多任务系统调度一个进程有一个调度程序一样,在PC中从前台程序进入到一个TSR,也要有一个调度者,只是PC操作系统的调度不称为调度程序,而只称为触发机制.触发机制调度TSR执行在PC机上党称为激活一个TSR.触发机制主要有以下几种: :I^;jdL
Cg?&wj<
!lc[
>硬件中断:党用的是键盘中断INT 9H,时钟中断INT 8H,通讯中断INT 14H,磁盘中断INT 13H等等. +@k+2?]
FO
ls:w8&`*
RMWHN:9
>软件中断:党用的是键盘中断INT 16H,时钟中断INT 1CH,DOS中断INT 21H,等等. 6w
ECo
t+T4-1 3a
p hzKm9
>以上各种的结合. T&o(N3
lW
s
3f-7f<
{w^+\]tC
从以上的触发机制可以看出,TSR和PC机的中断系统有着密切的关系.每种激活方式实际上都是与中断有关的.常用特殊的击键序列的识别码是通过截获INT 9H和INT 16H来实现.实际上不管TSR程序的哪一个环节,都与中断有着密切的关系.因此在具体进行TSR和程序设计之前,先介绍PC中断系统.在此只作简单说明. ?[Q3q4
=\:qo'l
JKmIvZ)8
在PC机内存的最低端(0000H开始)的1K字节中,存放着256个指针即常说的中为向量或中断矢量(Interrupt vertor),每个中断向量都指向一个子程序,该程序称为中断处理程序(Interrup handler).一个中断向量由四个字节组成,有一个字是中断处理程序的偏移量值,后一个字是中断处理程序的段值.256中断向量一起称为中断向量表.
Z+. '>
q0r>2c-d
oij}'|/Jc
手式计算中断向量的首址,可通过以下的公式来求得: 0-
yp,G
q6`b26
'|p$)yx2
X号中断向量的首址=0000H:X*4 3H6lBF
c?&X?<
0Bi.6
r
当产生一个中断时,处理器都按顺序执行以下步骤: _k~KZ;l
KRMQtgahc
OL,TFLn4
>在堆栈上压入处理器的标志(相当于指令PUSHF). b:]V`uF?
TOXfWEU3>
V"G*N<q
>在堆栈上压入当前CS和IP值(相当于指令PUSH CS和PUSH IP). 8jo p_PG'
!1{e|p
7
S<@7_I
>关闭中断(CLI) YU5(g^<
,a]?S^:y]
%
*INT
>从中断向量加载的CS和IP,执行中断处理程序. rb+j*
5Es
q]e`9/U
hD*SpVIU
当执行完中断处理程序后,一般用IRET返回,它的作用是: OGg># vj,s
(~wqa 3
WE.{p>
>从堆栈上取出保存的IP和CS(相当于指令POP CS和PUSH CS). OO*zhGD;[
g+>(dnX
Jx7C'~,J
>同时恢复中断前的处理器标志(相当于指令POPF). P&ptJtNg
};jN\x?&q
-0{r>,&Mm
中断有多种分类,由触发的原因和实现的性质来分,可分为硬件中断和软件中断,从操作系统分层实现来说,可以分成BIOS中断,BOS中断和用户中断. B
s#hr3h-
[)zP6\I
aYS!xh206
一方面,BIOS和DOS通过中断系统向用户提供一个操作系统功能界面.也就是说用户(一般来说是前台程序)的功能主要是通过调用DOS和BIOS的中断服务来实现的,具体来说就是通过INT指令来实现的.另一方面,BIOS和DOS由中断系统所构成,BIOS对硬件成为高层的功能,并通过中断的形式向用户提供. ZE=Sp=@)j
usK*s$ns
q[W
0 N>
如果在当前程序执行的同时,能将一块代码放在内存,把中断向量指向代码中的子程序,那么在当前程序执行中产生中断时,就有可能执行不属于当前程序和操作系统的代码,产生的中断可能是当前程序产生的软件中断,也可能是由硬件产生的硬件中断.这就是单任务的PC操作系统可能执行多于一个进程的简单说明. $jI3VB
r@t9Ci=}
F{~{Lthc
在PC中断系统中有几个中断具有周期性,即INT 8H,INT 1CH和INT 28H.它们或者周期性被执行用于时间计时,或者周期性产生用于等待.它们是在实现TSR时进行轮询触发的基础.键盘中断(INT 9H和INT 16H)当用户击键时发生,利用它们是进行热键处理的基础.串行口通讯也是触发的一个重要机制.此外众多的软件中断也是触发的媒介. 1A G<$d5U|
4DOH`6#an
"ZsOd>[/
X4Ic;
0.2 DOS的可重入性分析 *><F'
?+W9az]+
VZymM<