汇编程序应该如何区分符号和全字母十六进制值?
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 是什么吗?我错过了一些明显的东西吗?谢谢。
有人发表评论,然后他们删除了,但我又看了一遍,它是正确的。显然我错过了旧英特尔手册中关于十六进制常量的注释:
十六进制常量必须以十进制数字开头。所以这肯定是您在解析时避免语义歧义的方法。作为解决方案对我来说似乎有点不雅,但我想你应该只使用现代前缀。
感谢匿名评论者!
我正在学习 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 是什么吗?我错过了一些明显的东西吗?谢谢。
有人发表评论,然后他们删除了,但我又看了一遍,它是正确的。显然我错过了旧英特尔手册中关于十六进制常量的注释:
十六进制常量必须以十进制数字开头。所以这肯定是您在解析时避免语义歧义的方法。作为解决方案对我来说似乎有点不雅,但我想你应该只使用现代前缀。
感谢匿名评论者!