汇编学习,错误汇总

一、error A2010: Syntax error

语法错误,写错程序了

 

二、error A2105: Expected: instruction or directive

这个就是告诉你命令写错了,看看你是不是把某个mov写成moc了(我就是这样找了半天,却不知道masm已经提示了哪行出问题),要不然就是你漏掉了什么…

 

三、error A2042: Constant expected

mov bx,dl*160+dh*2

这东西必须按要求来,比如你不能这样写 

 因为这条mov指令,从8位dh到16位bx,它遵循:

另外:
MOV ES:[SI + DI],AX
SI、DI,不可同时都用在括号里面。

可以用乘号,如:MOV DI, 13 * 160,但不能直接用寄存器bx*13,而要使用mul乘法指令


四、error A2004: symbol type conflict (编译器 radasm)

用radasm编译直接出错:
M:\1.asm(9) : error A2004: symbol type conflict
M:\1.asm(34) : warning A4023: with /coff switch, leading underscore required for start address : COFF
------------------------------------------------------------
还有我用masm.exe可以通过,radasm和masmplus不能,提示同样错误!

ml 编译时别加 /coff 选项。你这个是 dos16 类的程序,coff 格式的模块是 Win32 类使用的。

不建议同时熟悉多种语言编辑器,因为毕竟语法不完全相同。会造成很多不必要的麻烦。


五、error A2035: Operand must have size

A2035错误:操作数必须匹配

传送指令,编译软件不能确定是8位数的,还是16位数的。

应该改成如下: mov BYTE  PTR  [si+08h],'$'       ;说明是字节传送,WORD PTR字传送

 

六、 warning A4001: Extra characters on line

A4001错误:行内有扩展字符

 

七、Immediate mode illegal

立即数模式错误。例如:
mov ds,1000h 或 mov [20h],ax 

 

八、divide overflow

除法溢出:除法只能是16位除8位,或32位除16位

 

九、使用ml来编译asm文件,提示:

HIDE87: Int 11h hook installed (must reboot to remove). Use SHOW87 to …

目前尚未解决,求指点

 

十、使用Debug调试exe文件,导致Debug崩溃:

这个是弹出的对话框内容:
The NTVDM CPU has encountered an illegal instruction.
CS:0e50 IP:0000 OP:8e c8 05 ac 0a Choose 'Close' to terminate the application.

感觉其实就是自己程序写错了,访问改写了系统内存导致崩溃,注意下使用寄存器前是否初始化,或漏掉了

 

十一、链接obj错误

LINK : warning LNK4044: unrecognized option "z2"; ignored

LINK : error : Segment reference in fixup recordtest.obj : fatal error

LNK1123: failure during conversion to COFF: file invalid or corrupt

Windows平台下,源代码编译出来的obj主要有两种格式:OMF和COFF

DOS程序编译的obj文件都是omf格式的,omf格式的obj要用Segmented Linker链接,生成的是DOS可执行文件或者NE文件,

而Win32程序编译的obj必须是COFF格式的,要用Incremental Linker链接, 生成的是32位的PE或16/32位混合的LE文件

 masm编译器ml.exe有两个选项 /coff 和 /omf 其中, /coff控制生成的obj为coff格式, /omf类似

在ml的第6版中, 默认选项为omf, 如果编译win32程序忘了指定/coff会出错.

在ml的第7和第8版中, 默认选项为coff, 这个时候如果编译Dos程序忘了指定/omf会出错的。

 

 

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值