为什么这么多汇编语法都包含逗号?

Wol*_*olf 3 syntax assembly parsing comma

我目前正在开发一个小的汇编程序,我很想知道为什么我在网上找到的几乎所有汇编语法都使用逗号,看起来像这样:

MOV eax, 123

我正在考虑这个问题的原因如下:

  • 在我看来,作为一个分隔符,空白似乎足够好,所以在可读性方面没有任何好处
  • 将逗号作为(另外的)分隔符使得解析器更复杂/性能更差(即使只是略微)
  • 我会特别想在早期,当汇编程序被引导或与其他汇编程序一起编写时,包含该语法将是一件麻烦事.

我可以在网上找到的一个例外是来自维基百科的这张图片:https://en.wikipedia.org/wiki/File: Hotorola_6800_Assembly_Language.png

现在我不知道逗号是否更现代(x86/arm/etc.汇编程序),但我的问题是:

何时,何地以及为何使用此逗号语法?

Mar*_*oom 7

如果汇编程序支持符号表达式或者体系结构具有复杂的寻址模式,则显式分隔符将消除歧义.

MASM和TASM支持的语法mov var, 1mov [var], 1(尺寸从上下文推断).
什么mov var +2 -3意思? mov var+2, -3还是mov var, +2-3?(两者都有效).

如果寻址模式具有类似(R1)+2(例如,对于某种回写)的形式,MOV (R1) +3 +2则同样适用.

在我看来,逗号使代码更具可读性,我的流程如下:

  1. 扫描第一个单词并读取它,这是操作码.
    经过多年的训练,人类从历史开始就用空格分隔词语,我也接受了这种自动化.
  2. 用逗号分隔文本的其余部分.
    无需精神上解析LTR或任何东西,只需找到外部逗号,即可得到操作数及其近似形式.
  3. 如果猜测的指令听起来不合适或者任何事情,请执行完整,慢速,LTR,解析该行.

这让我可以很快地浏览装配,但这只是我个人的意见.最后,这是设计师的号召,英特尔从8008开始使用它,这是4004的芯片继承者,4004是第一个(如果不是第一个)微芯片商用的芯片.
它可能只是卡住了.

处理逗号有点复杂,这是一个需要考虑的特殊情况,但它归结为:这种语法是针对人类还是计算机而设计的?
在像mov (r0), r3括号这样的表达式中,不需要配对(mov (r0, r3仍然是明确的),这将更容易解析,但是:

                                            XKCD对不匹配括号的意见
来自XKCD