| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 687 人关注过本帖
标题:求教下,为什么前景和背景会闪烁
只看楼主 加入收藏
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:3 
求教下,为什么前景和背景会闪烁
奇怪是把下面in al,60h改成int 16h 显示倒是正常(这是王爽实验17-2内容中的一个子程序,所以只能用in al,60h而不能用能让程序停下来等待用户输入的int 16h功能)
assume cs:code
code segment
main:
in al,60h     ;读取键盘端口
cmp al,1h     ;esc键?
je clockexit     ;是退出,返回主莱单
cmp al,03bh     ;F1?
je F1
cmp al,03ch     ;F2?
je F2
jmp clockcon

F1:
mov dx,0     ;改前景
call color
jmp clockcon

F2:
mov dx,1     ;改背景
call color

clockcon:
jmp main
clockexit:
mov ax,4c00h
int 21h


color:     ;改前,背景色(颜色值0~7),dx表示调用功能号 dx=0为前景色,dx=1为背景色
push es
push di
push cx
push dx
push ax
push bx

jmp colorstart
colorda db 0,0     ;colorda[0]保存前景色值,colorda[1]保存背景色值

colorstart:
mov cx,0b800h
mov es,cx
mov cx,2000
mov di,1
mov ax,0
mov bx,dx

cmp colorda[bx],7    ;用定址表判断颜色值
jnb ab     ;大于或等于7,跳转
inc colorda[bx]     ;小于7直接加1
mov al,colorda[bx]    ;读取要写屏的颜色
jmp write

ab:
mov colorda[bx],0    ;如果颜色值大于或等于7那么重新置0
mov al,colorda[bx]    ;读取要写屏的颜色
jmp write


;改变颜色
write:
mov ah,es:[1]     ;先读取当前屏幕字符颜色
cmp bx,1     ;判断功能号,如果1改背景,0改前景色
je colback     ;为1跳到改背景
;否则改前景
and ah,11111000b    ;只把前景颜色删除,保留其它属性(字符可能还有背景颜色和闪烁特效,这些不能册)
jmp colconv   

colback:     ;背景颜色
and ah,10001111b    ;只删掉背景色保留其它属性(字符可能还有前景颜色和闪烁特效,这些不能册)
shl al,1
shl al,1
shl al,1
shl al,1

colconv:     ;进入改变字符颜色过程
or al,ah     ;确定当前将要写入的字符颜色
coldo:
mov es:[di],al
add di,2
loop coldo

colorexit:
pop bx
pop ax
pop dx
pop cx
pop di
pop es
ret
code ends
end main
搜索更多相关主题的帖子: 子程序 键盘 用户 
2014-04-15 21:30
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:14 
如果不使用int 16,一般就得忙等(循环等待输入),我试过,效果不好。
2014-04-16 09:55
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
收藏
得分:0 
但是用了,就不符合书上要求,书上要动态显示当前时间如果用int16h 会变成按一下才更新一下时间。。。
是不是跳到f1处理那里然后马上到键盘里内值清光键值。。。?怎么到到键盘缓冲区里清
2014-04-16 22:18
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
读时钟使用int 1a; ah=0。一般也需要循环判断忙等。
使用int 1a; ah=6  ,定时报警最好。我的电脑最小时间单位是1/18秒。
不过象键盘中断一样,如果想用得很好,又没有参考资料的话,
只能读中断程序,参考着做了
2014-04-17 06:18
快速回复:求教下,为什么前景和背景会闪烁
数据加载中...
 
   



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

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