我目前正在开发一个小的汇编程序,我很想知道为什么我在网上找到的几乎所有汇编语法都使用逗号并看起来像这样:
MOV eax, 123
我正在考虑的原因如下:
我在网上找到的一个例外是来自维基百科的这张照片: https://en.wikipedia.org/wiki/File:Motorola_6800_Assembly_Language.png
现在我不知道逗号是否更现代(x86 / arm / etc。汇编程序),但我的问题是:
这个逗号语法何时,何地以及为何使用?
答案 0 :(得分:7)
如果汇编程序支持符号表达式或者体系结构具有复杂的寻址模式,则显式分隔符将消除歧义。
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
是不明确的,则同样适用。
在我看来,逗号使代码更具可读性,我的流程如下:
这让我可以很快地浏览装配,但这只是我个人的意见。
最后,这是设计师的电话,Intel used it since the 8008,这是4004的芯片继承者,是第一个(如果不是第一个)商用微芯片之一。
它可能只是卡住了。
处理逗号有点复杂,这是一个需要考虑的特殊情况,但这一切都归结为:这种语法是针对人类还是计算机进行的?
在像mov (r0), r3
这样的表达式中,括号不需要配对(mov (r0, r3
仍然是明确的),这将更容易解析,但是:
来自XKCD