MSAM汇编常见错误
汇编程序(MASM)常见错误信息
汇编程序(MASM)常见错误信息汇编程序在对源程序的汇编过程中,若检查出某语句有语法错误,随时在屏幕上给出出错信息.如操作人员指定的列表文件名(即.LST),汇编程序亦将在列表文件中出错的下面给出出错信息,以便操作人员即时查找错误,给予更正.MASM5.0出错信息格式如下:源程序文件行:WARNING/ERROR错误信息码:错误描述信息其中,错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:'2'为严重错误,'4'为严肃警告,'5'为建议性警告,最后三位为错误编号.错误编号:错误描述0 Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局1 Extra characters on line 一语句行有多余字符,可能是语句中给出的参数太多2 Internal error-Register already defined这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系3 Unkown type specifer未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等4 Redefinition of symbol符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误5 Symbol is multidefined符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误6 Phase error between passes两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM 时使用/D任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误7 Already had ELSE clause 已有ELSE语句.在一个条件块里使用多于一个的ELSE语句8 Must be in conditional block 没有在条件块里.通常是有ENDIF或ELSE语句,而无IF 语句9 Symbol not defined 符号未定义,在程序中引用了未定义的标识符10 Syntax error 语法错误.不是汇编程序所能识别的一个语句11 Type illegal in context 指定非法类型.例如对一个过程指定BYTE类型,而不是NEAR或FAR12 Group name must be unique 组名应是唯一的.作为组名的符号作为其他符号使用13 Must be declared during pass 1必须在第一遍扫描期间定义.在第一遍扫描期间,如一个符号在未定义前就引用,就会出现这种错误.14 Illegal public declaration 一个标识符被非法的指定为PUBLIC类型15 Symbol already defferent kind重新定义一个符号为不同种类符号.例如一个段名重新被当作变量名定义使用16 Reserved word used as symbol 把汇编语言规定的保留字作标识符使用17 Forward reference illegal 非法的向前引用.在第一遍扫描期间,引用一个未定义符号.18 Operand must be register 操作数位置上应是寄存器,但出现了标识符19 Wrong type of register 使用寄存器出错20 Operand must be segment or group 应该给出一个段名或组名.例如ASSUME语句中应为某段寄存器和指定一个段名或组名,而不应是别的标号或变量名等21 Symbol has no segment 不知道标识符的段属性22 Operand must be type specifier 操作数应给出类型说明,如NEAR,FAR,BYTE等23 Symbol alread defined locally以被指定为内部的标识符,企图在EXTRN语句中又定义外部标识24 Segment paraneters are changed 段参数被改变.如同一标识符定义在不同段内25 Improper align/combin type 段定义时的定位类型/组合类型使用出错26 Reference to multidefined symbol 指令引用了多重定义的标识符27 Operand expected 需要一个操作数,只有操作符28 Operator expected 需要一个操作符,但只有操作数29 Divdsion by 0 or overflow 除以0或溢出30 Negative shift count 运算符SHL或SHR的移位表达式值为负数31 Operand type must match操作数类型不匹配.双操作数指令的两个操作数长度不一致,一个是字节,一个是字32 Illegal use of external 外部符号使用出错33 Must be record field name 应为记录字段名.在记录字段名位置上出现另外的符号34 Must be record name or field name应为记录名或记录字段名.在记录名或记录字段名位置上出现另外的符号35 Operand must be size应指明操作数的长度(如BYTE,WORD等).通常使用PTR运算即可改正36 Must be variable,label,or constant 应该是变量名,标号,或常数的位置上出现了其他信息37 Must be stucture field name 应该为结构字段名.在结构字段名位置上出现了另外的符号38 Lefe operand must segment操作数的左边应该是段的信息.如设DA1,DA2均是变量名,下列语句就是错误的:"MOV AX,DA1:DA2".DA1位置上应使用某段寄存器名39 One operand must constant 操作数必须是常数.40 Operand must be in same segment or one constant"—"运算符用错.例如"MOV AL,—VAR",其中VAR是变量名,应有一常数参加运算.又如两个不同段的变量名相减出错41 Normal type operand expected 要求给出一个正常的操作数.42 Constant expected 要求给出一个常数.43 Operand must have segment 运算符SEG用错.44 Must be associated with data 在必须与数据段有关的位置上出现了代码段有关的项45 Must be associated with code 在必须与代码段有关的位置上出现了数据段有关的项46 Multiple base registers 同时使用了多个基址寄存器.如"MOV AX ,[SI][BP]"47 Multiple index registers 同时使用了多个变址寄存器.如"MOV AX ,[SI][DI]"48 Must be index or base regiser 指令仅要求使用基址寄存器或变址寄存器,而不能使用其他寄存器.49 Illegal use of register 非法使用寄存器出错50 Value is out of range 数值太大,超过允许值.例如:"MOV AL ,100H"51 Operand not in current CS ASSUME segment操作数不在当前代码段内.通常指转移指令的目标地址不在当前CS段内52 Improper operand type 操作数类型使用不当.例如:"MOV VAR1,VAR2".两个操作数均为存储器操作数,不能汇编出目标代码53 Jump out of range by %ld byte条件转移指令跳转范围超过-128~ 127个字节.出错厂,信息同时给出超过的字节数54 Index displacement must be constant 变址寻址的位移量必须是常数55 Illegal register value 非法的寄存器值.目标代码中表达寄存器的值超过756 Immediate mode illegal 不允许使用立即数寻址.例如"MOV DS,CODE"其中CODE是段名,不能把段名作为立即数传送给段寄存器DS57 Illegal size for operand 使用操作数大小(字节数)出错.例如:使用双字的存储器操作数58 Byte register illegal要求用字寄存器的指令使用了字节寄存器.如PUSH,POP指令的操作数寄存器必须是字寄存器59 Illegal uer of CS register指令中错误使用了段寄存器CS.如:"MOV CS,AX" CS不能做目的操作数60 Must be accumulator register要求用AX或AL的位置上使用可其他寄存器.如IN,OUT指令必须使用累加器AX或AL61 Improper uer of segment register不允许使用段寄存器的位置上使用了段寄存器.如"SHL DS,1"62 Missing or unreachable CS试图跳转去执行一个CS达不到的标号.通常是指缺少ASSUME语句中CS与代码段相关联63 Operand combination illegal 双操作数指令中两个操作数组合出错64 Near JMP/CALL to different CS试图用NEAR属性的转移指令跳转到不在当前段的一个地址65 Label cannot have segment override 段前缀使用出错66 Must have instuction agter prefix 在重复前缀REP,REPE,REPNE后面必须有指令67 Cannot override ES for destination 串操作指令中目的操作数不能用其他段寄存器替代ES68 Cannot address with srgment register指令中寻找一个操作数,但ASSUME语句中未指明哪个段寄存器与该操作数所在段有关联69 Must be in segment block 指令语句没有在段内70 Cannot use EVEN or ALIGN with byte alignment在段定义伪指令的定位类型中选用BYTE,这时不能使用EVEN或ALIGN伪指令71 Forward needs override or FAR转移指令的目标没有在源程序中说明为FAR属性,可用PTR指定72 Illegal value for DUP count 操作符DUP前的重复次数是非法的或未定义73 Symbol id already external 在模块内试图定义的符号,它已在外部符号伪指令中说明74 DUP nesting too deep 操作数DUP的嵌套太深75 Illegak use of undefinde operand( ) 不定操作符" "使用不当.例如"DB 10H DUP( 2)"76 Too many valer for struc or record initialization 在定义结构变量或记录变量时,初始值太多77 Angle brackets requored around initialized list定义结构体变量时,初始值未用尖括号()括起来78 Directive illegal structure 在结构体定义中的伪指令使用不当.结构定义中的伪指令语句仅二种:分号(;)开始的注释语句和用DB,DW等数据定义伪指令语句79 Override with DUP illegal 在结构变量初始值表中使用DUP操作符出错80 Field cannot be overridden 在定义结构变量语句中试图对一个不允许修改的字段设置初值81 Override id of wrong type 在定义结构变量语句中设置初值时类型出错82 Circular chain of EQU aliases 用等值语句定义的符号名,最后又返回指向它自己.如:A EQU BB EQU A83 Cannot emulate cooprocessor opcode 仿真器不能支持的8087协处理器操作码84 End of file,not END directive 源程序文件无END文件85 Data emitted with no segment 语句数据没有在段内。
汇编错误原因
Illegal register value
指定的寄存器值不能放入“reg”字段中
56
No immediate mode
指定的立即方式或操作码都不能接收立即数
57
Illegal size for item
引用的项长度是非法的
58
Byte register is illegal
在上下文中,使用一个字节寄存器是非法的
汇编内部出现逻辑错误。
3
Unknown symbol type
符号语句的类型字段中有些不能识别的东西。
4
Redefinition of symbol
在第二遍扫视时,连续地定义了一个符号。
5
Symbol is multi-defined
重复定义一个符号。
6
Phase error between passes
84
Feature not supported be the small Assembler(ASM)
符号没有定义
10
Syntax error
语句的语法与任何可识别的语法不匹配
11
Type illegal in context
指定的类型在长度上不可接收
12
Should have been group name
给出的组名不符合要求
13
Must be declared in pass 1
得到的不是汇编程序所要求的常数值,例如:向前引用的长度
由于操作数不在当前IP段中,因此不能存取
52
Improper operand type
使用的操作数不能产生操作码
53
Relative jump out range
汇编程序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用错.。
汇编语言中常见的错误
汇编语言中常见的错误(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.希望有操作数。
汇编中常见的一些错误信息
汇编中常见的一些错误信息ml.exe错误信息:FATAL 严重错误cannot open file不能打开文件I/O error closing fileI/O错误正在关闭文件I/O error writing fileI/O错误正在写文件I/O error reading file I/O错误正在读取文件out of memory 缺少内存assembler limit : macro parameter name table full 汇编限制:宏参数名表已满invalid command-line option 无效命令行参数nesting level too deep 嵌套过深unmatched macro nesting 不正确的宏嵌套line too long 行太长unmatched block nesting 不正确的区、段嵌套directive must be in control block 指令必须在控制段error count exceeds 100; stopping assembly 错误数超过100,停止汇编invalid numerical command-line argument 无效命令行参数too many arguments 太多参数、定义、冲突statement too complex 声明太复杂Internal Assembler Error 内部汇编错误missing source filename 找不到源文件名COFF error writing file COFF错误,正在写文件invalid debug and browser data; file exceeds line limit 不能排除故障和浏览数据;文件超过行限制cannot find link.exe 找不到连接程序cannot find cvpack.exe 找不到cvpack.exeSEVERE 严重的错误memory operand not allowed in context 内存操作数无法载入上下文环境immediate operand not allowed 当前操作数无法载入cannot have more than one ELSE clause per IF block IF段只能有一个ELSE从句extra characters after statement 附加的字符在声明之后symbol type conflict 符号类型冲突symbol redefinition 符号已经定义undefined symbol 符号没有定义non-benign record redefinition 没有利于记录的定义syntax error 语法错误syntax error in expression 表达式存在语法错误invalid type expression 无效的类型表达式distance invalid for word size of current segment 当前区、段的大小命令无效PROC, MACRO, or macro repeat directive must precede LOCAL PROC, MACRO, 或macro repeat指令必须在LOCAL之前.MODEL must precede this directive .MODEL必须在指令之前cannot define as public or external 不能定义为公有或外部的segment attributes cannot change 区、段属性不能更换expression expected 预期表达式operator expected 预期操作数invalid use of external symbol 使用了无效的外部符号operand must be RECORD type or field 操作数必须是RECORD类型或域identifier not a record 没有记录标示符record constants may not span line breaks 连续记录不能超过行间隔instruction operands must be the same size 命令操作数必须是一样的长度instruction operand must have size 命令操作数必须有长度invalid operand size for instruction 操作数长度对于指令无效operands must be in same segment 操作数必须在相同的段constant expected 连续预期operand must be a memory expression 操作数必须是一个内存表达式expression must be a code address 表达式必须是一个代码地址multiple base registers not allowed 不允许多重基础寄存器multiple index registers not allowed 不允许多重标志寄存器must be index or base register 必须是基础或标志寄存器invalid use of register 使用的寄存器无效invalid INVOKE argument 无效的INVOKE符号must be in segment block 必须在区、段、块中DUP too complex DUP太复杂too many initial values for structure 太多结构的基础资料statement not allowed inside structure definition 声明不允许在结构里面missing operand for macro operator 找不到宏的操作数line too longsegment register not allowed in context 上下文不允许有寄存器string or text literal too long 文本或字符串太长statement too complex 声明太复杂identifier too long 标识符太长invalid character in file 文件里有无效字符missing angle bracket or brace in literal 语句里找不到同样的括弧或框架missing single or double quotation mark in string 找不到单引号或双引号empty (null) string 没有字符串nondigit in number 没有总数syntax error in floating-point constant 不确定的指向中有语法错误real or BCD number not allowed 不允许real或BCD编码text item required 必须的文本项forced error 强制错误forced error : value equal to 0 标准等于零forced error : value not equal to 0 标准不等于零forced error : symbol not defined 符号没有定义forced error : symbol defined 符号已定义forced error : string blank 字符串是空的forced error : string not blank 字符串不是空的forced error : strings equal 字符串是相同的forced error : strings not equal 字符串不是相同的[ELSE]IF2/.ERR2 not allowed : single-pass assembler [ELSE]IF2/.ERR2不允许单独汇编expression too complex for .UNTILCXZ .UNTILCXZ表达式太复杂can ALIGN only to power of 2 仅能对齐到2的幂structure alignment must be 1, 2, 4, 8, or 16 结构对齐必须是1,2,4,8或16 expected 预定义incompatible CPU mode and segment size 不匹配的CPU模式和段尺寸LOCK must be followed by a memory operation LOCK指令必须跟在内存操作之后instruction prefix not allowed 不允许的命令前缀no operands allowed for this instruction 指令没有操作数invalid instruction operands 无效的指令操作数initializer magnitude too large for specified size 初始指定尺寸太大cannot access symbol in given segment or group 在特定的段或类不能存取符号operands have different frames 操作数存在不同的结构cannot access label through segment registers 在段寄存器中不能存取标记jump destination too far 跳转目标太远jump destination must specify a label 跳转目标必须指定一个标记instruction does not allow NEAR indirect addressing 指令不允许近间接寻址instruction does not allow FAR indirect addressing 指令不允许远间接寻址instruction does not allow FAR direct addressing 指令不允许远直接寻址jump distance not possible in current CPU mode 跳转距离不适合当前CPU模式missing operand after unary operator 一元运算符之后找不到操作数cannot mix 16- and 32-bit registers 不能结合16位和32位寄存器invalid scale value 无效范围标准constant value too large 连续标准太多instruction or register not accepted in current CPU mode 当前CPU模式不认可的指令或寄存器reserved word expected 预期的保留字instruction form requires 80386/486 指令需要80386/486指示END directive required at end of file END指令必须在文件结尾too many bits in RECORD 太多位在记录里positive value expected 预期的明确的标准index value past end of string 索引标准在字符串结尾之后count must be positive or zero 计数必须是零或明确的count value too large 计数标准太多operand must be relocatable 操作数必须是转移表constant or relocatable label expected 预期的转移表或连续的segment, group, or segment register expected 预期的段,类型或段寄存器segment expected 预期的区段invalid operand for OFFSET OFFSET操作数无效invalid use of external absolute 由于完全外部的使用无效segment or group not allowed 区段或类型不允许cannot add two relocatable labels 不能增加双重转移表标记cannot add memory expression and code label 不能增加内存表达式和代码标记。
MATLAB调试与错误处理技巧
MATLAB调试与错误处理技巧导语:MATLAB是一款功能强大的科学计算软件,广泛应用于各个学科领域。
在使用MATLAB编写程序时,难免会遇到各种错误和bug。
本文将介绍一些常见的MATLAB调试技巧和错误处理方法,帮助读者更加高效地解决问题。
一、错误分类与调试技巧1. 语法错误:在编写MATLAB代码的过程中,很容易出现语法错误。
这些错误可能由于拼写错误、括号不匹配、运算符错误等引起。
一种常见的调试方法是认真查看错误提示信息,并逐行检查代码中可能存在问题的地方。
有时候,手动注释掉一些代码也能帮助找到错误所在。
2. 运行时错误:当程序运行至某个语句时出现错误,我们称之为运行时错误。
常见的运行时错误包括零除错误、数组越界错误等。
为了快速定位和解决这类错误,我们可以利用MATLAB提供的调试工具,如断点调试功能和变量追踪功能。
通过设置断点,在程序执行到指定语句时暂停,我们可以查看和修改变量的值,进一步分析错误产生的原因,从而进行修复。
3. 逻辑错误:逻辑错误是指程序在运行过程中逻辑错误的结果。
这类错误比较隐蔽,需要通过与预期结果的对比来发现。
为了避免逻辑错误,我们可以使用一些技巧,如利用MATLAB提供的assert函数进行断言,编写详细的注释和说明,以及对关键变量进行可视化输出等。
此外,运用单元测试和边界测试的方法也能够有效检测逻辑错误。
4. 内存错误:在大规模数据处理和复杂计算中,内存错误是常见的问题。
过多的变量和占用过大的内存在运行过程中可能导致程序崩溃或内存耗尽。
为了解决内存错误,我们可以通过清理不需要的变量和释放占用内存的资源来释放内存空间。
此外,使用MATLAB提供的分段计算方法,将大型任务拆分为多个小任务,也可有效减少对内存的消耗。
二、错误处理方法1. 异常处理:异常是指在程序运行过程中发生了不可预期的错误。
MATLAB提供了异常处理机制来处理这类错误。
通过在代码中使用try-catch结构,我们可以捕捉到可能出现的异常,并进行相应的处理。
汇编语言常见错误分析
汇编语言常见错误分析施志刚(南通航运职业技术学院信息系,江苏南通226010)摘要:本文通过具体实例分析了汇编语言程序设计过程中的若干常见错误,包括语法错误和程序设计上的逻辑错误,旨在帮助读者在程序设计时能够避免本文提出的错误。
关键词:分析;汇编语言;语法错误;逻辑错误Conmmon Errors Analysis In Assembly LanguageShizh igan g(IT Department, Nantong Vocational & Technical Shipping College, Nantong Jiangsu226010)Abstract:This article analysised conmmon errors in assembly language programming process through the concrete examples,including grammer errors and logic errors in programming,aimed at helping readers to prevent from the errors that this article refered to in programming.Key words: analysis; assembly language; grammer errors; logic errors0 引言汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言。
因而对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。
作为计算机专业及相关学科一门重要的基础课程,其重要性不言而喻。
但是对于众多初学汇编语言的人来说,都普遍感到较难且不易理解和掌握,难以入门,看着有错的程序,更是不知从何改起,本人在汇编语言的教学过程中积累并总结了一些这方面的经验,以供各位读者借鉴和参考。
visual basic 实时错误、逻辑错误收集
visual basic 常见错误收集自己在学习visual basic后,按照课本上的要求经行编程,总是出现这样或那样的错误提示,读不懂就无法修改,于是就有了把这些常见的错误收集起来的想法,几个月下来就积攒了以下错误,有些错误现在很少犯了,但是还有些错误还得需要一段时间才能改正!现在分享给大家希望对你有所帮助,祝学习愉快!黄河水利职业技术学院地理信息0901 杨鹏飞ypf97586@实时错误13类型不匹配如a=inputbox("请输入必要的数据","数据输入",0) 为加val就按了取消如在text中输入文本代码中却要执行加法运算实时错误9下标越界如定义动态数组dim a() as singlen=text1.textfor i=1 to na(i)=val(inputbox("输入必要数据","数据输入",0))出现下标越界的原因就是没有使用redim a(n)重新指定动态数组的数目byref参数类型不符进行虚实结合时要注意数据类型相同否则会出现原因就是定义通用过程时形参类型和实参类型不相同编译错误错误的参数号或无效的属性赋值编译错误未找到方法或数据成员如text1.text误写成了text1.tex编译错误缺少:列表分隔符或)编译错误缺少语句结束如& Str(a(i)) "转换后是显然连接字符串少了一个“&”编译错误无效字符"_和'"直接相连而未放在句尾编译错误子函数和过程未定义 msg 无box或者引用函数时拼写错误编译错误子程序或函数未定义本来该分开写的东西不小心并在了一块导致vb无法识别运行 Select Case Button.IndexCase 1Text1.ForeColor = vbBlueCase2text2.ForeColor = vbRed编译错误缺少表达式当书写了本因该完整却为完整的算式时会出现如此提醒如“&”后未连接“=”无内容但在label和text后点上"."并未经行自行索检,原因所调用的空间根本就不存在编译错误必选参数也即是在函数嵌套调用时内部函数忘记了添加实参编译错误语法错误,但是未指定地点Format(fp(hjd(hd), "0.0000") 少了一个分隔符号实时错误'424' 要求对象错误原因本来不存在text2控件,单命令按钮中相关代码却设计了text2 实时错误“360”对象已加载??????If a = 0 Then '从未加载到加载Load size(4)a = 1 'a=1,标识着已用代码加载了菜单size(4).Visible = Truesize(4).Caption = "16"ElseLoad size(4) '为防止重复加载做准备实时错误“360”控件数组(4)不存在未提示的逻辑错误1虽然声明了变量,导致计算结果不符合预期检验效果可能使用时拼写错误编出的程序不符合检验结果可能是小取大出改为取数时采用高精度(保证数据采集时的质量),输出时采用低精度计算的结果总算是零,原因是赋值时使用的是一个变量而参与计算时用的却是另一个变量,这种错误总是出现在,相识过程的复制粘贴计算的结果虽然不是0但其结果很不符合逻辑,可能原因就是相识的过程复制粘贴而计算的函数未进行相应的改变未知逻辑错误(李永川老师编的度化为度分秒的小程序)如度分秒换算成小数度形式时采用30.30和60.30换算的结果很不符合逻辑应注意的问题定义变量时范围和类型不要混乱zh(hjd(hd) 函数Public Function hjd(hd As Double) As Single ,实参hd 定义时定义的是single因此会出现错误为了保证取数的精度,我们定义实参时采用了双精度,导致调用其实参的函数过程的形参也必须定义为双精度但是函数的返回值在函数过程中定义的类型,在函数嵌套调用时却不影响(猜想)为了增强代码的可读性使用连接符要有一定的格式标准多重引号套用使vb无法识别要表达的意识是可用str结合着&&来告知如 "个数据是”& a(i) &“转换后是:"定义过程命名时要明确,易于理解和记忆,以免出现错误有时后,误调用了某个函数,但由于巧合,逃过了验证如zh(hjd(hd)) hd=3.1415926 hjd=180 zh采用了格式化结果为180.0000fp(hjd(hd)) hd=3.1415926 hjd=180 pf采用了严格计算结果为180.0000 故出现了错误,且难以发觉好的建议使用格式化函数时能在函数过程中使用最好在函数过程中使用经验之谈text可识别keypress事件,command不是别,其实对于command来说click 事件同时可以相应enter键和单击。
单片机汇编语言常见错误知识点分析
单片机汇编语言常见错误知识点分析
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言。
因而对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。
作为计算机专业及相关学科一门重要的基础课程,其重要性不言而喻。
但是对于众多初学汇编语言的人来说,都普遍感到较难且不易理解和掌握,难以入门,看着有错的程序,更是不知从何改起,本文主要介绍的就是单片机汇编语言常见错误知识点分析,具体的跟随小编来了解一下。
单片机汇编语言常见错误知识点分析一、MAS51汇编软件汇编失败原因分析
单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误汇会造成汇编失败,常见的汇编错误如下:
1、标号重复常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。
2、标点符号以全角方式输入MAS51程序要求标点符号为半角方式,否则汇编失败。
可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。
3、注释太长有时为了以后读懂程序,写了很长的注释,站长发现超过20个汉子时也会造成汇编失败,解决办法可以将太长的注释分成多个注释。
4、数值#FFH 前遗漏0,根据要求应该在a~f前加0,写成#0FFH
5、字母O和数字0搞混有时候这两个字看上去完全相同,要注意哦
6、标号后边遗漏“:”
7、标号使用了特殊字符,比如:T1、T2、A、B这些字符有特定的含义,不允许用于标号。
Masm汇编语言错误信息
Masm汇编语言错误注释:嵌套过程,段,结构,宏指令,IRP,IRPC或REPT不是正确结束.如嵌套的外层已终止,而内层还是打开状态Masm汇编语言错误信息:Symbol not definedMasm汇编语言错误注释:符号没有定义Masm汇编语言错误信息:Syntax errorMasm汇编语言错误注释:语句的语法与任何可识别的语法不匹配Masm汇编语言错误信息:Type illegal in contextMasm汇编语言错误注释:指定的类型在长度步可接收Masm汇编语言错误信息:Should have been group nameMasm汇编语言错误注释:给出的组合不符合要求Masm汇编语言错误信息:Must be declared in pass 1Masm汇编语言错误注释:得到的不是汇编程序所要求的常数值.例如,向前引用的向量长度Masm汇编语言错误信息:Symbol type usage illegalMasm汇编语言错误注释:PUBLIC 符号的使用不合法Masm汇编语言错误信息:Symbol already different kindMasm汇编语言错误注释:企图定义与以前定义不同的符号Masm汇编语言错误信息:Symbol is reserved wordMasm汇编语言错误注释:企图非法使用一个汇编程序的保留字(例如,宣布MOV为一个变量) Masm汇编语言错误信息:Forward reference is illegalMasm汇编语言错误注释:向前引用必须是在第一遍扫视中定义过的Masm汇编语言错误信息:Must be registerMasm汇编语言错误注释:希望寄存器作为操作数,但用户提供的是符号而不是寄存器Masm汇编语言错误信息:Extra characters on lineMasm汇编语言错误注释:当一行上已接受了定义指令的足够信息,而又出现了多余的字符Masm汇编语言错误信息:Wrong type of registerMasm汇编语言错误注释:指定的寄存器类型并不是指令中或伪操作中所要求的.例如ASSUME AX Masm汇编语言错误信息:Must be segment or groupMasm汇编语言错误注释:希望给出段或组,而不是其它Masm汇编语言错误信息:Symbol has no segmentMasm汇编语言错误注释:想使用带有SEG的变量,而这个变量不能识别段Masm汇编语言错误注释:必须是WORD,DW,QW,BYTE或TB,但接收的是其它内容Masm汇编语言错误信息:Already defined locallyMasm汇编语言错误注释:试图定义一个符号作为EXTERNAL,但这个符号已经在局部定义过了Masm汇编语言错误信息:Segment parameters are changedMasm汇编语言错误注释:SEGMENT的自变量表与第一次使用这个段的情况不一样Masm汇编语言错误信息:Not proper align/combine typeMasm汇编语言错误注释:SEGMENT参数不正确Masm汇编语言错误信息:Reference to mult definedMasm汇编语言错误注释:指令引用的内容已是多次定义过的Masm汇编语言错误信息:Operand was expectedMasm汇编语言错误注释:汇编程序需要的是操作数,但得到的却是其它内容Masm汇编语言错误信息:Operator was expectedMasm汇编语言错误注释:汇编程序需要的是操作符,但得到的却是其它内容Masm汇编语言错误信息:Register already definedMasm汇编语言错误注释:汇编内部出现逻辑错误Masm汇编语言错误信息:Division by 0 or overflowMasm汇编语言错误注释:给出一个用0作除数的表达式Masm汇编语言错误信息:Shift count is negativeMasm汇编语言错误注释:移位表达式产生的移位计数值为负数Masm汇编语言错误信息:Operand type must matchMasm汇编语言错误注释:在自变量的长度或类型应该一致的情况下,汇编程序得到的并不一样.例如,交换Masm汇编语言错误信息:Illegal use of externalMasm汇编语言错误注释:用非法手段进行外部使用Masm汇编语言错误信息:Must be record field nameMasm汇编语言错误注释:需要的是记录字段名,但得到的是其它东西Masm汇编语言错误信息:Must be record or field nameMasm汇编语言错误注释:需要的是记录名或字段名,但得到的是其它东西Masm汇编语言错误信息:Operand must have sizeMasm汇编语言错误注释:需要的是操作数的长度,但得到的是其它内容Masm汇编语言错误信息:Must be var,label or constantMasm汇编语言错误注释:需要的是变量,标号或常数,但得到的是其它内容Masm汇编语言错误信息:Must be structure field nameMasm汇编语言错误注释:需要的是结构字段名,但得到的是其它内容Masm汇编语言错误信息:Left operand must have segmentMasm汇编语言错误注释:右操作数所用的某些东西要求左操作数必须有一个段(例如:":") Masm汇编语言错误信息:Unknown symbol typeMasm汇编语言错误注释:在符号语句的类型字段中,有些不能识别的东西Masm汇编语言错误信息:One operand must be constMasm汇编语言错误注释:这是加法指令的非法使用Masm汇编语言错误信息:Operands must be same or 1 absMasm汇编语言错误注释:这是减法指令的非法使用Masm汇编语言错误信息:Normal type operand expectedMasm汇编语言错误注释:当需要变量,标号时,得到的却是STRUCT,FIELDS,NAMES,BYTE,WORD或DWMasm汇编语言错误信息:Constant was expectedMasm汇编语言错误注释:需要的是一个常量,得到的却是另外的内容Masm汇编语言错误信息:Operand must have segmentMasm汇编语言错误注释:SEG伪操作使用不合法Masm汇编语言错误信息:Must be associated with dataMasm汇编语言错误注释:有关项用的是代码,而这里需要的是数据,例如一个过程的DS取代Masm汇编语言错误信息:Must be associated with codeMasm汇编语言错误注释:有关项用的是数据,而这里需要的是代码Masm汇编语言错误信息:Already have base registerMasm汇编语言错误注释:试图重复基地址Masm汇编语言错误信息:Already have index registerMasm汇编语言错误注释:试图重复变址地址Masm汇编语言错误信息:Must be index or base registerMasm汇编语言错误注释:指令需要基址或变址寄存器,而指定的是其它寄存器Masm汇编语言错误信息:Redefinition of symbolMasm汇编语言错误注释:在第二遍扫视时,接着又定义一个符号Masm汇编语言错误信息:Illegal use of registerMasm汇编语言错误注释:在指令中使用了8088指令中没有的寄存器Masm汇编语言错误信息:Value is out of rangeMasm汇编语言错误注释:数值大于需要使用的,例如将DW传送到寄存器中Masm汇编语言错误信息:Operand not in IP segmentMasm汇编语言错误注释:由于操作数不在当前IP段中,因此不能存取Masm汇编语言错误信息:Improper operand typeMasm汇编语言错误注释:使用的操作数不能产生操作码Masm汇编语言错误信息:Relative jump out of rangeMasm汇编语言错误注释:指定的转移超出了允许的范围Masm汇编语言错误信息:Index disp1. must be constantMasm汇编语言错误注释:试图使用脱离变址寄存器的变量位移量.位移量必须是常数Masm汇编语言错误信息:Illegal register valueMasm汇编语言错误注释:指定的寄存器值不能放入"reg"字段中.(即"reg"字段大于7) Masm汇编语言错误信息:No immediate modeMasm汇编语言错误注释:指定的立即方式或操作码都不能接收立即数.例如:PUSH Masm汇编语言错误信息:Illegal size for itemMasm汇编语言错误注释:引用的项的长度是非法的.例如:双字移位Masm汇编语言错误信息:Byte register is illegalMasm汇编语言错误注释:在上下文中,使用一个字节寄存器是非法的.例如:PUSH AL Masm汇编语言错误信息:Symbol is multi-definedMasm汇编语言错误注释:重复定义一个符号Masm汇编语言错误信息:CS register illegal usageMasm汇编语言错误注释:试图非法使用CS寄存器.例如:XCHG CS,AXMasm汇编语言错误信息:Must be Ax or ALMasm汇编语言错误注释:某些指令只能用AX或AL.例如:IN 指令Masm汇编语言错误信息:Improper use of segment regMasm汇编语言错误注释:段寄存器使用不合法.例如:1 立即数传送到段寄存器Masm汇编语言错误信息:No or unreachable CSMasm汇编语言错误注释:试图转移到不可到达的标号Masm汇编语言错误信息:Operand combination illegalMasm汇编语言错误信息:Near JMP/CALL to different CSMasm汇编语言错误注释:企图在不同的代码段内执行NEAR转移或调用Masm汇编语言错误信息:Label can't have seg overrideMasm汇编语言错误注释:非法使用段取代Masm汇编语言错误信息:Must have opcode after prefixMasm汇编语言错误注释:使用前缀指令之后,没有正确的操作码说明Masm汇编语言错误信息:Can't override ES segmentMasm汇编语言错误注释:企图非法地在一条指令中取代ES寄存器.例如:存储字符串Masm汇编语言错误信息:Can't reach with segment regMasm汇编语言错误注释:没有使变量可达到的ASSUME语句Masm汇编语言错误信息:Phase error between passesMasm汇编语言错误注释:程序中有模棱两可的指令,以至于在汇编程序的两次扫视中,程序标号的位置在数值上改变了Masm汇编语言错误信息:Must be in segment blockMasm汇编语言错误注释:企图在段外产生代码Masm汇编语言错误信息:Can't use EVEN on BYTE segmentMasm汇编语言错误注释:被提出的一个字节段,但试图使用EVENMasm汇编语言错误信息:Forward needs overrideMasm汇编语言错误注释:目前不使用这个信息Masm汇编语言错误信息:Illegal value for DUP countMasm汇编语言错误注释:DUP计数必须是常数,不能是0或负数Masm汇编语言错误信息:Symbol already externalMasm汇编语言错误注释:企图定义一个局部符号,但此符号已经是外部符号了Masm汇编语言错误信息:DUP is too large for linkerMasm汇编语言错误注释:DUP嵌套太长,以至于连接程序不能得到所要的记录Masm汇编语言错误信息:Usage of ? (indeterminate)badMasm汇编语言错误注释:"?"使用不合适.例如:? +5Masm汇编语言错误信息:Already had ELSE clauseMasm汇编语言错误注释:在ELSE从句中试图定义ELSE从句Masm汇编语言错误信息:Not in conditional blockMasm汇编语言错误注释:在没有提了供条件汇编指令的情况下,指定了ENDIF或ELSE。
汇编语言一些常见错误
汇编语言一些常见错误汇编语言是一种低级语言,它直接操作计算机的硬件和指令集。
在编写汇编语言程序时,我们需要特别注意一些常见的错误,以确保程序的正确性和可靠性。
本文将介绍一些常见的汇编语言错误及其解决方法,帮助读者避免在编程过程中犯下这些错误。
1. 语法错误语法错误是编程过程中最常见的错误之一。
在编写汇编语言程序时,我们需要遵循特定的语法规则,包括正确使用指令、标签、寄存器等。
如果违反了这些语法规则,编译器将无法正确解析代码,并报告错误。
为了避免语法错误,我们应该熟悉所使用的汇编语言的语法规则,并进行仔细的代码检查和测试。
2. 寄存器使用错误在汇编语言中,寄存器是一种特殊的内存单元,用于存储临时数据和操作数。
常见的寄存器包括通用寄存器(如AX、BX、CX)和特殊寄存器(如标志寄存器FLAGS)。
错误地使用寄存器可能导致数据错误或程序崩溃。
为了正确使用寄存器,我们需要了解每个寄存器的作用和限制,并在程序中遵循相应的规则。
3. 内存管理错误汇编语言中的内存管理是程序正确性的关键。
错误地分配、释放内存或访问无效内存区域可能导致程序崩溃或数据损坏。
为了避免内存管理错误,我们应该使用适当的指令来申请和释放内存,并确保内存的正确使用和访问。
4. 指令使用错误汇编语言中的指令是程序的基本执行单元。
有时候,我们可能会错误地选择或使用指令,导致程序无法正常运行或产生错误结果。
为了避免这种错误,我们应该详细学习和理解所使用的指令集,并仔细选择和使用指令。
5. 程序逻辑错误在编写汇编语言程序时,我们需要详细计划和设计程序的逻辑结构。
不正确的程序逻辑可能导致程序运行错误或无法达到预期的结果。
为了避免程序逻辑错误,我们应该进行仔细的逻辑分析和设计,并进行充分的测试和调试。
6. 代码优化错误在优化汇编语言程序时,我们需要注意避免一些常见的代码优化错误。
例如,优化过度可能导致代码难以理解和维护,而优化未到位可能导致程序性能下降。
汇编语言常见错误信息中文注解
汇编语⾔常见错误信息中⽂注解本⽂的⽬标是收集⼤部分汇编中常见错误信息及对其的中⽂注解,⽅便⼤家在写汇编程序时能够快速地定位错误并解决问题。
ml.exe错误信息:复制代码代码如下:FATAL 严重错误cannot open file不能打开⽂件I/O error closing fileI/O错误正在关闭⽂件I/O error writing fileI/O错误正在写⽂件I/O error reading file I/O错误正在读取⽂件out of memory 缺少内存assembler limit : macro parameter name table full 汇编限制:宏参数名表已满invalid command-line option ⽆效命令⾏参数nesting level too deep 嵌套过深unmatched macro nesting 不正确的宏嵌套line too long ⾏太长unmatched block nesting 不正确的区、段嵌套directive must be in control block 指令必须在控制段error count exceeds 100; stopping assembly 错误数超过100,停⽌汇编 invalid numerical command-line argument ⽆效命令⾏参数too many arguments 太多参数、定义、冲突statement too complex 声明太复杂Internal Assembler Error 内部汇编错误missing source filename 找不到源⽂件名COFF error writing file COFF错误,正在写⽂件invalid debug and browser data; file exceeds line limit 不能排除故障和浏览数据;⽂件超过⾏限制cannot find link.exe 找不到连接程序cannot find cvpack.exe 找不到cvpack.exe SEVERE 严重的错误memory operand not allowed in context 内存操作数⽆法载⼊上下⽂环境immediate operand not allowed 当前操作数⽆法载⼊cannot have more than one ELSE clause per IF block IF段只能有⼀个ELSE从句extra characters after statement 附加的字符在声明之后symbol type conflict 符号类型冲突symbol redefinition 符号已经定义undefined symbol 符号没有定义non-benign record redefinition 没有利于记录的定义syntax error 语法错误syntax error in expression 表达式存在语法错误invalid type expression ⽆效的类型表达式distance invalid for word size of current segment 当前区、段的⼤⼩命令⽆效PROC, MACRO, or macro repeat directive must precede LOCAL PROC, MACRO, 或 macro repeat指令必须在LOCAL之前.MODEL must precede this directive .MODEL必须在指令之前cannot define as public or external 不能定义为公有或外部的segment attributes cannot change 区、段属性不能更换expression expected 预期表达式operator expected 预期操作数invalid use of external symbol 使⽤了⽆效的外部符号operand must be RECORD type or field 操作数必须是RECORD类型或域identifier not a record 没有记录标⽰符record constants may not span line breaks 连续记录不能超过⾏间隔instruction operands must be the same size 命令操作数必须是⼀样的长度instruction operand must have size 命令操作数必须有长度invalid operand size for instruction 操作数长度对于指令⽆效operands must be in same segment 操作数必须在相同的段constant expected 连续预期operand must be a memory expression 操作数必须是⼀个内存表达式expression must be a code address 表达式必须是⼀个代码地址multiple base registers not allowed 不允许多重基础寄存器multiple index registers not allowed 不允许多重标志寄存器must be index or base register 必须是基础或标志寄存器invalid use of register 使⽤的寄存器⽆效invalid INVOKE argument ⽆效的INVOKE符号must be in segment block 必须在区、段、块中DUP too complex DUP太复杂too many initial values for structure 太多结构的基础资料statement not allowed inside structure definition 声明不允许在结构⾥⾯missing operand for macro operator 找不到宏的操作数line too longsegment register not allowed in context 上下⽂不允许有寄存器string or text literal too long ⽂本或字符串太长statement too complex 声明太复杂identifier too long 标识符太长invalid character in file ⽂件⾥有⽆效字符missing angle bracket or brace in literal 语句⾥找不到同样的括弧或框架missing single or double quotation mark in string 找不到单引号或双引号empty (null) string 没有字符串nondigit in number 没有总数syntax error in floating-point constant 不确定的指向中有语法错误real or BCD number not allowed 不允许real或BCD编码text item required 必须的⽂本项forced error 强制错误forced error : value equal to 0 标准等于零forced error : value not equal to 0 标准不等于零forced error : symbol not defined 符号没有定义forced error : symbol defined 符号已定义forced error : string blank 字符串是空的forced error : string not blank 字符串不是空的forced error : strings equal 字符串是相同的forced error : strings not equal 字符串不是相同的[ELSE]IF2/.ERR2 not allowed : single-pass assembler [ELSE]IF2/.ERR2不允许单独汇编expression too complex for .UNTILCXZ .UNTILCXZ表达式太复杂can ALIGN only to power of 2 仅能对齐到2的幂structure alignment must be 1, 2, 4, 8, or 16 结构对齐必须是1,2,4,8或16 expected 预定义incompatible CPU mode and segment size 不匹配的CPU模式和段尺⼨LOCK must be followed by a memory operation LOCK指令必须跟在内存操作之后instruction prefix not allowed 不允许的命令前缀no operands allowed for this instruction 指令没有操作数invalid instruction operands ⽆效的指令操作数initializer magnitude too large for specified size 初始指定尺⼨太⼤cannot access symbol in given segment or group 在特定的段或类不能存取符号operands have different frames 操作数存在不同的结构cannot access label through segment registers 在段寄存器中不能存取标记jump destination too far 跳转⽬标太远jump destination must specify a label 跳转⽬标必须指定⼀个标记instruction does not allow NEAR indirect addressing 指令不允许近间接寻址instruction does not allow FAR indirect addressing 指令不允许远间接寻址以上就是汇编中常见错误信息及中⽂注解,希望对你有所帮助。
MASM汇编错误信息说明
MASM汇编错误信息说明1、test.asm(54): error A2000: Block nesting error说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。
修改:检查段定义,使段名前后保持一致。
2、test.asm(5): error A2005: Symbol is multidefined: DATA说明:此错误信息提示DATA符号重复定义了。
修改:将其中一个符号DATA重新设置。
3、test.asm(7): error A2009: Symbol not defined: B9H说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。
按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。
另一种出错的可能原因是程序中使用的符号变量没有定义。
修改:以0B9H取代B9H;使用伪指令定义变量。
4、test.asm(11): error A2009: Symbol not defined: NO说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。
注意,汇编语言规定符号中可以使用下划线。
修改:将no-count改为no_count。
5、test.asm(28): error A2010: Syntax error说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。
修改:按照汇编指令的规定格式重新编写。
6、test.asm(2): error A2018: Operand must be register: DX说明:指定的寄存器不是指令或伪指令所要求的。
如:ASSUME DX:DATA修改:查看汇编指令的规定格式。
7、test.asm(16): error A2028: Operator expected说明:汇编程序需要的是操作符,得到的却是其它内容。
出错信息(川大微机原理实验资料和内容以及MASM使用方法)
出错信息在使用MASM5.0对源程序进行汇编时,对于有错误的或可置疑的语句,MASM将显示出相关出错或警告信息。
出错信息分为两类:一类是带编号的出错代码信息。
这些错误或警告与源程序中的某一个语句(或指令)行代码有关,并赋以相应的编码。
在显示出错代码的同时,还给出了简要的注释。
另一类出错信息没有编号,他们是针对整个汇编程序的,而不是针对某一语句行的,因而,只给出了简要的注释。
一、带编号的错误带有编号的错误信息的显示格式如下:sourcefile (line):code messagesourcefile是出错的源程序文件名。
如果定义于INCLUDE文件中的宏有错,则源程序文件名是指引用宏并对其进行展开的那一个程序文件名。
line是MASM无法进行汇编的那条语句源程序中的行号。
Code是以Microsoft 语言程序格式指定的代码。
它以error或warning开始,后跟5个字符的代码。
第一个字符表示编程语言,汇编语言是字符A;第二个代码是数字符,表示警告级别;2表示严重错误(Severe Errors);4表示严重警告(Severe Warnings);5表示建议警告(Advisory Warnings);最后三个数字是错误编号。
message是对该错误或警告的简要说明。
比如:test.ASM(33):error A006:Phase error between passes上述信息表明,在源程序test.ASM的33行中,有006号严重错误。
下面,将按照编号列出错误信息,并给与简要的解释。
错误代码错误描述0Block nesting error块嵌套错误。
指嵌套的过程、段、结构、宏或非正常结束。
例如在某嵌套语句序列中,有外层的结束语句,而无内层的结束语句,所造成的嵌套错误。
1 Extra characters on line在一语句行中有多余的字幅。
指在一行中除了已有该汇编语句的全部信息外,还有多余的字幅。
汇编语言常见错误指令解决办法
(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 间址。
编写汇编语言常见错误分析
编写汇编语言常见错误分析
这里采纳 C51软件包中的宏汇编器A51作为编绎器,的汇编语言编写时要注重一定的语法,具体介绍可以参考相关参考书,语法错误解造成汇编失败,频繁的汇编错误如下:
1. 标号重复:
常见于复制、粘贴程序时遗忘修改标号,造成浮现多个相同的标号,标号是不允许重复的。
2.标点符号以全角方式输入:
汇编程序要求标点符号为半角方式,否则汇编失败。
可以在输入:,;
时切换到半角方式,或者在大写状态输入标点符号,这也是很简单犯而且不简单发现的错误。
3.数值FFH 前遗漏0:
按照要求应当在a~f前加0,写成0FFH
4.字母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
转换成
第1页共3页。
MASM汇编错误信息说明
MASM汇编错误信息说明1、test.asm(54): error A2000: Block nesting error说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。
修改:检查段定义,使段名前后保持一致。
2、test.asm(5): error A2005: Symbol is multidefined: DATA说明:此错误信息提示DATA符号重复定义了。
修改:将其中一个符号DATA重新设置。
3、test.asm(7): error A2009: Symbol not defined: B9H说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。
按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。
另一种出错的可能原因是程序中使用的符号变量没有定义。
修改:以0B9H取代B9H;使用伪指令定义变量。
4、test.asm(11): error A2009: Symbol not defined: NO说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。
注意,汇编语言规定符号中可以使用下划线。
修改:将no-count改为no_count。
5、test.asm(28): error A2010: Syntax error说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。
修改:按照汇编指令的规定格式重新编写。
6、test.asm(2): error A2018: Operand must be register: DX说明:指定的寄存器不是指令或伪指令所要求的。
如:ASSUME DX:DATA修改:查看汇编指令的规定格式。
7、test.asm(16): error A2028: Operator expected说明:汇编程序需要的是操作符,得到的却是其它内容。
汇编语言一些常见错误
常见的汇编语言错误:
推荐书籍和软件:
1.《IBM PC汇编语言程序设计》作者:沈美明温冬婵/编著出版社:清华大学出版社
以前学习汇编必备的一本书,相当不错。
2.《Intel汇编语言程序设计(第四版)》作者:[美]Kip R.Irvine 译者:温玉杰张家生罗云彬针对Intel系列写的比较全面,翻译的人也不错,作为参考资料应该不错
3.Win32下的汇编书籍罗云彬写的《Windows环境下32位汇编语言程序设计》,32位环境下的汇编开发必备书
3.Emu8086开发环境(提供一些简单例子,并有单步执行和虚拟视窗模拟输入输出,比较直观)4.简单的编译环境(Microsoft公司的MASM.exe,Link.exe和Windows自带的Debug.Exe调试)。
VBA编程中的常见错误及排除技巧
VBA编程中的常见错误及排除技巧VBA(Visual Basic for Applications)是一种用于Microsoft Office套件中的宏编程语言,它允许用户通过编写代码来自动化任务、定制化功能和增强应用程序的能力。
尽管VBA是一个强大的工具,但在编程过程中可能会遇到一些常见的错误。
本文将介绍一些常见的VBA编程错误,并提供相应的排除技巧,以帮助开发人员更好地处理和解决问题。
1. 语法错误语法错误是编程中最常见的错误之一。
它们通常是由于拼写错误、缺少或错误使用关键字、缺少必要的引号或括号等问题引起的。
要避免这些错误,开发人员应该仔细检查代码,并且可以使用VBA的代码编辑器自动检测拼写和语法错误。
2. 对象未定义错误当我们尝试引用一个未定义的对象时,就会出现对象未定义错误。
这通常是由于代码中缺少对对象的赋值或对象名称拼写错误引起的。
为了排除这个错误,开发人员应该确保在引用对象之前对其进行了正确的定义和赋值。
3. 数组越界错误数组越界错误意味着我们尝试访问数组中不存在的元素。
这可能是因为数组索引超出了数组的长度范围,或者是由于循环中使用了错误的索引引起的。
为了解决这个问题,我们应该确保数组的索引在有效的范围内,并且在循环时仔细检查索引的变化。
4. 数据类型不匹配错误数据类型不匹配错误通常发生在我们试图将一个数据类型的值赋给另一个不兼容的数据类型时。
这可以通过使用正确的转换函数(如CInt、CStr、CDbl等)来解决。
开发人员应该根据需要进行显式的数据类型转换,并确保赋值的数据类型匹配。
5. 未处理的异常错误未处理的异常错误指的是程序运行时发生了一个异常,但没有被正确地处理。
这可能会导致程序中断或显示错误信息。
为了避免这种错误,开发人员应该编写适当的错误处理代码,例如使用Try...Catch语句来捕获和处理异常。
6. 循环错误循环错误可能会导致程序陷入无限循环的状态。
这可能是由于循环的终止条件不正确或循环体中缺少必要的递增或递减操作引起的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Masm汇编语言错误信息:Symbol type usage illegal
Masm汇编语言错误注释:PUBLIC 符号的使用不合法
Masm汇编语言错误信息: error
Masm汇编语言错误注释:语句的语法与任何可识别的语法不匹配
------------------------------------------------------------------------------
Masm汇编语言错误信息:Type illegal in context
Masm汇编语言错误信息:Operand was expected
Masm汇编语言错误注释:汇编程序需要的是操作数,但得到的却是其它内容
------------------------------------------------------------------------------
Masm汇编语言错误注释:给出的组合不符合要求
------------------------------------------------------------------------------
Masm汇编语言错误信息:Must be declared in pass 1
Masm汇编语言错误注释:得到的不是汇编程序所要求的常数值.例如,向前引用的向量长度
Masm汇编语言错误信息:Must be structure field name
Masm汇编语言错误注释:需要的是结构字段名,但得到的是其它内容
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Must be register
Masm汇编语言错误注释:希望寄存器作为操作数,但用户提供的是符号而不是寄存器
------------------------------------------------------------------------------
Masm汇编语言错误信息:Symbol is reserved word
Masm汇编语言错误注释:企图非法使用一个汇编程序的保留字(例如,宣布MOV为一个变量)
Masm汇编语言错误信息:Reference to mult defined
Masm汇编语言错误注释:指令引用的内容已是多次定义过的
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Symbol already different kind
Masm汇编语言错误注释:企图定义与以前定义不同的符号
Masm汇编语言错误信息:Already defined locally
Masm汇编语言错误注释:试图定义一个符号作为 EXTERNAL,但这个符号已经在局部定义过了
------------------------------------------------------------------------------
Masm汇编语言错误信息:Register already defined
Masm汇编语言错误注释:汇编内部出现逻辑错误
------------------------------------------------------------------------------
Masm汇编语言错误信息:Division by 0 or overflow
------------------------------------------------------------------------------
Masm汇编语言错误信息:Illegal use of external
Masm汇编语言错误注释:用非法手段进行外部使用
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Symbol not defined
Masm汇编语言错误注释:符号没有定义
------------------------------------------------------------------------------
Masm汇编语言错误注释:指定的类型在长度步可接收
------------------------------------------------------------------------------
Masm汇编语言错误信息:Should have been group name
------------------------------------------------------------------------------
Masm汇编语言错误信息:Extra characters on line
Masm汇编语言错误注释:当一行上已接受了定义指令的足够信息,而又出现了多余的字符
Masm汇编语言错误信息:Must be var,label or constant
Masm汇编语言错误注释:需要的是变量,标号或常数,但得到的是其它内容
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Operand type must match
Masm汇编语言错误注释:在自变量的长度或类型应该一致的情况下,汇编程序得到的并不一样.例如,交换
Masm汇编语言错误信息:Must be record field name
Masm汇编语言错误注释:需要的是记录字段名,但得到的是其它东西
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Forward reference is illegal
Masm汇编语言错误注释:向前引用必须是在第一遍扫视中定义过的
Masm汇编语言错误信息:Segment parameters are changed
Masm汇编语言错误注释:SEGMENT的自变量表与第一次使用这个段的情况不一样
------------------------------------------------------------------------------
Masm汇编语言错误信息:Not proper align/combine type
Masm汇编语言错误注释:SEGMENT参数不正确
------------------------------------------------------------------------------
Masm汇编语言错误信息:Must be record or field name
Masm汇编语言错误注释:需要的是记录名或字段名,但得到的是其它东西
------------------------------------------------------------------------------
[2010-07-19 15:24] Masm汇编语言错误信息注释
8086汇编语言指令
Masm汇编语言错误信息:Block nesting error
Masm汇编语言错误注释:嵌套过程,段,结构,宏指令,IRP,IRPC或REPT不是正确结束.如嵌套的外层已终止,而内层还是打开状态
Masm汇编语言错误信息:Operator was expected
Masm汇编语言错误注释:汇编程序需要的是操作符,但得到的却是其它内容
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Masm汇编语言错误信息:Wrong type of register
Masm汇编语言错误注释:指定的寄存器类型并不是指令中或伪操作中所要求的.例如ASSUME AX
Masm汇编语言错误信息:Symbol has no segment