无法理解LEA组装

时间:2018-11-21 00:03:36

标签: assembly x86-64

我对汇编语言很陌生,所以我只想确保我了解这段代码中发生的事情:

  400610:   83 ff 1d                cmp    $0x1d,%edi
  400613:   7f 0c                   jg     400621 <f1+0x11>
  400615:   89 f8                   mov    %edi,%eax
  400617:   c1 e0 04                shl    $0x4,%eax
  40061a:   8d 04 f8                lea    (%rax,%rdi,8),%eax
  40061d:   8d 04 78                lea    (%rax,%rdi,2),%eax
  400620:   c3                      retq   
  400621:   c1 ff 02                sar    $0x2,%edi
  400624:   8d 47 11                lea    0x11(%rdi),%eax
  400627:   c3                      retq   

据我所知,跳到了400621,但是我不确定f1 + 0x11表示什么。

如果不跳,它将继续并将%eax向左移动4(乘以16),然后执行eax = rax + rdi * 8,然后执行eax = rax + rdi * 2?我不确定重复两次的目的是什么。

如果确实跳了,它将%eax向右移动2(除以4),然后我不确定(lea 0x11(%rdi),%eax)会做什么。

我们将不胜感激,谢谢!

0 个答案:

没有答案