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)
は具体的には、
- は、ライン13上の%EDIで、最初は何ですか?
- コードが-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コードをお持ちの場合は、それが何をしているのか分かりませんか?あなたは正確に何を求めようとしていますか? –