📄 masm3.htm
字号:
<i>
<p align="JUSTIFY"> 013A EA MOV A,R2</p>
<p align="JUSTIFY"> 013B E502 MOV A,COUNT</p>
</i></font><font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY"></p>
</font><font face="宋体" lang="ZH-CN" size=3></font><b><font face="宋体" lang="ZH-CN">九、DB</font></b><b><font face="宋体" lang="ZH-CN">
</font></b><b><font face="宋体" lang="ZH-CN">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>标号:</font><font face="Arial" size=3>
DB </font><font face="宋体" lang="ZH-CN" size=3>表达式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>表达式中有字符串时,以单引号“</font><font face="Arial" size=3>'</font><font face="宋体" lang="ZH-CN" size=3>”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>例如:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> <i>DB 00H 01H 03H 46H</i></p>
<i>
<p align="JUSTIFY"> DB 'This is a demo!'</p>
</i></font><b>
<p align="JUSTIFY"> <font face="宋体" lang="ZH-CN"> </font><font face="宋体" lang="ZH-CN">十、</font><font face="Arial">DW</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> DW</font><font face="宋体" lang="ZH-CN" size=3>为以字节为单元(十六位二进制)来给一个的存储区赋值,其格式为:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>标号:</font><font face="Arial" size=3>
DW </font><font face="宋体" lang="ZH-CN" size=3>表达式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>例如:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> <i>0000 3035 D46B DW 12341,54379,10110100101110B</i></p>
<i>
<p align="JUSTIFY"> 0004 2D2E</p>
<p align="JUSTIFY"> 0006 4344 4243 DW 'ABCD','BC','A'</p>
<p align="JUSTIFY"> 000A 0041</p>
<p align="JUSTIFY"> 000C 2868 02E8 DW 456*375h,83+295h,'YZ',72h-456</p>
<p align="JUSTIFY"> 0010 595A FEAA</p>
</i></font><b>
<p align="JUSTIFY"> <font face="宋体" lang="ZH-CN"> </font><font face="宋体" lang="ZH-CN">十一、</font><font face="Arial">DS</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋体" lang="ZH-CN" size=3>为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋体" lang="ZH-CN" size=3>伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用DS伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。下例中</font><font face="Arial" size=3>0173</font><font face="宋体" lang="ZH-CN" size=3>处有一条</font><font face="Arial" size=3>DS
9</font><font face="宋体" lang="ZH-CN" size=3>,则空出</font><font face="Arial" size=3>9</font><font face="宋体" lang="ZH-CN" size=3>个字节,下一第指令被汇编到</font><font face="Arial" size=3>017C</font><font face="宋体" lang="ZH-CN" size=3>处;在</font><font face="Arial" size=3>017C</font><font face="宋体" lang="ZH-CN" size=3>处空出</font><font face="Arial" size=3>1BH</font><font face="宋体" lang="ZH-CN" size=3>个单元,在这些字节中被</font><font face="Arial" size=3>27H</font><font face="宋体" lang="ZH-CN" size=3>所填充。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> DS</font><font face="宋体" lang="ZH-CN" size=3>指令的格式如下:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>标号:</font><font face="Arial" size=3>
DS </font><font face="宋体" lang="ZH-CN" size=3>表达式1,表达式2</font></p>
<font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">表达式1定义了存储区的长度(以字节为单位)。这个变元不能省略。表达式2是可选择的,它的值低8位用以填入所定义的存储区。</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>若省略则这部分存储单元不处理。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>例:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> 0000 04 INC A</p>
<p align="JUSTIFY"> 0001 DS 9</p>
<p align="JUSTIFY"> 000A 04 INC A</p>
<p align="JUSTIFY"> 000B DS 1BH,27H</p>
<p align="JUSTIFY"> 0026 04 INC A</p>
</font></i><b>
<p align="JUSTIFY"> <font face="宋体" lang="ZH-CN"> </font><font face="宋体" lang="ZH-CN">十二、</font><font face="Arial">INCLUDE</font><font face="Arial">
</font>
<font face="Arial">
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令用于链接源文件,即将一个源文件插入到另一个源文件中。它有一个参数,指出将要插入的文件名,该文件名中可包括驱动器名和路径名。若文件没有扩展名,则默认为是ASM。但待插入的文件必须是可以打开的。若文件打开操作失败,则产生致命错误,汇编将停止运行。反之,汇编程序将文件内容读入并按源代码处理。当遇到文件结速符时,汇编程序返回到</font><font face="Arial" size=3>INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令处继续身下处理源程序。被插入的文件在程序清单中以“I”开头。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>本宏汇编版本支持级嵌套,可在程序中用</font><font face="Arial" size=3>INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令插入任意多个文件,但是,在一般情况下DOS允许打开的文件数量是有限的,如果用户需要打开较多的文件,则必须在CONFIG.SYS文件中加入FILES=4</font><font face="Arial" size=3>0</font><font face="宋体" lang="ZH-CN" size=3>或更多的值,若超过8级嵌套或打开的文件太多,则产生致命错误,汇编中止运行。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令提供了模块化程序设计手段,在汇编程序处理主程序时,模块被插入,尽管这不等价于链接和装配可重定位的目标模块,但它具有类似的功能,被插入的源文件中不应该包含END伪指令,否则,汇编就会提前停止运行,END伪指令只能出现在主程序中。此外,在主程序进行汇编前所有附加的源文件必须通过汇编,产生相应的HEX及LST文件,由于附加的文件没有END伪指令,因此,附加文件汇编时,汇编程序将显示:“没有结束语句”的错误,但并不影响与主程序的链接。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>下面是一个使用</font><font face="Arial" size=3>INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令的例子,其主程序的源文件MAIN.ASM为:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> ;MAIN.ASM</p>
<p align="JUSTIFY"> ORG 27H</p>
<p align="JUSTIFY">START:</p>
<p align="JUSTIFY"> CLR A</p>
<p align="JUSTIFY"> MOV R3,A</p>
<p align="JUSTIFY"> INCLUDE MOD1</p>
<p align="JUSTIFY"> INC R5</p>
<p align="JUSTIFY"> INCLUDE MOD2.ASM</p>
<p align="JUSTIFY"> DEC R3</p>
<p align="JUSTIFY"> END START</p>
</font></i>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>主程序为带有END伪指令的完整的源文件。程序中有两</font><font face="Arial" size=3>INCLUDE</font><font face="宋体" lang="ZH-CN" size=3>伪指令,分别将两附加的文件MOD1.ASM及MOD2.ASM链接到主程序中。以下是这两个文件。</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY"> ;MOD1.ASM</p>
<p align="JUSTIFY"> MOV R2,#31H</p>
<p align="JUSTIFY"> MOV R5,#18H</p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"> ;MOD2.ASM</p>
<p align="JUSTIFY"> MOV R6,#47H</p>
<p align="JUSTIFY"> ANL A,#07H</p>
<p align="JUSTIFY"> MOV R1,A</p>
</font></i><font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">注意MOD1.ASM及MOD2.ASM均没有END指令。</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>在进行汇编时必须先对MOD1.ASM和MOD2.ASM进行汇编,然后在汇编MAIN.ASM,由于上两个文件没有END伪指令,所以在汇编时会出现错误提示,不用管它,继续下面的工作,就可以得到正确的结果。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>以下是形成的列表文件:</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 1</p>
<p align="JUSTIFY"> ;MOD2.ASM</p>
<p align="JUSTIFY"> MOV R6,#47H</p>
<p align="JUSTIFY"> ANL A,#07H</p>
<p align="JUSTIFY"> MOV R1,A</p>
<p align="JUSTIFY"> 08-27-96</p>
<p align="JUSTIFY"> ;MAIN.ASM</p>
<p align="JUSTIFY"> 0027 ORG 27H</p>
<p align="JUSTIFY"> START:</p>
<p align="JUSTIFY"> 0027 E4 CLR A</p>
<p align="JUSTIFY"> 0028 FB MOV R3,A</p>
<p align="JUSTIFY">I INCLUDE MOD1</p>
<p align="JUSTIFY">I ;MOD1.ASM</p>
<p align="JUSTIFY">I0029 7A31 MOV R2,#31H</p>
<p align="JUSTIFY">I002B 7D18 MOV R5,#18H</p>
<p align="JUSTIFY">I</p>
<p align="JUSTIFY"> 002D 0D INC R5</p>
<p align="JUSTIFY">I INCLUDE MOD2.ASM</p>
<p align="JUSTIFY">I ;MOD2.ASM</p>
<p align="JUSTIFY">I002E 7E47 MOV R6,#47H</p>
<p align="JUSTIFY">I0030 5407 ANL A,#07H</p>
<p align="JUSTIFY">I0032 F9 MOV R1,A</p>
<p align="JUSTIFY"> 0033 1B DEC R3</p>
<p align="JUSTIFY"> 0027 END START</p>
<p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version
3.03 Page 2</p>
<p align="JUSTIFY"> 08-27-96</p>
<p align="JUSTIFY"> ;%T Symbol Name Type Value</p>
<p align="JUSTIFY"> START . . . . . . . . . . . . . L 0027</p>
<p align="JUSTIFY"> ;%Z</p>
<p align="JUSTIFY"> 00 Errors (0000)</p>
</font></i><b><font face="宋体" lang="ZH-CN"> <a name="_Toc416236569">十三、TITL</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>TITLE伪指令用于在列表文件页头建立一个标题,其格式为:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>$TITLE</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>标题行</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>这里标量行就是将出现在页头的标量与通常的字符串定义不同。这里标量行不加引号。汇编从$TITLE之后的第一个可打印字符开始,到回车符之间的字符串作为标量标量的最大长度是6</font><font face="Arial" size=3>0</font><font face="宋体" lang="ZH-CN" size=3>个字符,基标量行省略,则标题行为空行。若TITLE伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。</font></p>
<b><font face="宋体" lang="ZH-CN"> <a name="_Toc416236570">十四、PAGE</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>PAGE伪指令用于形成新的一中定义一面的行数。其格式为:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>$PAGE</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>表达式</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>若表达</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>式缺省则开始新的一页,若有表达式,则每页行数重新定义。汇编开始时页长为66行。一页中除出页外,剩余55行用于打印源程序,这一格式适用于标准打印纸。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>如果变元值小于66,页内可打印的源代码行将相应减少。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>页长变元是16位字节,因而每页最长可定义到65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用</font><font face="Arial" size=3>/N</font><font face="宋体" lang="ZH-CN" size=3>选项,页长就是65535。</font></p>
<b><font face="宋体" lang="ZH-CN"> <a name="_Toc416236571">十五、LIST与NOLIST</a>
<p></p>
</font></b>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>它们的格式为:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>$LIST</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>$NOLIST</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>LIST伪指令使汇编时主生程序清单,但即使不用该指令,汇编也会自动产生清单。但如果使用了NOLIST伪指令后需要继续主生清单则必须使用LIST伪指令。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件。当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加.L附加项,且在源代码的第一行加上NOLIST指令。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>使用NOLIST伪指令与附加项</font><font face="Arial" size=3>/L</font><font face="宋体" lang="ZH-CN" size=3>不同之处是NOLIST伪指令可加在源程序中,与LIST伪指令配合使用,使源程序中某些部分不产生清单。而不加附加项</font><font face="Arial" size=3>/L</font><font face="宋体" lang="ZH-CN" size=3>则不产生任何程序清单。不过,不管有无$NOLIST伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代码行及错误信息</font></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN"><a name="_Toc416236572">十六、NOCODE</a>
</font></b></p>
<b><font face="宋体" lang="ZH-CN">
<p></p>
</font></b>
</ol>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>其格式为</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>$NOCODE</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。有关条件汇编结构在下面介绍。如果没有这条伪指令,汇编将主生所有条件下的清单,不论其真值是否为真。但是假的条件,不产生目标码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当使用NOCODE伪指令时,程序清单与源程序并非逐行对应。</font></p>
<b><font face="黑体" lang="ZH-CN" size=5>
<p align="center"><a href="dpjjx.htm"><img src="back1.gif" width="43" height="55" border="0"></a>
</font></b>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -