【问题标题】:gas: too many memory referencegas:内存引用过多
【发布时间】:2011-02-01 15:59:46
【问题描述】:

编译以下指令时:

movl 4(%ebp), 8(%ebp)

我得到:内存引用过多

这有什么问题?

【问题讨论】:

标签: assembly x86 gnu-assembler att


【解决方案1】:

括号前的数字是字节偏移量(导致发生内存引用),movl 不能有两个。您需要先将值暂时移动到寄存器中。

movl 4(%ebp), %ecx
movl %ecx, 8(%ebp)

【讨论】:

    【解决方案2】:

    这不是法律指令。对于大多数引用内存的指令,您必须将其移入/移出寄存器。

    【讨论】:

      【解决方案3】:

      movl 不会进行内存-内存移动,您必须通过寄存器(因此有两条 movl 指令)。

      【讨论】:

      • 谢谢,但这是为什么呢?是限制这个还是其他什么的 cpu 架构?
      • 是的,这是 CPU 的限制。 MOVS 是唯一的内存到内存指令。
      • 是的,内存到内存无法高效地实现(非 x86 CPU 倾向于将所有指令都注册到注册,加载/存储作为唯一的注册到-内存)。
      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多