【问题标题】:Error compiling assembler program in DosBox在 DosBox 中编译汇编程序时出错
【发布时间】:2017-01-05 20:07:42
【问题描述】:

我目前正在 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

【问题讨论】:

  • 以后,请将错误消息以文本的形式发布,而不是图片。这样,我们的盲人用户就可以搜索和阅读它。
  • 旁注 - 您可以考虑获取 MASM 6.11 (ML.EXE) 的副本。它增加了一些新功能:MASM 5.1 to 6.1 pdf

标签: assembly x86 masm dosbox x86-16


【解决方案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' 指令之前缺少相应的名称,仅此而已。

【讨论】:

  • 谢谢@zx485。效果很好。在 masm 之后,我在 LINK 命令上遇到一个听起来像这样的警告:“ LINK:警告 L4021:没有堆栈段”。我应该如何解决这个问题?
  • @user7362809,如果这个答案有用,您应该点击灰色复选标记✔接受它(灰色复选标记✔在答案的左上角)。
  • 这是另一个问题,但可以this helps you。所以解决方案是STACK SEGMENT PARA STACK 'STACK' dw 256 dup(?) STACK ENDS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多