任何人都可以告訴我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代碼,你不知道它在做什麼?你究竟想問什麼? –