4

我正在学习 asm,这是我的(许多)问题之一:我想更改数组的某些索引的值。让我们这么说:

  • %eax 包含我的新值
  • 栈顶(即(0)%esp)包含数组的索引
  • -4(%ebp) 包含数组的地址。

我试过movl %eax, (-4(%ebp),0(%esp),4)了,但没有用。更糟糕的是,它会引发语法错误:bobi.s:15: Error: junk `(%ebp),0(%esp),4)' after expression

什么是正确的语法?

4

1 回答 1

5

在 x86 汇编中没有单一的指令可以做到这一点。你必须找到一个可用的寄存器,用它来存储你从中得到的数组的地址-4(%ebp),找到另一个寄存器来保存索引0(%esp),然后才有可能访问你感兴趣的单元格(以及更多的 RISC - 类似程序集,您仍然需要将这两个寄存器添加在一起才能进行内存访问)。

假设寄存器可用,例如:

movl -4(%ebp), %ebx
movl 0(%esp), %ecx
movl %eax, 0(%ebx,%ecx,4)

应该管用。

于 2009-10-31T21:25:23.977 回答