| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
用汇编编写DOS下的内存驻留程序(1)
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-19
  bsp;mov si,0010h    ;si=0010h
  mov ax,0001h    ;ax,=0001h
  call Add
  cmp 0100h:word ptr [0010h],0  ;Call Add subroutine
  push ds     ;Interrupted
  push si
  push ax
  mov ds,0200h    ;ds=0200h
  mov si,0200h    ;si=0020h
  mov ax,0003h    ;ax=0003h
  call Add
  cmp 0200h:word ptr [0020h],0  ;0200:0020h=0004h
  jne 
  add ax,0200h:word ptr [0020h]  ;ax=0007h
  ret      ;Return
  pop ax     ;ax=0001h
  pop si     ;si=0010h
  pop ds     ;ds=0100h
  iret      ;Return to Add subroutine
  jne 
  add ax,0100h:word ptr [0100h]  ;ax=   0001h
        ;0100h:0010h= 0002h
        ;----------------------------------------
        ;ax  = 0003h
  ret
  mov bx,ax
 而下面的子程序是不可重入的:
  Add proc near
   mov Temp,ax
   mov ax,DS:word ptr [si]
   cmp ax,0
   je DonotTheValue
   add ax,Temp
  DonotTheValue:
   ret
  Temp:
   dw  0
  Add endp
 可以利用检查可重入子程序的方法检查这个子程序的不可重入性,尝试一下在" mov ax,DS:word ptr [si]"指令后再次执行该子程序,那么就会出第一次调用返回的结果不对.
  mov ds,0100h    ;ds=0100h
  mov si,0010h    ;si=0010h
  mov ax,0001h    ;ax,=0001h
  call Add
  mov Temp,ax    ;Call Add subroutine
        ;Temp=0001h
  mov ax,0100h:word ptr [0010h]  ;0100h:0010h=0002h
        ;ax=2
  push ds     ;Interrupted
  push si 
  push ax
  mov ds,0200h    ;ds=0200h
  mov si,0020h    ;si=0020h
  mov ax,0003h  &

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


相关文章