Ошибка компиляции программы на ассемблере в DosBox

В настоящее время я компилирую программу на ассемблере в DosBox, но продолжаю получать некоторые ошибки.
Может ли кто-нибудь помочь мне их исправить?
Я прилагаю снимок экрана с ошибками, которые я получаю на MASM, и ссылку.

введите описание изображения здесь

Это мой код:

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

person PyRar    schedule 05.01.2017    source источник
comment
В будущем, пожалуйста, публикуйте сообщение об ошибке в виде текста, а не изображения. Таким образом, он будет доступен для поиска и чтения нашим слепым пользователям.   -  person Cody Gray    schedule 06.01.2017
comment
Дополнительный комментарий - вы можете подумать о получении копии MASM 6.11 (ML.EXE). Он добавляет несколько новых функций: MASM с 5.1 по 6.1 pdf   -  person rcgldr    schedule 06.01.2017


Ответы (1)


Подпись директивы 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, вот и все.

person zx485    schedule 05.01.2017
comment
Спасибо @ zx485. Это очень хорошо сработало. После masm я обнаружил предупреждение о команде LINK, которое звучит так: LINK: предупреждение L4021: нет сегмента стека. Как мне решить эту проблему? - person PyRar; 05.01.2017
comment
@ user7362809, если этот ответ был полезен, вы должны щелкнуть серую галочку ✔, чтобы принять его (серая галочка ✔ находится в верхнем левом углу ответа). - person Jose Manuel Abarca Rodríguez; 05.01.2017
comment
Это другой вопрос, но может это вам поможет. Итак, решение было бы STACK SEGMENT PARA STACK 'STACK' dw 256 dup(?) STACK ENDS - person zx485; 05.01.2017