masm错误:错误A2006:未定义符号:BEGIN
问题描述:
我尝试在win7(32位)上使用MASM6.15编写中断解决程序。masm错误:错误A2006:未定义符号:BEGIN
但编译时出现两个奇怪的错误信息。
组装: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
答
MOV DX, OFFESET RING
然后
为什么END BEGIN
? BEGIN
是一个简单的标签,而不是一个段名或进程名称
删除END BEGIN
,并在文件的最后添加END
----- -----修订
也许如果您尝试使用小内存模型,则要告诉链接程序在哪里启动。此时,您需要在文件的末尾添加以下代码行:end BEGIN
。它将告诉链接器标签BEGIN是否正确这个程序应该从哪里开始。
但是,有时您可能会从汇编程序中收到错误。像这样:
错误A2006:未定义的符号:BEGIN
那么你应该尝试将您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' Michael 2014-11-23 07:55:18
就像一个参考:没有理由汇编代码必须全部大写。我不知道为什么这么多的范例和教程使用全部大写,但我认为人们应该离开这个东西。 – 2014-11-23 08:03:32
我很抱歉,我改变了它,但它仍然有相同的错误.. – tinyork 2014-11-23 11:11:11