《汇编程序MASM 5.0编译出错信息表-中文说明.doc》由会员分享,可在线阅读,更多相关《汇编程序MASM 5.0编译出错信息表-中文说明.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编程序MASM 5.0编译出错信息表-中文说明 用MASM 5.0对汇编程序进行汇编的时候,如果检查出某行语句有错误,就会在屏幕上给出出错信息,假设指定了列表文件.LST,MASM 5.0也会在列表文件中给出错误信息。 MASM5.0出错信息格式: WARNING/ERROR错误信息码:错误描述信息 错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:2为致命错误,4为严肃警告,5为建议性警告,最后三位为错误编号。 下面的手册中给出了错误编号、错误描述以及中文解释说明,方便大家查阅,包括MASM 5.0常见编译错误。000 Block nestin
2、g error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局 001 Extra characters on line 一语句行有多余字符,可能是语句中给出的参数太多 002 Internal error-Register already defined 这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系 003 Unkown type specifer 未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等
3、004 Redefinition of symbol 符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误 005 Symbol is multidefined 符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误 006 Phase error between passes 两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.假设在启动MASM时使用/D任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误 007 Already had ELSE clause 已有ELSE语
4、句.在一个条件块里使用多于一个的ELSE语句 008 Must be in conditional block 没有在条件块里.通常是有ENDIF或ELSE语句,而无IF 语句 009 Symbol not defined 符号未定义,在程序中引用了未定义的标识符 010 Syntax error 语法错误.不是汇编程序所能识别的一个语句 011 Type illegal in context 指定非法类型.例如对一个过程指定BYTE类型,而不是NEAR或FAR 012 Group name must be unique 组名应是唯一的.作为组名的符号作为其他符号使用 013 Must be
5、declared during pass 1 必须在第一遍扫描期间定义.在第一遍扫描期间,如一个符号在未定义前就引用,就会出现这种错误. 014 Illegal public declaration 一个标识符被非法的指定为PUBLIC类型 015 Symbol already defferent kind 重新定义一个符号为不同种类符号.例如一个段名重新被当作变量名定义使用 016 Reserved word used as symbol 把汇编语言规定的保存字作标识符使用 017 Forward reference illegal 非法的向前引用.在第一遍扫描期间,引用一个未定义符号. 0
6、18 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
7、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 除以
8、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 hav
9、e 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 操作数
10、必须是常数. 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用错. 044 Must be associated with data 在必须与数据段有关的位置上出现了代码段有关的项 045 Must b
11、e associated with code 在必须与代码段有关的位置上出现了数据段有关的项 046 Multiple base registers 同时使用了多个基址存放器.如MOV AX ,SIBP 047 Multiple index registers 同时使用了多个变址存放器.如MOV AX ,SIDI 048 Must be index or base register 指令仅要求使用基址存放器或变址存放器,而不能使用其他存放器. 049 Illegal use of register 非法使用存放器出错 050 Value is out of range 数值太大,超过允许值.例
12、如:MOV AL ,100H 051 Operand not in current CS ASSUME segment 操作数不在当前代码段内.通常指转移指令的目标地址不在当前CS段内 052 Improper operand type 操作数类型使用不当.例如:MOV VAR1,VAR2.两个操作数均为存储器操作数,不能汇编出目标代码 053 Jump out of range by %ld byte 条件转移指令跳转范围超过-128 127个字节.出错厂,信息同时给出超过的字节数 054 Index displacement must be constant 变址寻址的位移量必须是常数 0
13、55 Illegal register value 非法的存放器值.目标代码中表达存放器的值超过7 056 Immediate mode illegal 不允许使用立即数寻址.例如MOV DS,CODE其中CODE是段名,不能把段名作为立即数传送给段存放器DS057 Illegal size for operand 使用操作数大小(字节数)出错.例如:使用双字的存储器操作数 058 Byte register illegal 要求用字存放器的指令使用了字节存放器.如PUSH,POP指令的操作数存放器必须是字存放器 059 Illegal uer of CS register 指令中错误使用了段
14、存放器CS.如:MOV CS,AXCS不能做目的操作数 060 Must be accumulator register 要求用AX或AL的位置上使用可其他存放器.如IN,OUT指令必须使用累加器AX或AL 061 Improper uer of segment register 不允许使用段存放器的位置上使用了段存放器.如SHL DS,1 062 Missing or unreachable CS 试图跳转去执行一个CS达不到的标号.通常是指缺少ASSUME语句中CS与代码段相关联 063 Operand combination illegal 双操作数指令中两个操作数组合出错 064 Ne
15、ar JMP/CALL to different CS 试图用NEAR属性的转移指令跳转到不在当前段的一个地址 065 Label cannot have segment override 段前缀使用出错 066 Must have instuction agter prefix 在重复前缀REP,REPE,REPNE后面必须有指令 067 Cannot override ES for destination 串操作指令中目的操作数不能用其他段存放器替代ES 068 Cannot address with srgment register 指令中寻找一个操作数,但ASSUME语句中未指明哪个段
16、存放器与该操作数所在段有关联 069 Must be in segment block 指令语句没有在段内 070 Cannot use EVEN or ALIGN with byte alignment 在段定义伪指令的定位类型中选用BYTE,这时不能使用EVEN或ALIGN伪指令 071 Forward needs override or FAR 转移指令的目标没有在源程序中说明为FAR属性,可用PTR指定 072 Illegal value for DUP count 操作符DUP前的重复次数是非法的或未定义 073 Symbol id already external 在模块内试图定义
17、的符号,它已在外部符号伪指令中说明 074 DUP nesting too deep 操作数DUP的嵌套太深 075 Illegak use of undefinde operand( ) 不定操作符 使用不当.例如DB 10H DUP( 2) 076 Too many valer for struc or record initialization 在定义结构变量或记录变量时,初始值太多 077 Angle brackets requored around initialized list 定义结构体变量时,初始值未用尖括号()括起来 078 Directive illegal struct
18、ure 在结构体定义中的伪指令使用不当.结构定义中的伪指令语句仅二种:分号(;)开始的注释语句和用DB,DW等数据定义伪指令语句 079 Override with DUP illegal 在结构变量初始值表中使用DUP操作符出错 080 Field cannot be overridden 在定义结构变量语句中试图对一个不允许修改的字段设置初值 081 Override id of wrong type 在定义结构变量语句中设置初值时类型出错 083 Circular chain of EQU aliases 用等值语句定义的符号名,最后又返回指向它自己.如: A EQU B B EQU A
19、 084 Cannot emulate cooprocessor opcode 仿真器不能支持的8087协处理器操作码 085 End of file,not END directive 源程序文件无END文件 086 Data emitted with no segment 语句数据没有在段内087 Forced error-pass1 用.ERR1伪指令强制形成的错误088 Forced error-pass2 用.ERR2伪指令强制形成的错误089 Forced error 用.ERR伪指令强制形成的错误090 Forced error-expression true(0) 用.ERRZ
20、伪指令强制形成的错误091 Forced error-pression false(not 0) 用.ERRZ伪指令强制形成的错误092 Forced error-symbol not defined 用.ERRNDEF伪指令强制形成的错误093 Forced error-symbol defined 用.ERRDEF伪指令强制形成的错误094 Forced error-string blank 用.ERRB伪指令强制形成的错误095 Forced error-string not blank 用.ERRNB伪指令强制形成的错误096 Forced error-string identical
21、 用.ERRIDN伪指令强制形成的错误097 Forced error-string different 用.ERRDIF伪指令强制形成的错误098 Wrong length for override value 结构域的重新设置太大以致不能适合这个域099 Line too long expanding symbol:EQU 使用EQU伪指令定义的等式太长100 Impure memory reference 不适宜的处理器参考,当/P选项和特权指令有效时用.286或.386),数据存到代码段101 Missing data;zero assumed 缺少操作数,假定是0。如 MOV AL,
22、0102 Segment near(or at) 64K linit 当一个代码段接近64KB边界时,假设在特权方式下,80286处理器将产生转移错误103 Align must be power of 2 ALIGN 伪指令用了不是2的幂的数104 Jump within short distance JMP语句的转移范围在短标号内,故可在标号前加SHORT操作符,从而使指令代码减少1B105 Expected element 少了一个元素,如标点符号或操作符。如:Expected:comma,Expected:instruction or directive106 Line tool long 源行超过MASM允许的最大长度。MASM 5.0规定为128个字符107 Illegal digit in number 常数内包含当前的基不允许的数字,如:108Q108 Empty string not allowed 空串不允许出现,如NULL DB语句为非法109 Missig operand 语句中缺少一个必须的操作数110 Open parenthesis or bracket 语句中缺少一个圆括号或方括号111 Directive must be in macro 只在宏定义里面要求的伪指令用在宏定义之外112 Unexpected end of line 语句行不完整