当前位置: 网学 > 编程文档 > 汇编语言 > 正文

用汇编编写DOS下的内存驻留程序(1):绪言

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
00h    ;ds=0200h
  mov si,0020h    ;si=0020h
  mov ax,0003h    ;ax=0003h
  call Add
  mov Temp,ax    ;Temp=0003h
  mov ax,0200h:word ptr [0020h]  ;0200h:0020h=0004h
  cmp ax,0     ;ax=0004h
  jne      ;Not equal ,add
  add ax,Temp    ;ax=0007h
  ret      ;Return to the interrupted point
  pop ax     ;ax=0002h
  pop si     ;si=0010h
  pop ds     ;ds=0100h
  iret      ;Return to Add subroutine
  cmp ax,0     ;ax=2
  jne      ;No equal,add
  add ax,Temp    ;ax   =0002h
        ;0100h:0010h =0003h
        ;----------------------------------------
        ;ax   =0005h
  ret     
  mov bx,ax
 上面执行的结果是AX=5,实上正确的结果应该是AX=3,这是由于当Add子程序从中断子程序再一次被调用时,修改了Temp的值,当从中断返回时不能正确恢复其值.
 解决的方法是把Temp放在堆栈中,当每次Add子程序被调用时Temp的地址都不一样,因此原调用的Temp值不会被第二次在中断中调用的Add所破坏.
  Add proc near
   push bp    ;Store BP
   sub sp,2    ;distribute a byte space in the stack
   mov bp,sp    ;SS:BP point to the stack head
  temp equ SS:word ptr [BP+0]  ;Explain the pointer to SS:BP
   mov Temp,ax
   mov ax,DS:word ptr [si]
   cmp ax,0
   je DonotAddTheValue
   add ax,Temp
  DonotAddTheValue:
   add sp,2    ;Release the dsitributed space in the stack
   pop bp    ;Restore BP
   ret
  Add endp
 对于DOS来说,DOS的内存数据就象Temp变量,它被分配在数据区,而不在堆栈上,因此DOS从总体上是不可重入的.从最后的一个例子看来.重入性跟堆栈有很大的关系.可重入代码允许在任何时候被中断,其所有的变量都存放在该代码的私有堆栈中.DOS是一个单任务的操作系统,在执行INT 21H的代码时是不允许中断DOS,并再次调用INT 21H的.每个时该最多有一个进程在调用DOS的代码.
 对DOS的重入性,以及相应所作的处理总结如下:
  >当通过INT 21H调用DOS时,DOS会使三个内部栈之一:I/O栈,磁盘栈和辅助栈.功能00H到处0CH使用I/O栈,除了不致命错误处理程 序以外使用磁盘栈,致命错误处理程序使用辅助栈.在这种栈切换模式下,如果前台处在INT 22H中,而TSR调用了使用相同栈的DOS功能, 就会使前台程序保存栈中的数据被TSR的数据覆盖掉;但如果调用不同栈的DOS功能,那将是安全的.INT 21H中的几个功能调即33H,50H,  51H,62H,和64H由于非常简单,使用用户栈,因此在任何情况下都是可重入的.避免这种不可重入的简单方法是当前台程序正处在INT 21H 中时,不要调用INT 21H.或者如果前台程序正在处理INT 21H时,只允许调用不同栈的INT 21H功能.
  >DOS数据区中有一个InDOS标志,也探源为DOS安全标志

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号