📄 chapter4.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>第四章 汇编语言程序设计</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body bgcolor="#52748B" background="back2.jpg">
<h1 align="left"><font face="宋体" color="#FFFFFF"><big><big>第四章
汇编语言程序设计</big></big></font></h1>
<h2 align="left"><font face="宋体" color="#FFFFFF"><big><big>§4.1
编程和上机调试环境</big></big></font></h2>
<h3 align="left"><font face="宋体" color="#FFFFFF"><big><big>一、DEBUG环境</big></big></font></h3>
<blockquote>
<h4 align="left"><big><big><font face="宋体" color="#FFFFFF">1、进入DEBUG环境</font></big></big></h4>
<p align="left"><font face="宋体" color="#FFFFFF"><big><big>在系统的MS-DOS环境下,键入<u>DEBUG</big></big></font><font
FACE="宋体" size="5" color="#FFFFFF">↙</font></u></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">在DEBUG环境中,默认的数制为十六进制,只能使用数字地址。</font></p>
<h4 align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、DEBUG常用命令</font></h4>
<p align="left"><font face="宋体" size="5" color="#FFFF00">1)显示存储单元中的数据---D</font><font
FACE="宋体" size="5" color="#FFFFFF"> (Dump)</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_D</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">默认显示从0100H开始的数据。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_D 地址</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">显示从当前地址开始的80H个字节单元中的数据。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_D 0100</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_D 地址范围</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_D 0100 0120</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_D 地址 L长度</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_D 0100 L20</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">2)修改存储单元内容---E</font><font
FACE="宋体" size="5" color="#FFFFFF"> (Enter)</font><font face="宋体" size="5"
color="#FFFF00">和 F</font><font FACE="宋体" size="5" color="#FFFFFF">(Fill) </font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_E 地址
内容列表</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">以指定的内容修改指定范围存储单元的内容。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_E DS:0100 12‘ABC’8D</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">则修改了自0100H单元开始的5个字节单元的内容。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_E 地址</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">逐个单元修改。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_E DS:0100</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">系统显示原来该单元中的数据,可以在显示原数据之后键入修改内容。键入空格键,可以继续修改下一个字节单元的内容,直到键入回车键为止。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_F 地址 L长度
内容列表</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_F 0100 L5 12‘ABC’34</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_F 地址范围
内容列表</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如:_F 0100 0120
‘ABCDEF’</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">3)检查和修改寄存器的内容---R</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_R</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">显示所有的寄存器内容和标志位的状态。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">DEBUG环境中标志位状态的表示方法。</font></p>
</blockquote>
<div align="center"><center>
<table border="1" width="30%" bgcolor="#87C6C7">
<tr>
<td width="33%" align="center"><big>标志</big></td>
<td width="33%" align="center"><font face="Arial"><big>1</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>0</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>OF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>OV</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>NV</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>DF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>DN</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>UP</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>IF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>EI</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>DI</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>SF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>NG</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>PL</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>ZF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>ZR</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>NZ</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>AF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>AC</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>NA</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>PF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>PE</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>PO</big></font></td>
</tr>
<tr>
<td width="33%" align="center"><font face="Arial"><big>CF</big></font></td>
<td width="33%" align="center"><font face="Arial"><big>CY</big></font></td>
<td width="34%" align="center"><font face="Arial"><big>NC</big></font></td>
</tr>
</table>
</center></div>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_R 寄存器</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">显示和修改某个寄存器的内容。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">例如: _R BX</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_RF</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">显示和修改标志位的状态。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">4)运行</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_G [=起始地址] [断点地址]
[断点地址]...</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">由起始地址或当前的CS:IP开始,运行至指定的断点,并显示所有寄存器和标志位的值。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">5)单步运行</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_T [=起始地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">自起始地址处开始逐条执行指令,子程序中的指令也会逐条执行。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_P [=起始地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">自起始地址处开始逐条执行指令,子程序调用作为一条指令。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">6)汇编---A</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_A [起始地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">自指定的起始地址处可以输入汇编语言的指令。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">7)反汇编---U</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_U [起始地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">从指定的地址或者接着上一次的地址反汇编32个字节。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_U 地址范围</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">对指定范围的地址进行反汇编。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_U 地址 L长度</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">从指定的地址处开始反汇编L个地址单元。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">8)命名---N</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_N [路径名]文件名[.扩展名]</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">9)调入命令---L</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_L [地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">将用N命名的文件调入到指定地址开始的单元。地址若省略,从当前的CS:IP处开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_L 地址 驱动器号
扇区号 扇区数</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">10)写文件---W</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_W [地址]</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">将从指定地址处开始的、用BX和CX指定长度的数据写到用N命名的文件中。地址若省略,从当前的CS:IP处开始。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_W 地址 驱动器号
扇区号 扇区数</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">11)输入---I</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_I 口地址</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">12) 输出---O</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_O 口地址 数据</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">13)退出---Q</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">_Q</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> </font></p>
<p align="left"><font face="宋体" size="5" color="#00FFFF">其他不是经常使用的命令:</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF"> </font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">14)比较指定长度字节数据---C</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">_C 起始地址1 L字节长度
起始地址2</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">若指定地址和长度的数据不对应相等,则显示数据不相等的地址和其中的内容。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">15)显示两个十六进制数据的和与差---H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">_H 数据1 数据2</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">16)数据的块传送---M</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">_M 源地址 L指定长度
目标地址</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">17)数据检索---S</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">_S 起始地址
结束地址 检索的数据</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">若有要检索的数据,则显示该数据的地址。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、利用DEBUG生成*.COM文件</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1)进入DEBUG。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2)汇编 _A。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3)输入汇编语言指令。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">4)用N命名一个*.COM文件。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">5)用_R指定BX和CX的值。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">6)用_W写入文件。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">7)退出_Q。</font></p>
</blockquote>
<h3 align="left"><font face="宋体" color="#FFFFFF" size="6">二、宏汇编环境</font></h3>
<blockquote>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">1、利用编辑软件编制汇编语言源文件。例如,使用QE。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">2、利用MASM.EXE汇编源文件,生成*.
OBJ目标文件。</font></p>
<p align="left"><font FACE="宋体" size="5" color="#FFFFFF">3、利用LINK.EXE连接目标文件,生成*.
EXE可执行文件。</font></p>
<p align="left"> </p>
</blockquote>
<h2 align="center"><font face="宋体" color="#FFFFFF"><big><big>§4.2 伪指令</big></big></font></h2>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -