鱼C论坛

 找回密码
 立即注册
查看: 12168|回复: 5

[技术交流] MASM汇编错误信息说明

[复制链接]
发表于 2013-1-16 02:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
MASM汇编错误信息说明各位鱼油在使用masm编译出错时可以通过这个表列出的信息进行排错。
如第一个:test.asm(54): error A2000: Block nesting error
说明test.asm这个文件的第54行出现了错误号为A2000号错误,错误信息为
Block nesting error,根据下表你就知道这个错误信息的含义,如果下表没有列出,你可以去谷歌翻译或是百度查找错误信息,坚持自己先查错!


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行MOVDX 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: Mustbe 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:Jumpout 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行的指令少了操作数,即单操作数指令缺少操作数或双操作数指令缺少一个操作数。
修改:给指令加上适当的操作数。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-16 14:29:20 | 显示全部楼层
谢谢分享!!张兄给力!!{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-1-16 14:35:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-9-13 13:52:44 | 显示全部楼层
学习学习,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-23 10:29:01 | 显示全部楼层
{:1_1:}{:1_1:},谢谢楼主啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-26 14:30:44 | 显示全部楼层
感谢分享!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 18:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表