| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1624 人关注过本帖
标题:一个16位汇编画图的例子
只看楼主 加入收藏
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
结帖率:50%
收藏
 问题点数:0 回复次数:0 
一个16位汇编画图的例子
这段代码是我在一个汇编打字游戏中 ,截取下来的,功能就是 往  dos窗口 的边上打上图形 调用的是BIOS  INT
10H 中断   有几个地方不明白,我明白的地方都给出来注释  高手看看
先解释下参数   ;初始化程序界面的宏,共七个参数
;op1,op2:打印边框的初始位置
;op3:要打印的字符的ASCII代码
;op4:循环自增方向
;op5:打印次数 op6:标号
Init_game macro op1,op2,op3,op4,op5,op6

mov cx,00h
mov dh,op1
mov dl,op2
op6:
mov ah,02h     ;设置光标位置 ,因为上下左右4个边框都要画图,所以这个宏要调用4次,指定位置为 mov dh,op1(光标所在的行)    mov dl,op2(光标所在的列)                                                                                       
mov bh,00h     ;在图形方式中,总是把该寄存器设置成0(这个注释可能不对)
int 10h         ;(ah等于2的中断,需要4个参数,DH,DL和bh)

push cx     ;保存cx寄存器的值,该寄存器用作和 op5做比较,控制要打印图形的次数。
mov ah,0ah     ;指出“写字符”功能调用
mov al,op3    ;该寄存器放要写字符对应的ASCII码
mov bh,00h
mov cx,01h  ;此寄存器指明把字符和属性写到屏幕上的次数
int 10h
pop cx

inc cx
inc op4
cmp cx,op5
jne op6      ;不等于则转移

endm
code segment
main proc far
assume cs:code
start:

Init_game 00d,00d,0ah,dl,80d,nextsign1 ;   上面

Init_game 24d,00d,0ah,dl,80d,nextsign2 ;   下面

Init_game 00d,00d,0ah,dh,25d,nextsign3 ;左边   

Init_game 00d,79d,0ah,dh,25d,nextsign4 ;右边


main endp
code ends
end start
程序没有 mov ax,4c00H  INT 10H   不过也能看出效果
第一个问题:首先 假设 程序打印最上面一行  ,开始 先设置 光标开始位置,00d,00d,然后 每一次循环 打印一个图形,但是每次循环 光标开始位置都是00d,00d也没有变化 啊  ,那怎么实现打印一行的图形啊   ,难道不是在光标所在位置  画图形?
第二个问题(两个小问题): 我查找int10h 的资料 ,上面说 调用“写字符“功能时,要指明4的参数  ,al (该寄存器放要写字符对应的ASCII码)ah(在文本方式中,该寄存器指明正在写的显示页,在40列方式中,可以用0到7页,在80列方式中 ,可以用0到3页,在图形方式和 方式7(对应于单色显示适配器的文本方式)中),可忽略该寄存器),bl(在图形方式中,规定字符的前景色,在文本方式可忽略此寄存器 ),我不明白的是网上这段代码到底是图形方式还是文本方式啊 ,怎么区分?他两次 调用10号中断 给mov bh,00h  是什么意思啊 ?
第三个问题:;参数  op4:循环自增方向   ,调用 的时候 传进来的是dh和dl  请问这怎么实现 自增方向?


问题很多  希望解答下   谢谢

[[it] 本帖最后由 toyix 于 2008-9-2 14:41 编辑 [/it]]
搜索更多相关主题的帖子: 汇编 画图 
2008-09-02 08:35
快速回复:一个16位汇编画图的例子
数据加载中...
 
   



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

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