汇编程序应该如何区分符号和全字母十六进制值?

How should assemblers distinguish between symbol and all-alpha hex value?

我正在学习 some 8080 assembly,它使用较旧的后缀 H 来表示十六进制常量(相对于现代前缀 0x$)。我也在和一个玩具组装工闲逛,思考如何标记源代码。

可以编写一个有效的十六进制常量(比如)BEEFH,它只包含字母字符。也可以定义一个名为 BEEFH 的标签。所以当我写:

ORG 0800H

START:  ... 
        JMP BEEFH   ; <--- how is this resolved?
        .... 

BEEFH:  ... 
        ...

根据old Intel docs这在句法上应该是有效的:BEEFH符合标签的命名规则,当然也是一个有效的16位地址。这里 JMP 的操作数是地址常量还是标识符的歧义似乎是个问题。

我无法访问原始 8080 汇编器,无法查看它对这个示例的作用。 Here's an online 8080 assembler 似乎在所有情况下都将操作数解析为 JMP 作为标签引用,但显然适当的汇编器应该能够使用 JMP 指令定位绝对地址。

任何人都可以阐明围绕此的惯例实际上 are/should 是什么吗?我错过了一些明显的东西吗?谢谢。

有人发表评论,然后他们删除了,但我又看了一遍,它是正确的。显然我错过了旧英特尔手册中关于十六进制常量的注释:

十六进制常量必须以十进制数字开头。所以这肯定是您在解析时避免语义歧义的方法。作为解决方案对我来说似乎有点不雅,但我想你应该只使用现代前缀。

感谢匿名评论者!