(本地)标签如何在它自己的段之外结束(TASM 8086)?

How can a (local) label end outside it's own segment (TASM 8086)?

我的教授经常使用这种模式编写涉及 DS 的代码。

ASSUME CS:CODE,DS:DATA

DATA SEGMENT
[...]
DATA ENDS

CODE SEGMENT
START:
[...]
CODE ENDS
END START
END

按照他的概念,我们这样做是为了让汇编程序检查数据段。但如果没有有效的解释,我真的不能同意...

标签如何在段外结束?

为什么没有它,汇编程序就不能检查 DS?

组装中的标签是否不同?

END START 不是 start 标签的 "the end"。标签本身没有终点、长度或范围。 (为此使用 proc foo / endproc,除非那只是 MASM 而不是 TASM)。

END START 是整个 asm 文件的结尾(之后解析停止)。 END label也设置入口点=指定标签。对于用于此目的的指令来说,这是一个奇怪的名称,但 TASM 已经很老了。

(汇编器可以将元数据放在 .obj 文件中以告诉链接器入口点符号名称,如果汇编器不直接发出 .exe。)


将标签视为您可以从其他地方引用的零宽度标签,仅此而已。

如果您有一个要调用的函数的代码块,您可以在它前面贴上一个标签,这样您就可以 call 到那个点。该功能的机器代码有一定的大小,但标签没有;它只是标记块的开始。 (所以一个标签总是恰好有 1 个地址。)