gpt4 book ai didi

assembly - asm中的内存寻址

转载 作者:行者123 更新时间:2023-12-02 21:36:59 27 4
gpt4 key购买 nike

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

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

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

正确的语法是什么?

最佳答案

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

假设寄存器可用,例如:

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

应该可以。

关于assembly - asm中的内存寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com