masm错误:错误A2006:未定义符号:BEGIN

时间:2014-11-23 07:50:33

标签: windows assembly masm

我尝试在win7(32位)上使用MASM6.15来编写中断解决程序。

但编译时我收到两条奇怪的错误信息。

  

组装:int7.asm

     

int7.asm< 19基:错误A2206:表达式中缺少运算符

     

int7.asm< 77> :错误A2006:未定义的符号:BEGIN

我在演示中标记了这两行。 非常感谢!!

    DATA    SEGMENT
    COUNT   DW  1
    MSG     DB  0DH,0AH,'THE BELL IS RINGING!',07H,0DH,0AH,'$'
    FLAG    DB  0
    DATA    ENDS

    CODE    SEGMENT
        ASSUME  CS:CODE,DS:DATA
    MAIN    PROC    FAR
    BEGIN:  PUSH    DS
            XOR     AX,AX
            PUSH    AX
            MOV     AL,1CH
            MOV     AH,35H
            INT     21H
            PUSH    ES
            PUSH    BX
            ;----------------------
            MOV     DX,OFF SEG RING
            MOV     AX,SEG RING  ; it shows error here : missing operator
            MOV     DS,AX
            MOV     AL,1CH
            MOV     AH,25H
            INT     21H
            ;----------------------
            IN     AL,21H
            AND     AL,11111110B
            OUT     21H,AL
            INT     21H         
            STI
            ;----------------------
            ;REPEAT 
    DELAY:  MOV     SI,1000H
    DELAY1: DEC     SI
            JNZ     DELAY1       
            AND     FLAG,01H       
            JNZ     EXIT1
            DEC     SI
            JNZ     DELAY1  
    EXIT1:  MOV     FLAG,0
            MOV     COUNT,1
            POP     DX
            POP     DS
            MOV     AL,1CH
            MOV     AH,25H
            INT     21H
            RET
    MAIN    ENDP
    RING    PROC FAR
            PUSH    DS
            PUSH    AX
            PUSH    CX
            PUSH    DX
            MOV     AX,DATA
            MOV     DS,AX
            STI
            DEC     COUNT
            JNZ     EXIT
            MOV     DX,OFFSET MSG
            MOV     AH,09H
            INT     21H
            MOV     COUNT,182
            MOV     AH,0BH
            INT     21H
            CMP     AL,0
            JZ      EXIT   
            MOV     FLAG,1
     EXIT:  CLI
            POP     DX
            POP     CX
            POP     AX
            POP     DS
            IRET
    RING    ENDP

    CODE    ENDS
    END    BEGIN    ; it shows that BEGIN is undefined symbol

1 个答案:

答案 0 :(得分:0)

MOV DX, OFFESET RING

然后

为什么END BEGINBEGIN只是一个标签而不是段名称或进程名称

删除END BEGIN并在文件末尾添加END

- - - - - - - - 修订

或者,如果您尝试使用小型内存模型,也许您想告诉链接器程序启动的位置。此时,您需要在文件末尾添加:{ {1}}。它将告诉链接器标签BEGIN正是该程序应该从哪里开始的。

但是,有时您可能会从汇编程序中收到错误。像这样:

  

错误A2006:未定义的符号:BEGIN

然后你应该尝试将你的end BEGIN标签移出主程序(你希望它成为这个程序的条目)。程序看起来像:< / p>

BEGIN