2014-11-23 52 views
0

我嘗試在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 
+1

'MOV DX,OFF SEG RING' < - 你的意思是'MOV DX,OFFSET RING'嗎? – Michael 2014-11-23 07:55:18

+1

就像一個參考:沒有理由彙編代碼必須全部大寫。我不知道爲什麼這麼多的範例和教程使用全部大寫,但我認爲人們應該離開這個東西。 – 2014-11-23 08:03:32

+0

我很抱歉,我改變了它,但它仍然有相同的錯誤.. – tinyork 2014-11-23 11:11:11

回答

0

MOV DX, OFFESET RING

然後

爲什麼END BEGINBEGIN是一個簡單的標籤,而不是一個段名或進程名稱

刪除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