⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 page32.html

📁 李春生的汇编书籍
💻 HTML
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第3章 中断调用与子程序</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="page31.html">上一页</a> <a href="page33.html">下一页</a> <a href="page45.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>-32-</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=18>
  这个程序可以把内存中的一串文字显示在屏幕上,这个程序应用了一些新的技术:<br>
  ① 我们使用了DEBUG的"E"(EDIT)命令将文字串放入内存;<br>
  ② 程序中使用了"间接寻址"技术。<a href="page32.html#note1"><sup>①</sup></a>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td>
<td colspan=3 align="center"><img src="icons/attention.gif"></td>
<td colspan=15><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>
 "E"(EDIT)命令具有"编辑内存"的功能,它的用法很简单,在提示符后键入"E段:偏移[Enter]"即可。DEBUG会把指定内存单元的内容显示在屏幕上,同时等待输入新数据,如果只修改一字节内容,则在输入数据后打回车;若要修改相临的下一字节内容,则在输入数据后打空格,待把所有数据修改完后再打回车结束此命令。注意如果只输入偏移地址,则DEBUG会默认DS为段地址。
</font></td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  我们再编写汇编语言程序时,有时需要把内存中的数据取到寄存器中加以处理,在这种情况下我们应该把指令写成"MOV  寄存器,[偏移地址]"的形式。CPU执行这个指令时就会把内存中"DS:偏移地址"处所储存的数据取到指定寄存器中。
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=3 align="center"><img src="icons/attention.gif"></td>
<td colspan=15><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>
提醒大家注意一点:CPU的引用的段地址默认来自DS寄存器,当然也可以明确指定一个段寄存器作为段地址来源,用DEBUG编程时指令要写成两行:<br>
  ****:****  ES:[Enter](指定ES为段寄存器,也可指定其它段寄存器)<br>
  ****:****  MOV  寄存器,[偏移地址][Enter]<br>
CPU执行此指令时就会把内存中ES:[偏移地址]处储存的数据取到指定寄存器中。
</font></td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  偏移地址两侧的"[ ]"是必不可少的。它表示我们要装入寄存器的数据是储存在这个地址处的数据,而不是这个地址本身。我们用DEBUG做个实验:<br>
	C:\ASM\>DEBUG[Enter]
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=2>
-d0 f
</td>
<td colspan=16>
<font face="楷体_GB2312" size="2">注意这两个字节</font>
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=2>09FE:0000</td><td></td><td colspan="10">CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 68 04 8A 03</td><td colspan=5>. ........O.h...</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
-a100[Enter]<br>
09FE:0100 mov ax,[0]<br>
09FE:0103 mov ax,0<br>
09FE:0106 [Enter]
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=9>-r</td><td colspan=9><font face="楷体_GB2312" size="2">注意"DS:0000"这个存储单元</font></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>AX=0000</td><td colspan=2>BX=0000</td><td colspan=2>CX=0000</td><td colspan=2>DX=0000</td><td colspan=2>SP=FFEE</td><td colspan=2>BP=0000</td><td colspan=2>SI=0000</td><td colspan=2>DI=0000</td><td colspan=2></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>DS=09FE</td><td colspan=2>ES=09FE</td><td colspan=2>SS=09FE</td><td colspan=2>CS=09FE</td><td colspan=2>IP=0100</td>
<td colspan=5>NV UP EI PL NZ NA PO NC</td><td colspan=3></td>
<td></td><td></td> <!右边距>
</tr>
<tr>
<td></td><td></td> <!左边距>
<td colspan=2>09FE:0100</td><td colspan=2>A10000</td><td colspan=6 align="center">MOV AX,[0000]</td><td colspan=4></td>
<td colspan=4>DS:0000=20CD</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  通过前面讨论的内容,我们现在就可以推知这条指令执行完后AX寄存器的数据。
</td>
<td></td><td></td> <!右边距>
</tr>

</font>

<tr>
<td></td><td></td>
<td colspan="9"><hr></td><td colspan="9"></td>
<td></td><td></td>
</tr>
<tr>
<td></td><td></td>
<td colspan="18"><font face="楷体_GB2312" size="2"><a name="note1">① 对于学习过C语言程序设计技术的朋友来说,"间接寻址"并非是什么新鲜东西,还记得"指针"的概念吗?</a> 
</font></td>
<td></td><td></td>
</tr>

<!页脚线>
<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 &copy; 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="page31.html">上一页</a> <a href="page33.html">下一页</a> <a href="page45.html">下一章</a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -