关闭。这个问题是opinion-based .它目前不接受答案。
想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.
3年前关闭。
Improve this question
我目前正在开发一个小汇编程序,我一直想知道为什么我可以在网上找到的几乎每个汇编程序语法都使用逗号并且看起来像这样:MOV eax, 123
我考虑这个的原因如下:
我可以在网上找到的一个异常(exception)是来自维基百科的这张图片:
https://en.wikipedia.org/wiki/File:Motorola_6800_Assembly_Language.png
现在我不知道逗号是不是更现代的东西(x86/arm/etc. assemblers),但我的问题是:
何时、何地以及为何使用这种逗号语法?
最佳答案
如果您的汇编器支持符号表达式或体系结构具有复杂的寻址模式,则显式分隔符将消除歧义。
MASM 和 TASM 支持语法 mov var, 1
为 mov [var], 1
(大小是从上下文推断的)。
什么mov var +2 -3
意思? mov var+2, -3
或 mov var, +2-3
? (两者都有效)。
如果寻址模式具有类似 (R1)+2
的形式,则同样适用。 (比如说,对于某种写回),MOV (R1) +3 +2
是模棱两可的。
在我看来,逗号使代码更具可读性,我的流程如下:
经过多年的训练,人类从历史开始就用空格分隔单词,我也学会了这种自动化。
无需在精神上解析 LTR 或任何东西,只需找到外部逗号即可获得操作数的数量及其近似形式。
这让我可以快速浏览组装,但这只是我的个人意见。
最后是设计师的电话,Intel used it since the 8008那是 4004 的芯片继承者,它是第一个(如果不是第一个)商用微芯片之一。
它可能只是卡住了。
处理逗号有点复杂,这是一个需要考虑的特殊情况,但归结为:这种语法是为人类还是计算机设计的?
在类似
mov (r0), r3
的表达式中括号不需要配对( mov (r0, r3
仍然是明确的),这会更容易解析,但是:来自 XKCD
关于parsing - 为什么这么多汇编语法都包含逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882567/