2017-01-05 55 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