(本地)标签如何在它自己的段之外结束(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 个地址。)
我的教授经常使用这种模式编写涉及 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 个地址。)