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

📄 page289.html

📁 李春生的汇编书籍
💻 HTML
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第10章 细节补充</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="page288.html">上一页</a> <a href="page290.html">下一页</a> <a href="page291.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">第10章 细节补充</td> <!章节名>
<td></td><td>-289-</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>
与指令"MOV  寄存器,OFFSET  数据标号"完全一致,但是它们之间有一些很微妙的差别。这个差别在应用DEBUG编制程序时就有体现,请看下面的例子:<br>
C:\ASM\>DEBUG[Enter]
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=9>
-a100[Enter]<br>
0F6A:0100 mov ah,9<br>
0F6A:0102 mov dx,109<br>
0F6A:0105 int 21<br>
0F6A:0107 int 20<br>
0F6A:0109 db'This is a sample',0d,0a,24<br>
0F6A:011C[Enter]
</td>
<td colspan=9>
-a100[Enter]<br>
0F6A:0100 mov ah,9<br>
0F6A:0102 lea dx,[10a]<br>
0F6A:0106 int 21<br>
0F6A:0108 int 20<br>
0F6A:010A db'This is a sample',0d,0a,24<br>
0F6A:011D [Enter]
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  这两个程序很简单,可以在屏幕上显示一个字符串。所不同的是第二个程序换用"LEA"指令完成取偏移地址的功能。"LEA"的应用格式是很特殊的,表面上看这个指令采用一个存储器直接寻址方式,取到DX寄存器中的数据应该是"T"与"h"的ASCII码6854H,实际上如果跟踪执行这个程序就会观察到取到DX寄存器中的数据并非是6854H,而正是010AH。可见这个指令与MOV指令并不相同,通常对"寻址方式"的理解并不适用于LEA指令。<br>
  由此看来指令"LEA BX,[SI]"也不是要把内存中[SI]地址处的两字节数据送进BX寄存器,而是送进SI的值。这一点可以说是这个指令最奇怪的地方,不过要是再细想一下这也正是将LEA称为"取有效地址指令"的原因。<br>
  特别值得一提的是Borland公司出品的Turbo Assembly编译程序(TASM.EXE)对LEA指令的处理方法很不寻常,它会不声不响地用指令"MOV  寄存器,OFFSET  标号"替换掉LEA。原因很简单,这样替换之后生成的可执行程序会短小一些。这一点从刚才我们用DEBUG编制的两个对比程序中也可以看出来。<br>
  另外新增的LES指令是用于处理32位指针的:
</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>
助记符:LES(Load ES with pointer)<br>
用 途:将存于内存中的32位指针送入ES和指定的寄存器内<br>
格 式:LES 寄存器,存储单元<br>
执 行:32位指针中低16位作为偏移地址送入指定的寄存器中,高16位作<br>
    为段地址送入ES寄存器中
</td>
<td></td><td></td> <!右边距>
</tr>

<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
  所谓32位的指针,其实就是以"段:偏移"形式给出的完整的逻辑地址,只是要求段地址在高字,偏移地址在低字而已。应用这个指令要注意两点:<br>
<font face="楷体_GB2312">
  (1)此指令并非要固定与DI寄存器配合,虽然在串处理指令中ES段寄存器与DI寄存器是配合应用的,但是这条指令允许将偏移地址装入其它寄存器中。比如"LES  SI,存储器"、"LES  AX,存储器"这样的用法都可以;<br>
  (2)与指令LEA不同,这个指令是真正要从内存中取得指针。不过在内存中定义指针时要采用定义"双字"的伪指令。前面我们讲过伪指令DB和DW,DB可以定义一个BYTE,DW可以定义一个WORD,如果要定义一个"双字"就要使用伪指令"DD(Define Double word)"。如果32位指针不是使用DD伪指令定义的,则使用LES指令编制的程序会出现编译错误。<br>
</font>
  段地址并不是只能装入ES寄存器,还可以装入DS寄存器,相应的指令就是LDS(Load DS with pointer),用法及注意事项与LES指令相同,不再过多讨论。<br>
  (7)CPU控制指令
</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 &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="page288.html">上一页</a> <a href="page290.html">下一页</a> <a href="page291.html">下一章</a></p>
</body>
</html>

⌨️ 快捷键说明

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