汇编 - lea和算术

Lar*_*rry 0 assembly x86-64 pointer-arithmetic att

语境:

  • 部件
  • 加油站
  • x86_64的

我的装配有点生疏,我试着让它再次变好.

显示意图的C代码:

void ask_me(int * data){

    (*data)++;

}
Run Code Online (Sandbox Code Playgroud)

这是故意的愚蠢,但适合上下文.

我的工作大会:

_ask_me:
   addq $1, (%rdi)
   ret
Run Code Online (Sandbox Code Playgroud)

题:

我想用这个lea指令作为训练.但我无法使其发挥作用:

_ask_me:
    leaq 1(%rdi), %rdi

    ret
Run Code Online (Sandbox Code Playgroud)

最差:

_ask_me:
    movq (%rdi), %rcx
    leaq 1(%rcx), %rdi

    ret
Run Code Online (Sandbox Code Playgroud)

你能提醒我怎么做吗?

谢谢

Mic*_*ael 5

原始程序集从/向内存读写.那是:

addq $1, (%rdi) 
Run Code Online (Sandbox Code Playgroud)

执行操作:

*(rdi) += 1
Run Code Online (Sandbox Code Playgroud)

你无法实现同样的目的LEA,因为LEA将结果存储在寄存器中,而不是存储在内存中.所以你可以使用它rdi += 1(如你的第一次尝试),但不是*(rdi) += 1.