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

В будущем отправьте сообщение об ошибке как * текст *, а не изображение. Таким образом, он будет доступен для поиска, а также доступен для чтения нашими слепыми пользователями. –

+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 

Таким образом, вы отсутствовали соответствующие имена до директив `ЗАКАНЧИВАЕТСЯ», вот и все.

+0

Спасибо @ zx485. Это сработало очень хорошо. После masm я сталкиваюсь с предупреждением о команде LINK, которая звучит так: «LINK: предупреждение L4021: сегмент стека». Как мне это решить? – user7362809

+0

@ user7362809, если этот ответ был полезен, вы должны щелкнуть по серой галочке ✔, чтобы принять его (серая галочка ✔ находится в верхнем левом углу ответа). –

+1

Это еще один вопрос, но может [это поможет] (http://www.masmforum.com/board/index.php?PHPSESSID=786dd40408172108b65a5a36b09c88c0&topic=11022.0). Таким образом, решением будет «STACK SEGMENT PARA STACK» STACK ' dw 256 dup (?) STACK ENDS' – zx485

Смежные вопросы