
MASM汇编错误信息说明.docx
6页本文格式为Word版,下载可任意编辑MASM汇编错误信息说明 MASM汇编错误信息说明 1、test.asm(54): error A2000: Block nesting error 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致 修改:检查段定义,使段名前后保持一致 2、test.asm(5): error A2022: Symbol is multidefined: DATA 说明:此错误信息提示DATA符号重复定义了 修改:将其中一个符号DATA重新设置 3、test.asm(7): error A2022: Symbol not defined: B9H 说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H 按规定以字母开头的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号另一种出错的可能理由是程序中使用的符号变量没有定义 修改:以0B9H取代B9H;使用伪指令定义变量 4、test.asm(11): error A2022: Symbol not defined: NO 说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为 减号,因此,汇编提示标号NO没有定义。
留神,汇编语言规定符号中可以使用下划线 修改:将no-count改为no_count 5、test.asm(28): error A2022: Syntax error 说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出 错 修改:按照汇编指令的规定格式重新编写 6、test.asm(2): error A2022: 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 by 0 or overflow 说明:给出一个用零作除数的表达式或溢出test.asm中第47行指令AND AL, 0010 0000 数据溢出,这是由于,汇编程序默认数制为十进制,因而该指令中的源操作数超出范围。
修改:若欲输入的是二进制数,在该数后加b,说明为二进制数 9、test.asm(8): error A2048: Must be index or base register 说明:指令需要基址或变址寄放器,源程序中给出的是其它寄放器test.asm中第8行指令 MOV AL, [SI+DX],鲜明,DX寄放器应为BX寄放器 修改:按寻址方式规定修改 10、test.asm(6): error A2049: Illegal use of register 说明:此错误信息为test.asm中第6行出错,查看该指令,是由于将两操作数之间的“,”号 错为“.”号而出错另外一种处境,如MOV AL, DL+20H,那么是源操作数为非法格式 修改:按照汇编指令的规定格式重新编写 11、test.asm(48): error A2050: Value out of range 说明:test.asm中第48行指令AND AL, 0001 0000出错由于汇编程序默认数制为十进制, 因此,该指令源操作数为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 by 82 byte(s) 说明:此错误信息为源程序test.asm中第3行的转移指令指定的转移超出允许范围 修改:可在该转移指令与目标指令中增加一条无条件转移指令 14、test.asm(21): error A2056: Immediate mode illegal 说明:test.asm中第21行指令IDIV 8错误,操作数不能是立刻数 修改:在该指令前增加一条传送指令,将该操作数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 or directive 说明:通常是指令助记符输入错误 修改:检查指令助记符 18、test.asm(9): warning A4001: Extra characters on line 说明:当一行上已采纳了定义指令说明的足够信息,而又展现多余的字符,汇编程序提示出 错一般多由于指令中展现多余或非法的符号 修改:留心检查该指令 19、test.asm(13): warning A4016: Reserved word used as symbol: 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 说明:操作数的长度非法,如PUSH AL 修改:改用指令规定位数的寄放器,如PUSH AX 22、test.asm(55): warning A4085: End of file, no END directive 说明:源程序中缺乏模块终止伪指令END 修改:整个源程序结果增加模块终止伪指令END 23、test.asm(32): warning A4101: Missing data; zero assumed 说明:此错误信息提示源程序中第32行的指令少了操作数,即单操作数指令缺少操作数或 双操作数指令缺少一个操作数 修改:给指令加上适当的操作数 — 6 —。












