📄 page245.html
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第9章 图形显示</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!导航条>
<p><a href="content1.html">目录</a> <a href="page244.html">上一页</a> <a href="page246.html">下一页</a> <a href="page269.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!标尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td> <!左侧空白>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td> <!右侧空白>
</tr>
<!页眉行>
<tr height=60 valign="bottom">
<td></td><td></td><td></td>
<td colspan=6><img src="icons/flag.gif"></td><td colspan=4></td><td colspan=6 align="right">第9章 图形显示</td> <!章节名>
<td></td><td>-245-</td><td></td> <!页码>
</tr>
<!页眉线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋体" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!顶部空白>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>
<br>
<br>
<br>
<br>
<br>
loop3:<br>
<br>
<br>
<br>
<br>
<br>
<br>
next_dot:<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
disp<br>
code<br>
<br>
</td>
<td colspan=2>
mov<br>
mov<br>
<br>
lodsw<br>
xchg<br>
<br>
test<br>
push<br>
jz<br>
mov<br>
mov<br>
int<br>
<br>
inc<br>
shr<br>
pop<br>
dec<br>
jnz<br>
inc<br>
pop<br>
loop<br>
<br>
pop<br>
pop<br>
pop<br>
ret<br>
endp<br>
ends<br>
end
</td>
<td colspan=4>
cx,152<br>
di,16<br>
<br>
<br>
ah,al<br>
<br>
ax,bx<br>
ax<br>
next_dot<br>
ah,0ch<br>
al,2<br>
10h<br>
<br>
cx<br>
bx,1<br>
ax<br>
di<br>
loop3<br>
dx<br>
cx<br>
loop2<br>
<br>
di<br>
si<br>
bx<br>
<br>
<br>
<br>
main
</td>
<td colspan=10>
;汉字左上角的X坐标送入CX寄存器<br>
;处理16个Bit<br>
<br>
;取得一个字<br>
;交换高低字节<br>
<br>
;测试"掩模"中指定的数位<br>
;暂存待测数据<br>
;若所测试的数位为0,转NEXT_DOT继续<br>
;画一个洋红色的点<br>
<br>
<br>
<br>
;X坐标加1,准备处理下一个数位<br>
;BX寄存器中的"掩模"右移1位<br>
;恢复AX寄存器中的待测数据<br>
;已处理了全部16个数位了吗?<br>
;未处理完全部数位,转LOOP3继续<br>
;Y坐标加1,准备处理下一条线<br>
;恢复CX寄存器中的计数值<br>
;转LOOP2继续<br>
<br>
;恢复寄存器<br>
<br>
<br>
;返回主过程<br>
<br>
<br>
<br>
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
这个程序和第三章的PROG4程序有一点相象,程序PROG4是利用AND指令进行按位测试工作的。实质上CPU执行TEST指令和执行AND指令是一样的,即把待测试的寄存器与"掩模"数据做一次"与"操作,根据结果设置标志位,但"与"之后的结果不保留。TEST与AND的关系类似于CMP与SUB的关系,将这样两个指令联合记忆效果不错。当然,也可以按以下规律记忆:<br>
<font face="楷体_GB2312">
(1)TEST指令后的源操作数为被测试数据,目的操作数为"掩模",需要测试哪几个数位,"掩模"中相应的数位就要置1。<br>
(2)若被测试的数位都是0,那么ZF标志将被置1,指令"JZ"可以完成转移,反之如果被测数位中有一个不是0,ZF标志就会清0,指令"JNZ"可以完成转移。仔细观察"Z/NZ"与被测数位之间的关系可以很好地掌握TEST指令。<br>
</font>
数据的分析看来不是很困难,那么如何获得字模数据呢?所有的汉字操作系统都带有标
</td>
<td></td><td></td> <!右边距>
</tr>
</font>
<!页脚线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!页脚>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!导航条>
<p align="right"><a href="content1.html">目录</a> <a href="page244.html">上一页</a> <a href="page246.html">下一页</a> <a href="page269.html">下一章</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -