2017-10-17 59 views
-1

我是新来的汇编语言,我正在尝试创建一个简单的程序来用汇编语言添加数字。 当.MODEL为Tiny时,我确实成功启动了该程序,但当.MODEL变为小时,程序返回“重复声明”错误。.MODEL SMALL组合中数据的重复Decode

我明白这两个模型的定义,但我无法弄清楚什么变化。

我所做的尝试:

  • 我改变了数据名称数据1和它的作品在小而不微小。
  • 我添加的代码.ORG 100H .MODEL后和它的作品,因为它使近存储器中运行的程序(?)

我缺少什么概念?

预先感谢您

.MODEL TINY 

.DATA 
data DB 10D, 11D, 12D, 13D, 14D, 15, 16D, 17D, 18D, 19D 
.CODE 
.STARTUP 
XOR AX, AX 
MOV BX, OFFSET data 
MOV CX, 5 
ulang: 
ADD AX, [BX] 
INC BX 
LOOP ulang 
.EXIT 
END 

Screenshot of the error and the code.

+0

请不要将代码和错误添加为图像。这使得问题难以被搜索到,并且对我们来说可读性和便利性都较差。 –

+1

如果在代码之前放置数据,那么使用很小的数据时,数据将作为代码执行。在代码之后移动您的DATA部分。 –

+0

说到DOS:.tiny会创建一个.com文件,所以你需要添加.org 0100h才能在正确的地址开始。删除所有分段,因为所有分段注册将被设置为相同的值。你(如迈克尔说的)需要将数据移动到最后,或者在它前面添加一个跳转到启动。否则它会被视为代码(并执行,这很可能会崩溃,或者做你不想要的东西) – Tommylee2k

回答

1

的问题是,数据段也有一个符号名是 - 令人惊讶 - DATA

换句话说:

汇编隐含的段的开始之后把符号。你写:

.DATA 
... 
.CODE 
... 

...并汇编隐含确实是这样的:

.DATA 
DATA: 
... 
.CODE 
CODE: 
... 

...所以,如果你在代码中使用它的标签DATA:被定义了两次!

请注意,您不能“仅”滥用隐式生成的这些标签,因此您必须使用其他名称,例如DATA1

我没有在启动程序时.MODEL很小

没有绝对的把握,但在“微小”内存模型“隐性”的标签,我谈论的是不需要的成功。也许汇编程序在使用“小”内存模型时不会创建这样的标签。