语法错误,写错程序了
这个就是告诉你命令写错了,看看你是不是把某个mov写成moc了(我就是这样找了半天,却不知道masm已经提示了哪行出问题),要不然就是你漏掉了什么…
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 类使用的。
不建议同时熟悉多种语言编辑器,因为毕竟语法不完全相同。会造成很多不必要的麻烦。
A2035错误:操作数必须匹配
传送指令,编译软件不能确定是8位数的,还是16位数的。
应该改成如下: mov BYTE PTR [si+08h],'$' ;说明是字节传送,WORD PTR字传送
A4001错误:行内有扩展字符
立即数模式错误。例如:
mov ds,1000h 或 mov [20h],ax
除法溢出:除法只能是16位除8位,或32位除16位
HIDE87: Int 11h hook installed (must reboot to remove). Use SHOW87 to …
目前尚未解决,求指点
这个是弹出的对话框内容:
The NTVDM CPU has encountered an illegal instruction.
CS:0e50 IP:0000 OP:8e c8 05 ac 0a Choose 'Close' to terminate the application.
感觉其实就是自己程序写错了,访问改写了系统内存导致崩溃,注意下使用寄存器前是否初始化,或漏掉了
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会出错的。