当前位置: 代码迷 >> 汇编语言 >> 汇编中的异常,忘高手解答
  详细解决方案

汇编中的异常,忘高手解答

热度:10187   发布时间:2013-02-26 00:00:00.0
汇编中的错误,忘高手解答
小弟刚刚学习汇编,经过磨难好不容易看到书的一半可以开始真正在计算机上操作了。很开心,可是书中的一段例子在编译过程中每行都有错误,经过我猜测和更改还有以下错误,望大侠们帮我修正,谢谢。
编译的工具是radasm和masmplus.
错误报告是:
1.ASM(33) : error A2006: undefined symbol : START
1.ASM(11) : error A2004: symbol type conflict
1.ASM(33) : error A2148: invalid symbol type in expression : START

程序是:
DATA SEGMENT
ASC DB 100 DUP ('7')
BCD DB 50 DUP ('?')
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
  ASSUME CS:CODE,DS:DATA
START: PUSH DS
  SUB AX,AX
  PUSH AX
  MOV AX,DATA
  MOV DS,AX
  MOV BH,50
  MOV SI,0
  MOV CL,4
  MOV DI,0
REPPT: MOV AL,ASC [SI]
  AND AL,0FH
  SAL AL,CL
  MOV BL,AL
  MOV AL,ASC [SI+1]
  AND AL,0FH
  OR AL,BL
  MOV BCD [DI],AL
  INC SI
  INC SI
  INC DI
  DEC BH
  JNZ REPPT
  RET
MAIN ENDP
CODE ENDS
  END START


注:原程序的第二行有 ASC BUF DB 100 DUP('7')
  DATA SEG SEGMENT
都会出现错误,我试着去掉了buf和seg就可以了,是不是一个标识符中间不能有空格,应该是不能有的。。。。可是原书中的确有的。。。。郁闷 



------解决方案--------------------------------------------------------
新建DOS工程. 黑色那个(DOS.exe).

正在处理工程 ...
ml.exe /Zm /c /nologo /Fo"DOS.obj" "D:\MASMPlus\Project\DOS1\DOS.asm"
完成 耗时 93ms


link5.exe /nologo "DOS.obj";

准备就绪:D:\MASMPlus\Project\DOS\DOS.EXE

------解决方案--------------------------------------------------------
关于 START: 的错误好理解,这个是由于稍高版本的编译器对标号有局部和全局的分别造成的。缺省的名称后面一个冒号的为子程局部标号;带两个冒号的形如 START:: 这样的是全局标号,整个模块文件中都可以使用。
那个第 11 行的 symbol type confict 提示,什么意思呢?楼主用的编译选项有问题?用了 /coff ?如果是这样的话,那用的一般是 Masm32 组合了。但这段代码是 dos16 类的;还是换个 Masm5/6 这样的比较好。因为 Masm32 的编译程序虽然是支持 dos16 类模块的,但链接程序 link.exe 不支持创建 dos 类程序。
  相关解决方案