| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
用汇编编写DOS下的内存驻留程序(4)
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-19
  四 基本的驻留程序
4.1 一个基本的COM程序
 DOS之下有两种形式的可执行文件,这两种文件分别是COM文件和EXE文件.其中,COM文件可以迅速地加载和执行,但是其大小不能超过64K字节,只能有一个段,代码段.而且起始地址为100H指令必须为程序的启动指令.EXE文件可以加载到许多个段中,因此程序的大小没有限制,但是程序加载的过程就比较慢,而且对于内存驻留程序来说还会造成更大的麻烦.
 以下是一个可以正确执行的COM文件,但其内容是空的;只是一个COM文件的框架,可以把你写的任何应用部分加在这个文件中,形成一个COM格式的内存驻留程序:
  ;Section 1
  cseg segment
   assume cs:cseg,ds:cseg
    org 100h
  ;Section 2
  start: 
   ret
  ;Section  3
  cseg ends
   end start
 上面的程序可以分成三部分,第一部分定义了代码段和数据段分别放在程序中的位置,以及执行代码的起始地址.第二部分是可执行的程序,在这个例子只一个RET指令而已.第三部分是程序包段的终结,其中END叙述包含了程序开始执行地址.
 若是把上面的程序经过汇编连接,你会发现所产生的COM文件只有一个字节长.这是因为所产生的COM文件没有程序段前缀(Programsegmetn  profix),因为在DOS下所有和COM文件都有相同的程序段前缀.当DOS加载一个COM文件到内存中时,就会自动地产生一份正确的程序段前缀.一个程序在执行的过程中,可以根据需要修改其程序段前缀,但是在一开始,所有COM文件的程序前缀都是相同的.下面是程序前缀的格式.
    偏移位置    含义
    0000H     程序终止处理子程序地址(INT 20H)
    0002H     分配段的结束地址,段值
    0004H     保留
    0005H     调用DOS的服务
    000AH     前一个父程序的IP和CS
    000EH     前一个父程序的CONTROL_C处理子程序地址
    0012H     前一个父程序包的硬件错误处理子程序地址
    0016H     保留
    002CH     环境段的地址值
    005EH     保留
    005CH     FCB1
    006CH `    FCB2
    0080H     命令行的参数和磁盘转移区域
4.2 一个最小的内存驻留程序
 上面的程序只是一个一般的DOS程序而已.并不是内存驻留的.以下是一个基本的内存驻留程序结构:
         ;Section 1
     cseg segment
      assume cs:cseg;ds:cseg
      org 100h
     start:    ;Section 2
      nop   
     done:    ;Section 3
      mov dx,offset done
      int 27h
         ;Section 4
     cseg ends
      end start
 和前一个程序相比,这个程序只是增加了一个DONE部分.这个部分使用了INT 27H这个中断调用,来终止并驻留在内存(Terminate and Stay Resident)中

[1] [2] [3] [4] [5] [6] 下一页


相关文章