📄 masm4.htm
字号:
<p align="JUSTIFY"> 0001 CON 23H,65H,SPECIAL,57</p>
<p align="JUSTIFY">+0001 7A23 MOV R2,#23H</p>
<p align="JUSTIFY">+0003 7A23 MOV R2,#23H</p>
<p align="JUSTIFY">+0005 24C3 ADD A,#23H+5-65H</p>
<p align="JUSTIFY">+0007 53 54 52 DB 'STRINGSPECIAL'</p>
<p align="JUSTIFY">+000A 49 4E 47 53 50 45 43 49 41 4C</p>
<p align="JUSTIFY">+0014 7000 JNZ LAB57</p>
<p align="JUSTIFY">+ LAB57:</p>
<p align="JUSTIFY">+0016 6B XRL A,R3</p>
<p align="JUSTIFY"> 0000 END</p>
<p align="JUSTIFY"></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"> CON . . . . . . . . . . . . . . M 0000</p>
<p align="JUSTIFY"> LAB57 . . . . . . . . . . . . . L 0016</p>
<p align="JUSTIFY"> ;%Z</p>
<p align="JUSTIFY"> 00 Errors (0000)</p>
</font></i>
<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"> CON MACRO C1,C2,P1,P2,P3</p>
<p align="JUSTIFY"> MOV A,P1</p>
<p align="JUSTIFY"> IF C1</p>
<p align="JUSTIFY"> INC R3</p>
<p align="JUSTIFY"> MOV R4,A</p>
<p align="JUSTIFY"> ENDIF</p>
<p align="JUSTIFY"> IF C2</p>
<p align="JUSTIFY"> MOV R5,P2</p>
<p align="JUSTIFY"> ADDC A,P3</p>
<p align="JUSTIFY"> ELSE</p>
<p align="JUSTIFY"> MOV R1,P2</p>
<p align="JUSTIFY"> XRL A,R3</p>
<p align="JUSTIFY"> ENDIF</p>
<p align="JUSTIFY"> MOV @R1,A</p>
<p align="JUSTIFY"> ENDM</p>
<p align="JUSTIFY"> CLR A</p>
<p align="JUSTIFY"> MOV R3,#2AH</p>
<p align="JUSTIFY"> CON 0,0,#23H,#65H,R6</p>
<p align="JUSTIFY"> END</p>
</font></i>
<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"> 08-27-96</p>
<p align="JUSTIFY"> CON MACRO C1,C2,P1,P2,P3</p>
<p align="JUSTIFY"> MOV A,P1</p>
<p align="JUSTIFY"> IF C1</p>
<p align="JUSTIFY"> INC R3</p>
<p align="JUSTIFY"> MOV R4,A</p>
<p align="JUSTIFY"> ENDIF</p>
<p align="JUSTIFY"> IF C2</p>
<p align="JUSTIFY"> MOV R5,P2</p>
<p align="JUSTIFY"> ADDC A,P3</p>
<p align="JUSTIFY"> ELSE</p>
<p align="JUSTIFY"> MOV R1,P2</p>
<p align="JUSTIFY"> XRL A,R3</p>
<p align="JUSTIFY"> ENDIF</p>
<p align="JUSTIFY"> MOV @R1,A</p>
<p align="JUSTIFY"> ENDM</p>
<p align="JUSTIFY"> 0000 E4 CLR A</p>
<p align="JUSTIFY"> 0001 7B2A MOV R3,#2AH</p>
<p align="JUSTIFY"> 0003 CON 0,0,#23H,#65H,R6</p>
<p align="JUSTIFY">+0003 7423 MOV A,#23H</p>
<p align="JUSTIFY">+ IF 0</p>
<p align="JUSTIFY">+ INC R3</p>
<p align="JUSTIFY">+ MOV R4,A</p>
<p align="JUSTIFY">+ ENDIF</p>
<p align="JUSTIFY">+ IF 0</p>
<p align="JUSTIFY">+ MOV R5,#65H</p>
<p align="JUSTIFY">+ ADDC A,R6</p>
<p align="JUSTIFY">+ ELSE</p>
<p align="JUSTIFY">+0005 7965 MOV R1,#65H</p>
<p align="JUSTIFY">+0007 6B XRL A,R3</p>
<p align="JUSTIFY">+ ENDIF</p>
<p align="JUSTIFY">+0008 F7 MOV @R1,A</p>
<p align="JUSTIFY"> 0000 END</p>
<p align="JUSTIFY"></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"> CON . . . . . . . . . . . . . . M 0000</p>
<p align="JUSTIFY"> ;%Z</p>
<p align="JUSTIFY"> 00 Errors (0000)</p>
</font></i>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>程序中宏指令带有条件结构,并可以通过形参C1确定判别条件。</font></p>
<b><font face="Arial" size=5>
<p align="JUSTIFY">
</font>
<li><font face="Arial" size=5> </font><a name="_Toc416236575"></a> <font face="Arial" size=4></font><font face="黑体" lang="ZH-CN" size=4>第七节</font><font face="Arial" size=4>
</font><font face="黑体" lang="ZH-CN" size=4>汇编程序的出错信息</font></li>
<font face="黑体" lang="ZH-CN" size=4>
<p></p>
</font></b>
</ol>
</ol>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>一个汇编程序往往不可能一次编写就完全正确,总会有一些错误存在,MASM51在汇编时可以对源程序中存在的一些语法错误判别,并给出出错信息,出错信息将出现在屏幕上,并被写入到列表文件中去,我们可以根据出错信息对照源程序进行修改。</font></p>
<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><font face="Arial" size=3>aaaa)</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>描述性信息向用户提供错误的类型,以提供用户分析与纠正错误。</font><font face="Arial" size=3>aaaa</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>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>XX</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>Errors(0000)</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>其中XX为十六进制数表示的错误数量。</font></p>
<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>(1)</font><font face="Arial" size=3>Undefined
symbol</font></p>
<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>(2)</font><font face="Arial" size=3>Missing
Argumentin Expression</font></p>
<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>(3)</font><font face="Arial" size=3>Unblaanced
Parentheses</font></p>
<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>(4)</font><font face="Arial" size=3>ILLEGAL
EQUATE</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>表示把两个不同类型的量用等价伪指令连在一起,例如保留字的值1寄存器名等,它们不允许用等值伪指令来改变。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>(5)</font><font face="Arial" size=3>BADLY
ROFMED ARGUMENT</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>表示一个数字参数使用了非法的数字。例如二进制中出现除0与1以外的其他数字。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>(6)</font><font face="Arial" size=3>MISSING
END STATEMENT</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>源文件结束处没有</font><font face="Arial" size=3>END</font><font face="宋体" lang="ZH-CN" size=3>语句。源文件的结束处必须有一个</font><font face="Arial" size=3>END</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>(7)</font><font face="Arial" size=3>LABEL
NAME CONFLICTS WITH SYMBOL NAME</font></p>
<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>(8)</font><font face="Arial" size=3>MULTIPLY
DEFINED LABEL</font></p>
<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>(9)</font><font face="Arial" size=3>LABEL
ADDRESS CHANGED ON PASS 2</font></p>
<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>(10)</font><font face="Arial" size=3>UNRECOGNIZED
STATEMENT OR UNDEFINED ARGUMENT</font></p>
<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>(11)</font><font face="Arial" size=3>ADDRESS
OUT OF RANGE</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>转移地址超出该语句的范围,例如SJMP转移地址超过+127~-128的范围,另外JB、JNB、JZ、JNZ等指令也容易发生类错误。如果是SJMP、AJMP、ACALL等指令发生错误,则改正较为容易,只要将指令改为范围较在的即可,如将SJMP改为AJMP,将AJMP改为LJMP,将ACLL改为LCALL等,如果是JZ、JB、JNZ、JNB等指令发生此类错误,则要使用一些技工技巧,如下面程序1所示,NEXT标号已超出了JZ指令作用的范围,则可以改成程序2,使用一个中间标号NEXT1,然后从NEXT1跳转到NEXT处。</font></p>
<font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">例:</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> <i> </i></font><i><font face="宋体" lang="ZH-CN" size=3>.</font></i></p>
<i>
<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>JB</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>NEXT1</font></p>
<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>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>.</font></p>
<font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">NEXT1:</p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>AJMP</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>NEXT</font></p>
<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>
<p align="JUSTIFY"><font face="Arial" size=3><i> </i></font> <font face="宋体" lang="ZH-CN" size=3>(12)</font><font face="Arial" size=3>VALUE
OUT OF RANGE</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="center"><a href="dpjjx.htm"><img src="back1.gif" width="43" height="55" border="0"></a></p>
</font><font face="宋体" lang="ZH-CN" size=3></font>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -