任何人都可以告诉我x86 ASM中的以下代码是干什么的?它只是一个大文件的一部分,但这只是让我失望。x86汇编代码
find_max:
6 .LFB0:
7 .cfi_startproc
8 pushq %rbp
9 .cfi_def_cfa_offset 16
10 movq %rsp, %rbp
11 .cfi_offset 6, -16
12 .cfi_def_cfa_register 6
13 movl %edi, -20(%rbp)
14 movl -20(%rbp), %eax
15 cltq
16 movl a(,%rax,4), %eax
17 movl %eax, -4(%rbp)
18 movl -20(%rbp), %eax
19 movl %eax, -8(%rbp)
具体来说,
- 什么最初%EDI在第13行?
- 为什么代码引用-20(%rbp)?
- 第16行到底是做什么的?
- 在32位寄存器和64位寄存器之后进行切换(例如第15行),背后的智慧是什么?
C代码我拆开来得到这个去像下面这样:
extern int a[];
int find_max(int n)
{
int max = a[n];
int pos = n;
int x;
while (n > 0)
{
n--;
x = a[n];
if (x > max)
{
max = x;
pos = n;
}
}
return pos;
}
如果你有C代码,你不知道它在做什么?你究竟想问什么? –