汇编语言出错信息说明

合集下载

汇编伪指令和编译出错说明

汇编伪指令和编译出错说明

汇编伪指令和编译出错说明ASM-51 宏汇编使用手册A51与ASM51基本相同ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。

源程序的编写完全采用 Inter标准助记符和行格式。

在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。

此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。

当然,这也是要烧写到单片机ROM中的代码。

1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。

1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。

ASM。

(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。

列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。

目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。

进行模拟/调试,或直接用于硬件仿真器上运行。

1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。

(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如MOV ,DEC等)。

其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。

下同。

(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。

汇编语言常见错误指令解决办法

汇编语言常见错误指令解决办法

(1) MOV DS, 2010H ;立即数不能传送到DS(2) PUSH AL ;栈操作,操作数类型必须为WORD类型(3) MOV DX,[SP] ;SP寄存器不能做间址寄存器(4) IN AL,0A00H ;I/O指令的直接寻址,地址只能为8位(5) XCHG CL,CH ;正确(6) SHR AX,3 ;移位超过一位时,应采用CL寄存器间址(7) AAA CX ;非组合的BCD码加法调整AAA指令应为隐含操作数(8) ADD [BP+DI] ;加法指令ADD,缺少源操作数(9) OUT DX,CL ;I/O指令操作数只能用AX、AL提供,端口地址可以是8位的直接地址或用DX间址(10)CBW BH ;符号扩展指令为隐含操作数(11)ADD 03ECH ;加法指令应为双操作数指令,立即数不能做目的操作数(12)MOV BX, [SI+DI] ;源操作数形式错误,SI和DI不能同时做为间址寄存器(13)MOV DI, [AX] ;AX不能做为间址寄存器(14)OUT 258H, BX ;I/O指令格式错误,见(9)题的解释(15)SHL AX, 3 ;移位指令,位移位数大于1时,应用CL来指明(16)MOV 64H,AL ;立即数不能做为目的操作数(17)ADD AL,6600H ;源、目的操作数的类型不一致(18)MOV[BX],[SI];传送指令中,两个操作数不能同时为存储器操作数(19)XCHG AX,8800H ;交换指令的操作数不能使用立即数(20)MOV AX,[BX+DX];传送指令的源操作数,不能使用立即数(21)LEA BX,1000H;有效地址传送指令的源操作数不能为立即数,必须是存储器操作数(22)DIV 0010H ;正确(23)LEA DX,DI ;同(21)题,源操作数不能为寄存器操作数(24)MUL AX,200H ;乘法指令的目的操作数是隐含的,不能出现在指令中(25)MOV AX, [BX+BP];传送指令中源操作数格式错,BX和BP不能同时为间址寄存器(26)CMP [BX], [SI] ;比较指令的两个操作数不能同时为存储器操作数(27)OUT DX, BX ;I/O指令中,源操作数只能使用AL或AX寄存器(28)AND OFH,AL ;“与”指令中,目的操作数不能使用立即数(29)SAL [BX],CX ;移位指令,移位位移不能用CX寄存器指明(30)JMP FAR [BX+SI] ;转移指令中转移的目标地址表达方式错误;如果是段内间接转移,应为:JMP WORD PTR[BX+SI];如果是段间间接转移,应为:JMP DWORD PTR[BX+SI](31)JNZ AAA;不相等转移指令中,符号地址(标识符)不能使用系统中的保留字(32)JMP NEXT ;正确(33)SBC AX, [DX] ;指令助记符错,源操作数表示方式错(34)MOV CS,DS;段寄存器之间不能传送数据,CS寄存器也不能做为目的操作数(35)ADD DS, AX ;加法指令中段寄存器不能做为操作数(36)MOV AL,CX ;源、目的操作数的类型不一致,见(17)题(37)INC [BX];没有指定存储器操作数类型(38)MOV CL,A8H;源操作数为16进制的立即数,16进制数以字母开头时应在前面加“0”(39)MOV ES,DS ;错同(34)题(40)IN AL,BX ;I/O指令端口地址表示错误,只能用8位立即数或DX 间址。

汇编语言程序常见错误分析

汇编语言程序常见错误分析

根据上表所反映的情况,笔者作了如下数据统计及分析:1、能正常登录的网站注249个,占调查总体样本容量的68.06%,不能登录的占31.94%,说明甘肃旅游网站的硬件建设依然存在较多问题,或者网站的所有方申请了域名后由于某种原因而放弃了其使用权。

2、在能统计出网站设计建设方的29个网站中,企业/组织自主开发的网站4个,占13.79%;委托其他企业/组织开发的网站25个,占86.21%。

说明甘肃旅游企业或组织缺乏技术,自主开发能力低。

3、能正常登录且能统计主页栏目数网站(45个)的主页栏目数平均值为9.71,这在一定程度上反映出甘肃旅游网站内容较为单一,这可能也是影响浏览量的一个因素。

4、有外文(含中文繁体)版注3网页的网站14个,占能正常登录的网站总数的28.57%,没有建设外文网业的比重较大(71.43%)。

说明甘肃旅游企业/组织的对外意识淡薄。

由于语言障碍,致使甘肃数量众多的优质旅游资源不能直接通过网络来吸引更多的国外游客,这也在一定程度上影响了国际客源地市场的来甘旅游量。

5、有在线预定(包括酒店、机/车票、线路预定等)功能的网站29个,占能正常登录网站总数的59.18%。

说明甘肃旅游企业/组织已经具备了在线交易的意识。

有在线支付功能的网站4个,占有在线预定功能网站总数的13.79%。

说明甘肃旅游网站实际能进行在线交易的很少,绝大部分只是简单的介绍旅游知识和旅游线路等,以信息公布为主要内容,对实现供需双方网上信息即时交换和网上交易等功能不全,不能真正发挥出电子商务网站的作用。

甘肃旅游电子商务仍处于较低发展层次。

6、值得一提的是,兰州雁滩宾馆的网站(yantanhotel.com),只有英文版,而没有中文版,链接的全是外国酒店,且与本酒店经营业务毫无联系。

白银区旅游网(byqtour.com)、崇信旅游网(chongxintour.com)的页面全是英文而无中文,且与旅游毫无联系。

打开甘肃旅游(xoxo113.8u8.com)网站,看到的却是推荐网民注册免费邮箱的信息。

[讲解]汇编语言中常见的错误

[讲解]汇编语言中常见的错误

汇编语言中常见的错误(1)Block nesting error 块嵌套错误嵌套的过程、段、结构、宏定义、重复块定义等不恰当地结束。

(2)Extra characters on line 语句行上有额外字符当在语句行上接收到定义指令、命令语句的足够信息时,还有其它多余字符。

(3)Unknow symbol type.不认识的符号类型符号语句,在类型字段内有不能识别的符号。

(4)Symbol is multi-defined.重复定义符号符号在标号域中出现两次以上。

(5)bymbol not defined.符号未定义操作数域或操作码域引用了未在标号域中出现过的标号。

(6)Phase error between passes.两次扫描中间的步骤错程序中有二义性的指令语句。

(7)Symbol type usage illegal.符号类型用法错使用PUBLIC语句中的符号用法错。

(8)Symbol is reserved word.符号是保留字非法地使用了汇编程序的保留字。

(9)Division by 0 or overflow.除法被0除或溢出在除法指令语句中,除数为0或商超出允许范围。

(10)Operand type must match.操作数类型必须匹配在要求操作数必须匹配的情况下.汇编程序得到了参量不同的类型和大小。

(11)Value is out of range. 值超出范围所使用的数值超出了使用范围。

(12)Relative jump out range. 相对转移超出范围相对转移超出了当前指令的范围(一128一127个字节)。

(13)No or unreachable CS. 没有或不能达到CS 企图转移至不可达到的标号。

(14)Operand expected.希望有操作数。

汇编语言常见错误信息解释

汇编语言常见错误信息解释

汇编程序在对源程序的汇编过程中,若检查出某语句有语法错误,随时在屏幕上给出出错信息.如操作人员指定的列表文件名(即.LST),汇编程序亦将在列表文件中出错的下面给出出错信息,以便操作人员即时查找错误,给予更正.MASM5.0出错信息格式如下:源程序文件行:WARNING/ERROR错误信息码:错误描述信息其中,错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:'2'为严重错误,'4'为严肃警告,'5'为建议性警告,最后三位为错误编号.错误编号错误描述Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局1Extra characters on line一语句行有多余字符,可能是语句中给出的参数太多2Internal error-Register already defined这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft 公司联系3Unkown type specifer未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等4Redefinition of symbol符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误5Symbol is multidefined符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误6Phase error between passes两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MAS M时使用/D 任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误7Already had ELSE clause已有ELSE语句.在一个条件块里使用多于一个的ELSE语句8Must be in conditional block没有在条件块里.通常是有ENDIF或ELSE语句,而无IF 语句9Symbol not defined符号未定义,在程序中引用了未定义的标识符10Syntax error语法错误.不是汇编程序所能识别的一个语句11Type illegal in context指定非法类型.例如对一个过程指定BYTE类型,而不是NEAR或FAR12Group name must be unique组名应是唯一的.作为组名的符号作为其他符号使用13Must be declared during pass 1必须在第一遍扫描期间定义.在第一遍扫描期间,如一个符号在未定义前就引用,就会出现这种错误.14Illegal public declaration一个标识符被非法的指定为PUBLIC类型15Symbol already defferent kind重新定义一个符号为不同种类符号.例如一个段名重新被当作变量名定义使用16Reserved word used as symbol把汇编语言规定的保留字作标识符使用17Forward reference illegal非法的向前引用.在第一遍扫描期间,引用一个未定义符号.18Operand must be register操作数位置上应是寄存器,但出现了标识符19Wrong type of register使用寄存器出错20Operand must be segment or group应该给出一个段名或组名.例如ASSUME语句中应为某段寄存器和指定一个段名或组名,而不应是别的标号或变量名等21Symbol has no segment不知道标识符的段属性22Operand must be type specifier操作数应给出类型说明,如NEAR,FAR,BYTE等23Symbol alread defined locally以被指定为内部的标识符,企图在EXTRN语句中又定义外部标识24Segment paraneters are changed段参数被改变.如同一标识符定义在不同段内25Improper align/combin type段定义时的定位类型/组合类型使用出错26Reference to multidefined symbol指令引用了多重定义的标识符27Operand expected需要一个操作数,只有操作符28Operator expected需要一个操作符,但只有操作数29Divdsion by 0 or overflow除以0或溢出30Negative shift count运算符SHL或SHR的移位表达式值为负数31Operand type must match操作数类型不匹配.双操作数指令的两个操作数长度不一致,一个是字节,一个是字32Illegal use of external外部符号使用出错33Must be record field name应为记录字段名.在记录字段名位置上出现另外的符号34Must be record name or field name应为记录名或记录字段名.在记录名或记录字段名位置上出现另外的符号35Operand must be size应指明操作数的长度(如BYTE,WORD等).通常使用PTR运算即可改正36Must be variable,label,or constant应该是变量名,标号,或常数的位置上出现了其他信息37Must be stucture field name应该为结构字段名.在结构字段名位置上出现了另外的符号38Lefe operand must segment操作数的左边应该是段的信息.如设DA1,DA2均是变量名,下列语句就是错误的:\"MOVAX,DA1:DA2\".DA1位置上应使用某段寄存器名39One operand must constant操作数必须是常数.40Operand must be in same segment or one constant\"—\"运算符用错.例如\"MOV AL,—VAR\",其中VAR是变量名,应有一常数参加运算.又如两个不同段的变量名相减出错41Normal type operand expected要求给出一个正常的操作数.42Constant expected要求给出一个常数.43Operand must have segment运算符SEG用错.44Must be associated with data在必须与数据段有关的位置上出现了代码段有关的项45Must be associated with code在必须与代码段有关的位置上出现了数据段有关的项46Multiple base registers同时使用了多个基址寄存器.如\"MOV AX ,[SI][BP]\"47Multiple index registers同时使用了多个变址寄存器.如\"MOV AX ,[SI][DI]\"48Must be index or base register指令仅要求使用基址寄存器或变址寄存器,而不能使用其他寄存器.49Illegal use of register非法使用寄存器出错50Value is out of range数值太大,超过允许值.例如:\"MOV AL ,100H\"51Operand not in current CS ASSUME segment操作数不在当前代码段内.通常指转移指令的目标地址不在当前CS段内52Improper operand type操作数类型使用不当.例如:\"MOV VAR1,VAR2\".两个操作数均为存储器操作数,不能汇编出目标代码53Jump out of range by %ld byte条件转移指令跳转范围超过-128~ 127个字节.出错厂,信息同时给出超过的字节数54Index displacement must be constant变址寻址的位移量必须是常数55Illegal register value非法的寄存器值.目标代码中表达寄存器的值超过756Immediate mode illegal不允许使用立即数寻址.例如\"MOV DS,CODE\"其中CODE是段名,不能把段名作为立即数传送给段寄存器DS57Illegal size for operand使用操作数大小(字节数)出错.例如:使用双字的存储器操作数58Byte register illegal要求用字寄存器的指令使用了字节寄存器.如PUSH,POP指令的操作数寄存器必须是字寄存器59Illegal uer of CS register指令中错误使用了段寄存器CS.如:\"MOV CS,AX\"CS不能做目的操作数60Must be accumulator register要求用AX或AL的位置上使用可其他寄存器.如IN,OUT指令必须使用累加器AX或AL61Improper uer of segment register不允许使用段寄存器的位置上使用了段寄存器.如\"SHL DS,1\"62Missing or unreachable CS试图跳转去执行一个CS达不到的标号.通常是指缺少ASSUME语句中CS与代码段相关联63Operand combination illegal双操作数指令中两个操作数组合出错64Near JMP/CALL to different CS试图用NEAR属性的转移指令跳转到不在当前段的一个地址65Label cannot have segment override段前缀使用出错66Must have instuction agter prefix在重复前缀REP,REPE,REPNE后面必须有指令67Cannot override ES for destination串操作指令中目的操作数不能用其他段寄存器替代ES68Cannot address with srgment register指令中寻找一个操作数,但ASSUME语句中未指明哪个段寄存器与该操作数所在段有关联69Must be in segment block指令语句没有在段内70Cannot use EVEN or ALIGN with byte alignment在段定义伪指令的定位类型中选用BYTE,这时不能使用EVEN或ALIGN伪指令71Forward needs override or FAR转移指令的目标没有在源程序中说明为FAR属性,可用PTR指定72Illegal value for DUP count操作符DUP前的重复次数是非法的或未定义73Symbol id already external在模块内试图定义的符号,它已在外部符号伪指令中说明74DUP nesting too deep操作数DUP的嵌套太深75Illegak use of undefinde operand( )不定操作符\" \"使用不当.例如\"DB 10H DUP( 2)\"76Too many valer for struc or record initialization在定义结构变量或记录变量时,初始值太多77Angle brackets requored around initialized list定义结构体变量时,初始值未用尖括号()括起来78Directive illegal structure在结构体定义中的伪指令使用不当.结构定义中的伪指令语句仅二种:分号(;)开始的注释语句和用DB,DW等数据定义伪指令语句79Override with DUP illegal在结构变量初始值表中使用DUP操作符出错Field cannot be overridden在定义结构变量语句中试图对一个不允许修改的字段设置初值81Override id of wrong type在定义结构变量语句中设置初值时类型出错82Circular chain of EQU aliases用等值语句定义的符号名,最后又返回指向它自己.如:A EQU BB EQU A83Cannot emulate cooprocessor opcode 仿真器不能支持的8087协处理器操作码84End of file,not END directive 源程序文件无END文件85Data emitted with no segment 语句数据没有在段内汇编语言程序设计1.在MASM编译时产生警告错误“Operand types must match”能够忽略吗?答:不能,如语句:MOV AL, BX就会产生上述错误信息,原因是AL和BX两个操作数的字长不匹配。

汇编语言出错信息

汇编语言出错信息

27 Operand was expected
Operator was expected
汇编程序需要的是操作符,但得到的却是其 它内容
29 Division by 0 or overflow 给出一个用零作除数的表达式
30 Shift count is negative 产生的位移表达式使移位计数值为负数
79 Override with DUP is illegal
80 Field cannot be overridden
81 Override is of wrong type
82
Register ret
can't
be
farward
83
Circular aliases
chain
of
EQU
84
Feature not supported be the small Assembler(ASM)
20 Must be segment or group 希望给出段或组,而不是其它
21 Symbol has no segment
想使用具有 SEG 的变量,而这个变量不能识 别段
22 Must be symbol type
必须是 WORD,DW,QW,BYTE 或 TB,但接收 的是其它内容
23 Already defined locally
由于操作数不在当前 IP 段中,因此不能存 取
52 Improper operand type
使用的操作数不能产生操作码
53 Relative jump out range 指定的转移超出了允许范围(-128~+127)
54 Index displ must be constant 试图使用脱离变址寄存器的变量偏移值

汇编程序MASM5.0编译出错信息表中文说明

汇编程序MASM5.0编译出错信息表中文说明

汇编程序MASM 5.0编译出错信息表-中文说明用MASM 5.0对汇编程序进行汇编的时候,如果检查出某行语句有错误,就会在屏幕上给出出错信息,若指定了列表文件(.LST),MASM 5.0也会在列表文件中给出错误信息。

MASM5.0出错信息格式: WARNING/ERROR错误信息码:错误描述信息错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:2为致命错误,4为严肃警告,5为建议性警告,最后三位为错误编号。

下面的手册中给出了错误编号、错误描述以及中文解释说明,方便大家查阅,包括MASM 5.0常见编译错误。

000 Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局001 Extra characters on line一语句行有多余字符,可能是语句中给出的参数太多002 Internal error-Register already defined这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系003 Unkown type specifer未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等004 Redefinition of symbol符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误005 Symbol is multidefined符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误006 Phase error between passes两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使用/D 任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误007 Already had ELSE clause已有ELSE语句.在一个条件块里使用多于一个的ELSE语句008 Must be in conditional block没有在条件块里.通常是有ENDIF或ELSE语句,而无IF 语句009 Symbol not defined符号未定义,在程序中引用了未定义的标识符010 Syntax error语法错误.不是汇编程序所能识别的一个语句011 Type illegal in context指定非法类型.例如对一个过程指定BYTE类型,而不是NEAR或FAR012 Group name must be unique组名应是唯一的.作为组名的符号作为其他符号使用013 Must be declared during pass 1必须在第一遍扫描期间定义.在第一遍扫描期间,如一个符号在未定义前就引用,就会出现这种错误.014 Illegal public declaration一个标识符被非法的指定为PUBLIC类型015 Symbol already defferent kind重新定义一个符号为不同种类符号.例如一个段名重新被当作变量名定义使用016 Reserved word used as symbol把汇编语言规定的保留字作标识符使用017 Forward reference illegal非法的向前引用.在第一遍扫描期间,引用一个未定义符号.018 Operand must be register操作数位置上应是寄存器,但出现了标识符019 Wrong type of register使用寄存器出错020 Operand must be segment or group应该给出一个段名或组名.例如ASSUME语句中应为某段寄存器和指定一个段名或组名,而不应是别的标号或变量名等021 Symbol has no segment不知道标识符的段属性022 Operand must be type specifier操作数应给出类型说明,如NEAR,FAR,BYTE等023 Symbol alread defined locally以被指定为内部的标识符,企图在EXTRN语句中又定义外部标识024 Segment paraneters are changed段参数被改变.如同一标识符定义在不同段内025 Improper align/combin type段定义时的定位类型/组合类型使用出错026 Reference to multidefined symbol指令引用了多重定义的标识符027 Operand expected需要一个操作数,只有操作符028 Operator expected需要一个操作符,但只有操作数029 Divdsion by 0 or overflow除以0或溢出030 Negative shift count运算符SHL或SHR的移位表达式值为负数031 Operand type must match操作数类型不匹配.双操作数指令的两个操作数长度不一致,一个是字节,一个是字032 Illegal use of external外部符号使用出错033 Must be record field name应为记录字段名.在记录字段名位置上出现另外的符号034 Must be record name or field name应为记录名或记录字段名.在记录名或记录字段名位置上出现另外的符号035 Operand must have size应指明操作数的长度(如BYTE,WORD等).通常使用PTR运算即可改正036 Must be variable,label,or constant应该是变量名,标号,或常数的位置上出现了其他信息037 Must be stucture field name应该为结构字段名.在结构字段名位置上出现了另外的符号038 Lefe operand must segment操作数的左边应该是段的信息.如设DA1,DA2均是变量名,下列语句就是错误的:"MOV AX,DA1:DA2".DA1位置上应使用某段寄存器名039 One operand must constant操作数必须是常数.040 Operand must be in same segment or one constant—运算符用错.例如"MOV AL,—VAR",其中VAR是变量名,应有一常数参加运算.又如两个不同段的变量名相减出错041 Normal type operand expected要求给出一个正常的操作数.042 Constant expected要求给出一个常数.043 Operand must have segment运算符SEG用错.。

编写汇编语言常见错误分析

编写汇编语言常见错误分析

编写汇编语言常见错误分析一、汇编软件汇编失败原因分析:这里采用Keil C51软件包中的宏汇编器A51作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成汇编失败,常见的汇编错误如下:1. 标号重复:常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。

2.标点符号以全角方式输入:汇编程序要求标点符号为半角方式,否则汇编失败。

可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。

3.数值#FFH 前遗漏0:根据要求应该在a~f前加0,写成#0FFH4.字母O和数字0搞混:有时候这两个字看上去完全相同,要注意哦~~5.标号后边遗漏':'6.标号使用了特殊字符:标号不能用指令助记符、伪指令、特殊功能寄存器名和8051在指令系统中用的“#”、“@”等,长度以2~6字符为宜,第一字母必须是英文字母。

比如:T1、T2、A、B这些字符有特定的含义,不允许用于标号。

7.AJMP跳转超过2K地址:AJMP属于短跳转命令,有2K地址范围的限制。

8.超过地址范围:JB P3.2,EXIT跳转超过-128~127个地址范围。

这个是最容易出现的错误!你有可能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把JB P3.2,EXIT转换成JNB P3.2,LD01AJMP EXITLD01: AJMP EXIT9.字母I和数字1混淆:冒失鬼的常见问题。

10.创造发明不存在的汇编语言指令:在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不认可。

11.符号“:”“;”最好用半角书写。

二、程序出错:1.寄存器重复调用:比如主程序中设定了R4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到R4,使R4的值发生紊乱,造成程序无法正常执行。

2.硬件不熟悉:单片机一般采用下拉输出,往往端口输出0驱动外设工作,和常见的正逻辑相反,容易搞错。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编程序出错信息说明
汇编程序出错信息


提示说明
0Block nesting error 嵌套过程、段、结构、宏指令、IRC、IRP或REPT不是正确结束,如嵌套的外层已终止,而内层还是打开状态。

1Extra characters on line 当一行上已接受了定义指令说明的足够信息,而又出现多余的字符。

2Register already defined汇编内部出现逻辑错误。

3Unknown symbol type 符号语句的类型字段中有些不能识别的东西。

4Redefinition of symbol在第二遍扫视时,连续地定义了一个符号。

5Symbol is multi-defined重复定义一个符号。

6Phase error between passes 程序中有模棱两可的指令,以至于在汇编程序的两次扫视中,程序标号的位置在数值上改变了。

7Already had ELSE clause在ELSE从句中试图再定义ELSE语句。

8Not in conditional block 在没有提供条件汇编指令的情况下,指定了ENDIF或ELSE。

9Symbol not defined符号没有定义
10Syntax error语句的语法与任何可识别的语法不匹配11Type illegal in context指定的类型在长度上不可接收
12Should have been group name给出的组名不符合要求
13Must be declared in pass1得到的不是汇编程序所要求的常数值,例如:向前引用的长度
14Symbol type usage illegal PUBLIC符号的使用不合法
15Symbol already different
kind
企图定义与以前定义不同的符号
16Symbol is reserved word企图非法使用一个汇编程序的保留字
17Forward reference is illegal向前引用必须是在第一遍扫视中定义过的
18Must be register 希望寄存器作为操作数,但用户提供的是符号而不是寄存器
19Wrong type of register 指定的寄存器类型并不是指令或伪操作所要求的,例如:ASSUME AX
20Must be segment or group希望给出段或组,而不是其它
21Symbol has no segment 想使用具有SEG的变量,而这个变量不能识别段
22Must be symbol type 必须是WORD,DW,QW,BYTE或TB,但接收的是其它内容
23Already defined locally 试图定义一个符号作为EXTERNAL,但这个符号已经在局部定义过了
24Segment parameters are
changed
对于SEGMENT的变量表与第一次使用该段的
情况不一样
25Not proper align/combine
type
SEGMENT参数不正确
26Reference to mult defined指令引用的内容已是多次定义过的
27Operand was expected 汇编程序需要的是操作数,但得到的却是其它内容
28Operator was expected 汇编程序需要的是操作符,但得到的却是其它内容
29Division by0or overflow给出一个用零作除数的表达式
30Shift count is negative产生的位移表达式使移位计数值为负数
31Operand type must be match 在自变量的长度和类型应该一致的情况下,汇编程序得到的并不一样
32Illegal use of external用非法的手段进行外部使用
33Must be record field name需要的是记录字段名,而得到的是其它东西
34Must be record or field name 需要的是记录名或字段名,但得到的是其它内容
35Operand must have size 需要的是操作数的长度,但得到的是其它内容
36Must be var,label,or
constant
需要的是变量、标号或常数,但得到的是其
它内容
37Must be structure field name需要的是结构字段名,但得到的是其它内容
38Left operand must have
segment
操作数的右边要求它的左边必须是某个段
39One operand must be const这是加法指令的非法使用
40Operands must be same or1
abs
这是减法指令的非法使用
41Normal type operand expected 当需要变量标号时,得到的却是STRUCT,FIFLDS,NAMES,BYTE,WORD或DW
42Constant was expected需要的是一个常量,得到的却是另外的内容43Operand must have segment SEG伪操作使用不合法
44Must be associated with data 有关项用的是代码,而这里需要的是数据,例如用一个过程取代DS
45Must be associated with code有关项用的是数据,而这里需要的是代码46Already have base register试图重复基地址
47Already have index register试图重复变址地址
48Must be index or base
register
指令需要基址或变址寄存器,而指定的是其
它寄存器
49Illegal use of register在指令中使用了CPU没有的寄存器50Value is out of range数值大于需要使用的
51Operand not in IP Segment 由于操作数不在当前IP段中,因此不能存取
52Improper operand type使用的操作数不能产生操作码
53Relative jump out range指定的转移超出了允许范围(-128~+127) 54Index displ must be constant试图使用脱离变址寄存器的变量偏移值55Illegal register value指定的寄存器值不能放入“reg”字段中
56No immediate mode 指定的立即方式或操作码都不能接收立即数
57Illegal size for item引用的项长度是非法的
58Byte register is illegal在上下文中,使用一个字节寄存器是非法的59CS register usage试图非法使用CS寄存器
60Must be AX or AL只能使用AX或AL寄存器
61Improper use of segment reg段寄存器使用不合法
62No or unreachable CS试图转移到不可到达的标号
63Operand combination illegal 在双操作数指令中,两个操作数的组合不合法
64Near Jmp/Call to different
CS
企图在不同的代码段执行NEAR转移或调用
65Label can't have seg
override
非法使用段取代
66Must have opcode after
prefix
使用前缀指令之后,没有正确的操作码说明
67Can't override ES segment企图非法地在一条指令中取代ES寄存器
68Can't reache with segment
reg
没有做变量可达到的那种假设
69Must be in segment block企图在段外产生代码
70Can't use EVEN on BYTE被提出的是一个字节段,但试图使用EVEN
segment
71Forward needs override目前不使用这个信息
72Illegal value for Dup count DUP计数必须是常数,不能是0或负数
73Symbol already external 企图在局部定义一个符号,但此符号已经是外部定义了
74DUP is too large for linke DUP嵌套太长,以至于从连接程序不能得到一个记录
75Usage of?
(indeterminate)bad
"?"使用不合适
76More values than defined with
77Only initiallize list legal 78Directive illegal in STRUC 79Override with DUP is illegal 80Field cannot be overridden 81Override is of wrong type
82Register can't be farward ret
83Circular chain of EQU aliases
84Feature not supported be the small Assembler(ASM)。

相关文档
最新文档