在汇编语言中,是.DATA?真实的东西?

问题描述 投票:0回答:1

今天在我的大学讲座中,我们了解了汇编中未初始化的变量,并且您必须使用这个特定的数据段来做到这一点:.DATA? '?' 在哪里意味着您不会初始化变量,因此不会保留任何无用的内存。我在互联网上找不到任何有关此内容的信息,甚至我的编译器(emu8086)也无法识别它。我错过了什么吗?这是示例代码:

.MODEL SMALL
.STACK
.DATA?
adat DB 100 DUP (?)
.CODE
main proc
MOV AX, DGROUP 
MOV DS, AX
LEA BX, adat
CALL read_string 
CALL cr_lf 
CALL write_string 
MOV AH,4Ch 
INT 21h
main endp 

DGROUP 也无法识别,其余代码只有程序。

在实际的讲座中,我们使用 DOSBOX,但我什至无法将其安装在我的笔记本电脑上,因为它太旧了。我确信代码可以在 DOSBOX 上运行,但我只是不知道为什么。

assembly masm emu8086 dosbox
1个回答
0
投票

.数据? '?' 在哪里意味着您不会初始化变量,因此不会保留任何无用的内存。

.DATA 和.DATA 之间的区别?与内存无关,而是与可执行文件(.EXE 或.COM)有关。 .DATA 中的所有内容都将包含在文件中,而 .DATA 中的项目则不然?
一旦操作系统 (DOS) 加载了程序,.DATA 和 .DATA?部分将占用其分配的内存。

连我的编译器(emu8086)都无法识别它。

查看emu8086附带的手册。如果.DATA?无法识别,然后尝试其他形式,例如 .BSS。

并且您必须使用此特定数据段来执行此操作:.DATA?

这绝不是一项义务。您始终可以将其添加到正常的 DATA 部分,并只接受文件中的一堆零字节。这并不重要(在 emu8086 程序中)。

.DATA
somevalue DW 12345
adat      DB 100 DUP (0)

如果您确保这些零填充的缓冲区是 .DATA 部分中的最后一项,那么智能汇编器完全有可能不会在可执行文件中包含这些零字节。

© www.soinside.com 2019 - 2024. All rights reserved.