首页 > 解决方案 > 汇编程序应该如何区分符号和全字母十六进制值?

问题描述

我正在学习一些 8080 程序集,它使用较旧的后缀H来表示十六进制常量(与现代前缀0x或相比$)。我还在用玩具汇编器闲逛,并考虑如何标记源代码。

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

ORG 0800H

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

BEEFH:  ... 
        ...

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

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

谁能阐明围绕此的约定实际上是/应该是什么?我错过了一些明显的东西吗?谢谢。

标签: parsingassemblysyntaxintel-8080

解决方案


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

在此处输入图像描述

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

谢谢,匿名评论者!


推荐阅读