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

标签 parsing assembly syntax comma

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

3年前关闭。




Improve this question




我目前正在开发一个小汇编程序,我一直想知道为什么我可以在网上找到的几乎每个汇编程序语法都使用逗号并且看起来像这样:
MOV eax, 123
我考虑这个的原因如下:

  • 在我看来,空格作为分隔符似乎已经足够好了,所以在可读性方面没有任何好处
  • 将逗号作为(n 个附加)分隔符使解析器更复杂/性能更低(即使只是勉强)
  • 我会特别想在早期,当汇编器被引导或与其他汇编器一起编写时,包含该语法会很麻烦

  • 我可以在网上找到的一个异常(exception)是来自维基百科的这张图片:
    https://en.wikipedia.org/wiki/File:Motorola_6800_Assembly_Language.png

    现在我不知道逗号是不是更现代的东西(x86/arm/etc. assemblers),但我的问题是:

    何时、何地以及为何使用这种逗号语法?

    最佳答案

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

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

    如果寻址模式具有类似 (R1)+2 的形式,则同样适用。 (比如说,对于某种写回),MOV (R1) +3 +2是模棱两可的。

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

  • 扫描第一个单词并阅读它,这是操作码。
    经过多年的训练,人类从历史开始就用空格分隔单词,我也学会了这种自动化。
  • 查看逗号分隔文本的其余部分。
    无需在精神上解析 LTR 或任何东西,只需找到外部逗号即可获得操作数的数量及其近似形式。
  • 如果猜测的指令听起来不合时宜,请执行完整、缓慢、LTR 的行解析。

  • 这让我可以快速浏览组装,但这只是我的个人意见。
    最后是设计师的电话,Intel used it since the 8008那是 4004 的芯片继承者,它是第一个(如果不是第一个)商用微芯片之一。
    它可能只是卡住了。

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

    XKCD opinion on unmatching parenthesis
    来自 XKCD

    关于parsing - 为什么这么多汇编语法都包含逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882567/

    相关文章:

    parsing - 如何解析 kotlin 代码?

    java - 如何从 Java 中的 Object[] 中获取元素?

    php - PHP解析/语法错误;以及如何解决它们

    assembly - 为什么一条指令不能在汇编中包含两个内存引用?

    将代码转换为 Neon 程序集

    MySQL - 选择日期 < X

    c - 如何解析结构体数组作为参数?

    assembly - 加载/存储指令中的偏移量是否可能为负数,而不是 4 的倍数?

    javascript - 流类型对象中的动态属性名称

    ASP.Net VS ASP.Net MVC