📄 page16.html
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第2章 开始设计程序</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="page15.html">上一页</a> <a href="page17.html">下一页</a> <a href="page27.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>-16-</td><td></td> <!页码>
<td colspan=6>PC机汇编语言实战精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!书名>
<td></td><td></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=3>-rbx[Enter]</td><td>←</td><td colspan=13>输入的命令</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>BX 0000</td><td>←</td><td colspan=13>DEBUG显示BX寄存器的原值</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>:0[Enter]</td><td>←</td><td colspan=13>用户输入的新值,如果直接回车将不改变寄存器的原值</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>-rcx[Enter]</td><td rowspan=3>←</td><td rowspan=3 colspan=13>同上述</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>CX 0000</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3>:0d[Enter]</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
有了名字和长度,即可通知DEBUG存盘。这可以使用DEBUG的第四条命令--W。操作很简单,只需在"-"后敲入"W(Write)"并回车,DEBUG会报告存到磁盘上的字节数。<br>
程序已经存盘,我们可以大胆地运行这个程序。程序的细节我们先不必理会,咱们先要个宏观结果。<br>
DEBUG给我们提供了一个命令用于运行程序,命令码是"G"(GO)。由于我们应从偏移100H处执行,所以我们这样应用G命令:<br>
-G=100[Enter],注意等号是不能省略的。<br>
听到声音了吗?结果应该是令人兴奋的。喇叭里真的发出了连续的声音。不过兴奋之余,大家还应该清楚一点,就是在机器不断电和热启动的情况下,此声音将永远"连续"。也就是说,机器此时已经进入"死锁"状态。<br>
不过不必担心,出现这种情况并非是程序中有"BUG",而是我们用的指令过于少了,以至于不可能让这个程序正确结束。这个问题我们会在后面加以解决。当然要用到更多的指令和知识。<br>
请按下"Ctrl+Alt+Del"来结束这无休止的叫声。我们已经得到了宏观结果,下面就来仔细分析一下程序的微观结构--每个指令的作用。
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
<font face="黑体" lang="ZH-CN"><a name="222"><p>2.2.2 程序透析</p></a></font>
<td></td><td></td> <!右边距>
</tr>
<!正文>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
还记得我们前面的讨论吗?若要让喇叭发声,关键是连续改变61H端口的bit1位的状态。但由于8086/88在设计时规定端口不能直接参与任何运算和逻辑操作,因此程序必须首先将61H端口内各个位的当前状态取到CPU中。这就是第一条指令的作用。
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=3 align="center"><img src="icons/note.gif"></td>
<td colspan=15>
助记符:IN(In)<br>
用 途:将某端口的数据取至累加器<br>
格 式:IN 累加器,端口号<br>
执 行:端口内各个位的状态传送至累加器(AL或AX)
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
IN是这条指令的助记符,此指令的作用如上所述。由于累加器是CPU和端口之间的"唯一"通路,因此在此程序的这条指令中只能使用AX寄存器。而且程序现在要从端口中取得8bit数据,则我们必须要用AX的低8位--AL。注意不能用AH寄存器。像这样的用法--"IN AH,61"或"IN BL,61"都是不对的。<br>
十六进制数字"61"就是提供数据的端口地址。对于地址小于0FFH的端口都可以在指令中直接引用地址,而超过0FFH的端口不能这样应用。例如"IN AL,1C0"这样的用法是错误的。至于如何取得地址大于0FFH的端口状态,将在后面介绍。<br>
这里有三个问题应注意:
</td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2 align="center"><img src="icons/attention.gif"></td>
<td colspan=16><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>
① 助记符后的空格只能多而不能省,指令中的逗号不能丢;<br>
② DEBUG只接收16进制数,如果使用其它进制数应先转换成16进制;<br>
③ 数据进入累加器后,各个位排列排列顺序与端口是一一对应的,即AL的bit0对应
</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="page15.html">上一页</a> <a href="page17.html">下一页</a> <a href="page27.html">下一章</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -