Windows masm错误:错误A2006:未定义符号:开始

Windows masm错误:错误A2006:未定义符号:开始,windows,assembly,masm,Windows,Assembly,Masm,我尝试在win7(32位)上使用MASM6.15编写一个中断解决程序 但我在编译时收到两条奇怪的错误消息 汇编:int7.asm int7.asm:错误A2206:表达式中缺少运算符 int7.asm:错误A2006:未定义符号:开始 我在演示中标记了这两行。 非常感谢 DATA SEGMENT COUNT DW 1 MSG DB 0DH,0AH,'THE BELL IS RINGING!',07H,0DH,0AH,'$' FLAG D

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

但我在编译时收到两条奇怪的错误消息

汇编:int7.asm

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

int7.asm:错误A2006:未定义符号:开始

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

    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

MOV-DX,offset-RING

然后

为什么
结束开始
BEGIN
只是一个标签,而不是段名或进程名

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

-----更新-----

或者,如果您尝试使用小内存模型,您可能想告诉链接器程序从何处开始。此时,您确实需要在文件末尾添加这一行
end BEGIN
。这将告诉链接器标签BEGIN正是此程序应该从何处开始

然而,有时您可能会从汇编程序中得到一个错误。像这样:

错误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
BEGIN:
MAIN    PROC    FAR
 PUSH    DS
        XOR     AX,AX
        PUSH    AX
        MOV     AL,1CH
        MOV     AH,35H
        INT     21H
        PUSH    ES
        PUSH    BX
        ;----------------------
        MOV     DX,OFFET 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    

MOV-DX,OFF-SEG-RING
仅供参考:组装代码不必全部为大写。我不知道为什么这么多asm示例和教程都使用大写字母,但我认为人们应该避免使用大写字母。很抱歉,我已经更改了它,但仍然存在相同的错误。。