汇编学习,错误汇总

news/2025/1/12 21:10:02/

一、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会出错的。

 

 


http://www.ppmy.cn/news/517560.html

相关文章

dosbox 自动运行_如何使用DOSBox在新计算机上运行90年代的老旧游戏

dosbox 自动运行 I was over at my parents house for the Christmas Holiday and my mom pulled out a bunch of old discs and software from 20+ years ago. One gaame was "Star Trek: Judgment Rites" from

安装SQL2000时出现 ntvdm遇到一个硬错误的处理办法

不要去运行AUTORUN.EXE 运行这个就会提示:“NTVDM遇到一个硬错误”导致SQL安装不成功,其实直接去运行 SETUP.BAT 就可以安装了 ;假如是下的4合一的版本或者是4合1的光碟您只要在 其他目录下面找到 SETUP.BAT 也是可以的 DEVELOPER、ENTERPRIS…

安装VC,NTVDM CPU 遇到无效指令 --绝对能用的解决方法

现象: 在XP SP3环境下安装VC6EN出现问题,提示:16位windows子系统,NTVDM遇到无效指令。 CS:05e6 IP:0138 OP:63 00 74 00 4e 选择“关闭”终止应用程序。 以前在此机器上没有安装过VC或其他VS&am…

打开 codeblocks 出现 ntvdm.exe 停止工作

打开codeblocks出现错误,但是不影响使用。 不知道是哪里出了问题。 转载于:https://www.cnblogs.com/westfly/archive/2012/03/05/2380067.html

NTVDM遇到一个硬错误

友机器一运行批处理就出这个提示.于是照下面办法做了.问题解决. 描述: Windows Virtual Machine是为了兼容旧的16位Windows和DOS程序而设置的虚拟机。 常见错误: N/A 是否为系统进程: 否 启动项直接禁掉就行了 如果还出来就按F8进安全模式查毒 在C:\WINDOWS\system32下找到n…

vb安装过程中 ntvdm.exe[9696]中发生未处理的win32异常 vb代写

最近电脑总是出问题导致我的学习效率很低,前几天在用VB6.0的时候有个知识点不太熟悉,于是按F1发现不会出来帮助文档。突然想到重新装系统之后忘记了安装MSDN帮助插件,就在我安装这个软件的时候发现电脑总是报错,而且感觉报错的内容…

ntvdm.exe

进程文件: ntvdm 或者 ntvdm.exe 进程名称: Windows 16-bit Virtual Machine 描述: ntvdm.exe是Windows 16位虚拟机的一部分。该进程用于使16位的进程能够运行在32位的系统环境下。这个程序对你系统的正常运行是非常重要的。 出品者&#xff…

进程文件ntvdm.exe

ntvdm.exe是Windows16位虚拟机的一部分,该进程用于使16位的进程能够运行在32位的系统环境下。 微软采用WOW(Windows On Windows)的技术使得XP等NT内核操作系统上可以运行旧版操作系统开发的应用程序。比如,我们在XP下打开Windows 3.2的应用程序-记事本&a…