📄 +Ҧ
字号:
<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>
<FONT face=黑体 lang=ZH-CN size=4>
<P></P></FONT></B></LI></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="http://go.163.com/~czlyzhj/dpjjx.htm"><IMG border=0
height=55 src="汇编指令的格式(宏指令).files/back1.gif" width=43></A></P></FONT><FONT
face=宋体 lang=ZH-CN size=3></FONT></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -