2017-01-05 91 views
1

我目前正在編譯DosBox中的彙編程序,但我不斷收到一些錯誤。
有人可以幫我修復它們嗎?
我附上了屏幕截圖,其中包含我在MASM和鏈接上收到的錯誤。在DosBox中編譯彙編程序時出錯

enter image description here

這是我的代碼:

DATA SEGMENT 
    NUM1 DB ? 
    NUM2 DB ? 
    RESULT DB ? 
    MSG1 DB 10,13,"ENTER FIRST NUMBER TO MULTIPLY : $" 
    MSG2 DB 10,13,"ENTER SECOND NUMBER TO MULTIPLY : $" 
    MSG3 DB 10 ,13,"RESULT OF MULTIPLICATION IS : $" 
ENDS 

CODE SEGMENT 
    ASSUME DS:DATA,CS:CODE 
START: 
    MOV AX,DATA 
    MOV DS,AX 

    LEA DX,MSG1 
    MOV AH,9 
    INT 21H 

    MOV AH,1 
    INT 21H 
    SUB AL,30H 
    MOV NUM1,AL 

    LEA DX,MSG2 
    MOV AH,9 
    INT 21H 

    MOV AH,1 
    INT 21H 
    SUB AL,30H 
    MOV NUM2,AL 

    MUL NUM1 

    MOV RESULT,AL 
    AAM 

    ADD AH,30H 
    ADD AL,30H 

    MOV BX,AX 

    LEA DX,MSG3 
    MOV AH,9 
    INT 21H 

    MOV AH,2 
    MOV DL,BH 
    INT 21H 

    MOV AH,2 
    MOV DL,BL 
    INT 21H 

    MOV AH,4CH 
    INT 21H 
ENDS 
END START 
+0

將來,請將錯誤消息發佈爲* text *,而不是圖片。這樣,它就可以被我們的盲人用戶搜索並閱讀。 –

+0

副作用 - 您可能會考慮獲取MASM 6.11(ML.EXE)的副本。它增加了一些新功能:[MASM 5.1到6.1 PDF](http://faculty.kfupm.edu.sa/coe/mudawar/coe205/manuals/MASMProgrGuide/A-DifferencesMASM.pdf) – rcgldr

回答

2

MASM SEGMENT指令的簽名如下:

name SEGMENT [[READONLY]] [[align]] [[combine]] [[use]] [[characteristics]] ALIAS(string) [['class']] 
    statements 
name ENDS 

所以,你的代碼包含由彙編提到的兩個錯誤:

DATA SEGMENT 
    NUM1 DB ? 
    ... 
ENDS  ; This line should be: DATA ENDS 

CODE SEGMENT 
    ASSUME DS:DATA,CS:CODE 
    START: 
    ... 
ENDS  ; This line should be: CODE ENDS 

所以你失蹤了`ENDS」指令之前各自的名字,這就是全部。

+0

謝謝@ zx485。很好。在masm之後,我在LINK命令中遇到了一個警告,聲音如下:「LINK:warning L4021:no stack segment」。我應該如何解決這個問題? – user7362809

+0

@ user7362809,如果此答案很有用,您應該點擊灰色複選標記✔接受它(灰色複選標記✔位於答案的左上角)。 –

+1

這是另一個問題,但可能[這可以幫助你](http://www.masmforum.com/board/index.php?PHPSESSID=786dd40408172108b65a5a36b09c88c0&topic=11022.0)。所以一個解決方案是'堆棧段分段堆棧'堆棧' dw 256 dup(?) 堆棧結束 – zx485