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、说明:汇编程序需要的是操作符,得到的却是其它内容。
说明:汇编程序需要的是操作符,得到的却是其它内容。
test.asm中第16行MOV DX OFFSET BUF2,显然是两操作数中间缺少“,”,显然是两操作数中间缺少“”符号导致出错。
符号导致出错。
修改:两操作数之间用“”号分隔。
修改:两操作数之间用“,”号分隔。
8、test.asm(47):error A2029:Division by0or overflow、说明:给出一个用零作除数的表达式或溢出。
说明:给出一个用零作除数的表达式或溢出。
test.asm中第47行指令AND AL, 00100000数据溢出,这是因为,汇编程序默认数制为数据溢出,这是因为,十进制,因而该指令中的源操作数超出范围。
十进制,因而该指令中的源操作数超出范围。
修改:若欲输入的是二进制数,修改:若欲输入的是二进制数,在该数后加b,说明为二进制数。
,说明为二进制数。
9、test.asm(8):error A2048:Must be index or baseregister、说明:指令需要基址或变址寄存器,源程序中给出的是其它寄存器。
说明:指令需要基址或变址寄存器,源程序中给出的是其它寄存器。
test.asm中第8行指令MOV AL,[SI+DX],显然,DX,显然,寄存器应寄存器。
为BX寄存器。
修改:按寻址方式规定修改。
修改:按寻址方式规定修改。
10、test.asm(6):error A2049:Illegal use of register、说明:此错误信息为test.asm中第6行出错,查看该指令,是由于将两说明:行出错,查看该指令,操作数之间的“”号错为“”号而出错。
另外一种情况,操作数之间的“,”号错为“.”号而出错。
另外一种情况,如MOVAL,DL+20H,则是源操作数为非法格式。
,则是源操作数为非法格式。
修改:按照汇编指令的规定格式重新编写。
修改:按照汇编指令的规定格式重新编写。
11、test.asm(48):error A2050:Value out of range、说明:出错。
说明:test.asm中第48行指令AND AL,00010000出错。
因为汇编程序默认数制为十进制,因此,该指令源操作数为位立即数,序默认数制为十进制,因此,该指令源操作数为16位立即数,不位寄存器。
能送入8位寄存器。
修改:位寄存器,修改:将8位寄存器AL改为16位寄存器,如AX。
12、test.asm(10):error A2052:Improper operand type、说明:非法的操作数类型。
说明:非法的操作数类型。
如test.asm中第10行指令MOV RESULT,[SI]。
汇编语言规定两个操作数不能同时为存储器操作数。
汇编语言规定两个操作数不能同时为存储器操作数。
修改:先将源操作数传送到寄存器,再由寄存器传送到另一个存储单元。
修改:先将源操作数传送到寄存器,再由寄存器传送到另一个存储单元。
13、test.asm(3):error A2053:Jump out of range by82byte(s)、说明:说明:此错误信息为源程序test.asm中第3行的转移指令指定的转移超出允许范围。
出允许范围。
修改:可在该转移指令与目标指令中增加一条无条件转移指令。
修改:可在该转移指令与目标指令中增加一条无条件转移指令。
14、test.asm(21):error A2056:Immediate mode illegal、说明:错误,操作数不能是立即数。
说明:test.asm中第21行指令IDIV8错误,操作数不能是立即数。
修改:在该指令前增加一条传送指令,修改:在该指令前增加一条传送指令,将该操作数8送入一个8位寄存器存放,器存放,如BL,则该指令可修改为IDIV BL。
,。
15、test.asm(41):error A2062:Missing or unreachable CS、说明:伪指令导致。
说明:这是由于缺乏段寄存器说明ASSUME伪指令导致。
修改:在代码段中增加段寄存器说明ASSUME伪指令。
修改:伪指令。
16、test.asm(26):error A2105:Expected:comma、说明:双操作数指令中缺少逗号。
说明:双操作数指令中缺少逗号。
修改:在该指令的两个操作数中加上逗号。
修改:在该指令的两个操作数中加上逗号。
17、test.asm(46):error A2105:Expected:instruction ordirective、说明:通常是指令助记符输入错误。
说明:通常是指令助记符输入错误。
修改:检查指令助记符。
修改:检查指令助记符。
18、test.asm(9):warning A4001:Extra characters on line、说明:当一行上已接受了定义指令说明的足够信息,说明:当一行上已接受了定义指令说明的足够信息,而又出现多余的字符,汇编程序提示出错。
一般多由于指令中出现多余或非法的符汇编程序提示出错。
号。
修改:仔细检查该指令。
修改:仔细检查该指令。
19、test.asm(13):warning A4016:Reserved word used assymbol:AAA、说明:企图非法使用一个汇编程序的保留字,是汇编的保留字(说明:企图非法使用一个汇编程序的保留字,AAA是汇编的保留字(指令助记符),不能作为符号使用。
令助记符),不能作为符号使用。
),不能作为符号使用修改:重新设置符号名。
修改:重新设置符号名。
20、test.asm(33):warning A4031:Operand types must match、说明:test.asm中第33行指令MOV AX,RESULT,说明:,其中变量RESULT定义的,其属性为字节,不匹配。
是用DB定义的,其属性为字节,因而与16位寄存器AX不匹配。
位寄存器,另一种情况是两个操作数分别为8位寄存器和18位寄存器,同样也不匹配。
也不匹配。
修改:选用相应位数的寄存器保证两个操作数为相同位数。
修改:选用相应位数的寄存器保证两个操作数为相同位数。
21、test.asm(19):warning A4057:Illegal size for operand、说明:操作数的长度非法,说明:操作数的长度非法,如PUSHAL。
非法。
修改:改用指令规定位数的寄存器,修改:改用指令规定位数的寄存器,如PUSH AX。
22、test.asm(55):warning A4085:End of file,no ENDdirective、说明:源程序中缺乏模块结束伪指令END。
修改:整个源程序最后增加模块结束伪指令END。
23、test.asm(32):warning A4101:Missing data;zero assumed说明:行的指令少了操作数,说明:此错误信息提示源程序中第32行的指令少了操作数,即单操作数指令缺少操作数或双操作数指令缺少一个操作数。
指令缺少操作数或双操作数指令缺少一个操作数。
作数修改:给指令加上适当的操作数。
修改:给指令加上适当的操作数。