Windows masm错误:错误A2006:未定义符号:开始
我尝试在win7(32位)上使用MASM6.15编写一个中断解决程序 但我在编译时收到两条奇怪的错误消息 汇编:int7.asm int7.asm:错误A2206:表达式中缺少运算符 int7.asm:错误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
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示例和教程都使用大写字母,但我认为人们应该避免使用大写字母。很抱歉,我已经更改了它,但仍然存在相同的错误。。