【建议每个问问题的都看看 自己写的】科普:什么是编译错误?编译错误有什么用?怎么看编译错误?
;*****************************************************************************************************************;作者:zklhp
;Email:zklhp@
;QQ:493165744
;2012.7.2
;版权所有 转载请保持完整
;*****************************************************************************************************************
以下内容仅就汇编来说 编译器是masm 当然编程都是相通的 其他语言和编译器类似
一、什么是编译错误
不论你用的哪种编译器 只要是编译出错 编译器肯定会告诉你有什么错误 错误在哪 他的提示信息可以称为编译错误(compilation error) 这个东西大概就这么回事 具体解释欢迎百度或wikipedia。。
二、编译错误有什么用
当然是告诉你错误在哪啦、、
具体来说 除了告诉你错误在哪 又有几个其他用处 比如 在求助时帮助回答者快速找到问题的所在 某些错误可以反映某种问题 等等
三、怎么看编译错误
有几种情况你是看不到编译错误的:
1 眼神不好
2 某些IDE隐藏了它
3 编译器有问题。。
眼神不好目前无解。。。 先说最后一个 编译器有问题 对于masm来说 如果ml.exe所在的目录没有ml.err这个文件的话 错误信息可能不全 具体是这样的
解决的方法就是找到这个文件 正常应该是这样
以上的代码是选的论坛某位朋友的代码 一块帖了罢
程序代码:
assume cs:code,ds:data,ss:stack data segment;数据段 db 'welcome to masm!' db 02h,24h,71h data ends stack segment dw 8 dup(0) stack ends code segment start:mov ax,data mov ds,ax mov ax,0b800h mov es,ax mov ax,stack mov ss,ax mov sp,10h mov bx,0;字属性定位 mov di,0;数据每行偏移变量 MOV si,0;第几行定位 mov dx,0;显存每行中位置 mov cx,3; s0: push cx mov cx,16 s: mov al,[di];读取DATA段的数据 mov ah,[bx+16];读取DATA段第二行的字属性 mov es:[dx+si],al;将DATA段的数据送入显存 mov es:[dx+si+1],ah;将DATA段的第二行的字属性数据送入显存 inc di add dx,2 loop s; inc bx;每行字属性定位 pop cx loop s0; mov ax,4c00h; int 21h; code ends end start;
Z:\DOS.asm(38) : error A2031: must be index or base register
下面以这个错误信息为例讲 其实很简单 编译器告诉了你三件事
一、错误在哪
二、错误码是什么
三、错误的描述信息
以上的一行错误信息对应了这三个事 以冒号分割 具体来说是
Z:\DOS.asm 错误的文件
(38) 错误的行号 !!!重要!!!
A2031 错误吗
must be index or base register 错误信息
到这里应该都会看了罢
FAQ(常见问题)
一、我看不到错误码
如果不是眼神不好或者编译器有问题 一般是你用的工具也就是IDE的问题 不过不同工具又不一样了 比较好的工具会在下面显示编译信息 实在不行你手动编译罢
二、错误信息什么意思看不懂
想知道错误信息的含义有以下几个方法
1 手册或帮助 编译器都有一个东西告诉你每个错误的含义 不过 很多人懒得看或看不懂
2 百度或谷歌。。 推荐方法
3 上网问也可以 但至少你得帖全罢
三、我看不见行号
虽然有人推荐你用记事本等简单的工具写代码 而且 有人还觉得这样很帅很牛 至少 在你能写出不用纠正编译错误的代码之前 换个好点的编辑器 这样是真能提高效率啊
四、怎么有些错误没写错误的文件和行号
举个例子
Z:\>ml Zm /c /nologo /Fo"DOS.obj" "Z:\DOS.asm"
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: Zm
MASM : fatal error A1000: cannot open file : Zm
一般是你的参数写的有问题。。
后记
以前 网上有人问程序编译错误的时候 我都不怕麻烦的自己看或者编译 后来 烦了:本来可以由编译器和你自己做的事情为啥要我来做??
记住 能帮你的只有你自己 要学会自己解决问题 如果你实在解决不了 至少 为帮助你的人提供方便 具体来说就是 帖全部代码、编译的错误和出错的详细信息
[ 本帖最后由 zklhp 于 2012-7-2 20:24 编辑 ]