窗口7 64位masm32中的“错误A2006:未定义符号”?

时间:2011-09-25 06:03:38

标签: assembly masm masm32

当我运行此示例时,我收到错误。删除PROC1 PROC FAR后,我收到另一个错误“符号类型冲突”。使用/ coff:“起始地址需要前导下划线:START”。

  

Microsoft(R)宏汇编程序版本6.14.8444版权所有(C)Microsoft Corp 1981-1997。保留所有权利。

     

组装:D:\ Linux \ test1.asm D:\ Linux \ test1.asm(28):错误A2006:未定义符号:START
  D:\ Linux \ test1.asm(16):错误A2004:符号类型冲突
  D:\ Linux \ test1.asm(28):错误A2148:表达式中的符号类型无效:STAR

        TITLE EXAMPLE
DATA    SEGMENT
VARX    DW          6
VARY    DW          7
RESULT  DW          ?
DATA    ENDS
STACK1  SEGMENT PARA STACK
        DW          20H DUP(0)
STACK1  ENDS
COSEG   SEGMENT
PROC1   PROC    FAR
        ASSUME  CS:COSEG, DS:DATA, SS:STACK1
START:  PUSH    DS
        MOV     AX, 0
        PUSH    AX
        MOV     AX, DATA
        MOV     DS, AX
        MOV     DX, VARX
        MOV     DX, VARY
        MOV     CL, 3
        SAL     DX, CL
        SUB     DX, VARX
        SAR     DX, 1
        MOV     RESULT, DX
        RET
PROC1   ENDP
COSEG   ENDS
        END START

附录:

删除开始后,它在第16行留下错误。为什么在MOV AX, DATA发生此错误?

  

Microsoft(R)宏汇编程序版本6.14.8444版权所有(C)Microsoft Corp 1981-1997。保留所有权利。

     

组装:D:\ Linux \ test1.asm D:\ Linux \ test1.asm(16):错误A2004:符号类型冲突

1 个答案:

答案 0 :(得分:2)

因为START是在一个过程中定义的,所以它不是它之外的有效标识符。

此外,如果它确实有效,您将创建一个错误。 PROC是一个扩展为设置堆栈帧的宏,因此标签START实际上不在代码的开头,而END START表示程序的入口点是START。如果您希望程序以主程序开头,则应在END之后使用该程序的名称,如END PROC1。

如果您打算将入口点设置到过程中的某个位置,则可以使用OPTION NOSCOPED和OPTION SCOPED来标记标签,因此标签将是公共的,而不仅仅是在过程中可见。