.MODEL SMALL 程序集中的重复数据声明
Duplicate Declaration of Data in .MODEL SMALL Assembly
我是汇编语言的新手,正在尝试创建一个简单的程序来用汇编语言添加数字。
当 .MODEL 为 Tiny 时,我确实成功启动了程序,但是当 .MODEL 更改为 small 时,程序 returns“重复声明”错误。
我理解这两个模型的定义,但我没弄清楚有什么变化。
我尝试了什么:
- 我将数据名称更改为 data1,它在 SMALL 中有效,但在 TINY 中无效。
- 我在 .MODEL 之后添加了代码 .org 100h 并且它起作用了,因为它使程序 运行 在近内存中(?)
我错过了什么概念?
提前致谢
.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
问题是数据段还有一个符号名称——令人惊讶的是——DATA
。
换句话说:
汇编程序隐式地将符号放在段的开头之后。你写:
.DATA
...
.CODE
...
... 并且汇编程序隐含地执行类似的操作:
.DATA
DATA:
...
.CODE
CODE:
...
... 所以如果在代码中使用标签 DATA:
,它会被定义两次!
请注意,您不能 "just" 使用隐式生成的这些标签,因此您必须使用其他名称,例如 DATA1
。
I did succeed in launching the program when the .MODEL is Tiny
不太确定,但在 "tiny" 内存模型中不需要我所说的 "implicit" 标签。也许汇编程序在使用 "tiny" 内存模型时根本不会创建这样的标签。
我是汇编语言的新手,正在尝试创建一个简单的程序来用汇编语言添加数字。 当 .MODEL 为 Tiny 时,我确实成功启动了程序,但是当 .MODEL 更改为 small 时,程序 returns“重复声明”错误。
我理解这两个模型的定义,但我没弄清楚有什么变化。
我尝试了什么:
- 我将数据名称更改为 data1,它在 SMALL 中有效,但在 TINY 中无效。
- 我在 .MODEL 之后添加了代码 .org 100h 并且它起作用了,因为它使程序 运行 在近内存中(?)
我错过了什么概念?
提前致谢
.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
问题是数据段还有一个符号名称——令人惊讶的是——DATA
。
换句话说:
汇编程序隐式地将符号放在段的开头之后。你写:
.DATA
...
.CODE
...
... 并且汇编程序隐含地执行类似的操作:
.DATA
DATA:
...
.CODE
CODE:
...
... 所以如果在代码中使用标签 DATA:
,它会被定义两次!
请注意,您不能 "just" 使用隐式生成的这些标签,因此您必须使用其他名称,例如 DATA1
。
I did succeed in launching the program when the .MODEL is Tiny
不太确定,但在 "tiny" 内存模型中不需要我所说的 "implicit" 标签。也许汇编程序在使用 "tiny" 内存模型时根本不会创建这样的标签。