标题:驻留dos程序问题
只看楼主
hook615
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-4-11
 问题点数:0 回复次数:2 
驻留dos程序问题
我是自学的...木有老师
我用以下方法写了时钟驻留,成功了
但是在用同样的方法写字体背景颜色每一秒钟改变的时候..这种方法不行了
以下是我的驻留方式
start:
jmp start1
color record hs:1,back:3,hl:1,front:3
cval color<0,0,0,0>
start1:
  mov ax,cs
  mov ds,ax
  mov dx,offset s ;//s处的代码在下面
  mov ax,251ch
  int 21h
  
  mov ax,3100h
  mov dx,(offset sn-offset start+15)/16+16;sn为最后的结束标号,start为整个dos程序的开始标号
  int 21h  

我还用了一种方法
就是把可执行代码部分的代码复制到了b35:100h处
代码如下
mov ax,cs
mov ds,ax
mov si,offset s//源址
mov ax,b35h
mov es,ax
mov di,100h
mov cx,offset sn-offset s
cld
cli//暂时屏蔽其他中断
rep movsb
sti
mov ax,4c00h
int 21h//由于上面不能终止程序,所以自己加一个

以上两种方法 ,我在驻留时钟里面成功了
为什么现在不行了?

其实用27h中断也可以驻留,但是先把以上两个方法为什么失效搞懂...
有高人研究过的..指点下小弟 ...谢谢
顺便希望能找到师傅收下我这个徒弟(我有一定基础,用pascal写过俄罗斯方块等小游戏..高人收)

[ 本帖最后由 hook615 于 2012-4-12 12:07 编辑 ]
搜索更多相关主题的帖子: 时钟 自学 record color start 
2012-04-11 22:56
hook615
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-4-11
得分:0 
我顺便把s部分贴出来 大家帮我看看~
为啥驻留成功了
但是不能显示
s proc far
  cmp cx,0//由于修改的是1ch中断
  jz done
  dec cx
  iret
done:
  mov ah,9h
  mov al,'T'
  mov bh,0
  mov bl,cval
  mov cx,1
  int 10h//不设置行列,原地显示
  mov al,cval//为下一次颜色准备
  mov ah,al
  and al,not mask back
  and ah,mask back
  mov cl,back
  shr ah,cl
  inc ah
  shl ah,cl
  or ah,al
  mov cval,al
  mov cx,18//驻留的cx变为18,计数器
  iret
s endp
sn:
  nop


[ 本帖最后由 hook615 于 2012-4-12 12:10 编辑 ]
2012-04-12 11:51
hook615
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-4-11
得分:0 
先上课~~回来继续顶贴~
好心人...高手人
走过路过不要错过
2012-04-12 12:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-365613-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.529851 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved