【发布时间】:2020-04-14 00:02:32
【问题描述】:
我一直在阅读 ECMA CLI 规范:
http://www.ecma-international.org/publications/standards/Ecma-335.htm
我对在堆栈转换图中使用逗号来表示某些指令感到困惑。例如,这里是ldloc(将参数加载到堆栈上)的记录堆栈转换:
… => …, value
这是ldsfld 的堆栈转换(加载类的静态字段):
…, => …, value
我的问题与指令前的额外逗号有关:它有什么意义吗?另一个例子是jmp(跳转到方法):
… => …
和br.<length>(无条件分支):
…, => …
还有一些尾随逗号的示例,例如 nop 和 starg.<length>。这只是不一致还是我不理解这种表示法的细微差别?
【问题讨论】:
-
可以肯定地说这没有任何意义。
jmp和br.S的各个操作码的在线文档都使用了更明确的描述“此操作不执行评估堆栈行为”。 (ldloc和ldsfld同样都表示,换句话说,单个值被压入堆栈。)幸运的是,逗号似乎是多余的,而不是 blasphemous。
标签: stack specifications cil intermediate-language