【问题标题】:CIL stack exchange instructionCIL 堆栈交换指令
【发布时间】:2023-03-17 00:34:01
【问题描述】:

是否有 CIL 指令来交换堆栈中的前两个元素?

【问题讨论】:

  • 你能使用异或交换吗? en.wikipedia.org/wiki/XOR_swap_algorithm
  • 很好的提示!问题是 CIL 指令从堆栈中弹出它们的参数。由于对于完整的交换,需要 3 个异或操作,因此必须首先以某种方式复制原始堆栈值。如果不使用临时工具,这很难。可能,局部变量会更可行。

标签: cil


【解决方案1】:

没有单一的指令交换。但是,使用stloc、pop 和ldloc,您应该能够完成您的交换。

【讨论】:

    【解决方案2】:

    没有。交换元素的唯一方法是将前两个元素弹出到本地,然后以相反的顺序推送它们。

    【讨论】:

      【解决方案3】:

      查看list of CIL instructions,似乎没有一条指令可以交换堆栈顶部的两个元素。您必须使用旧的 pop/push 方式。

      【讨论】:

        【解决方案4】:

        为了将来参考,您可以创建一个程序集来执行您想要学习 IL 的目的,然后在 Reflector 中查看该程序集。您可以选择您希望代码使用的语言,IL 是选项之一。我在试图弄清楚如何编写动态方法时这样做了......

        【讨论】:

        • 这表明编译器使用了stloc和ldloc。但是,如果我是手动编写 CIL,我想知道什么是可能的,而不是硬编码到 C# 编译器中的模式。
        猜你喜欢
        • 1970-01-01
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 2015-07-21
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多