したがって、最初にedx=yを割り当てます。movl 12(%ebp) %edx.
なぜleal (%edx, %edx, 2) , %edx
=edx = 3*y
したがって、最初にedx=yを割り当てます。movl 12(%ebp) %edx.
なぜleal (%edx, %edx, 2) , %edx
=edx = 3*y
LEA
「ロード有効アドレス」の略です。(AT&T 構文では、32 ビット オペランドの場合は「leal」と綴られます。) 基本的には、括弧内のものを指定して計算したアドレスを取得し、メモリの読み取りまたは書き込みの代わりに、アドレス自体を宛先オペランドに割り当てます。
アドレス計算を行うためによく使用されますが、数値がアドレスであると見なして、特定の整数定数 (3、5、および 9) を乗算するためにもよく使用されます。(アドレスは数字なので、難しいことはありません。)
直訳すると「実効アドレスEDX+EDX*2をEDXにロードする」です。
80x86 には、比較的強力なアドレッシング モードがいくつかあります。たとえば、「movl (%edx, %edx, 2), %edx」は、「実効アドレス EDX + EDX << 1 の値を EDX にロードする」となります。LEA 命令を使用すると、この比較的強力なアドレス指定の回路を再利用して、他の目的に使用できます。
あなたの混乱の一部は、AT&T の構文が原因である可能性があります。アドレスの書き方が自然とはかけ離れています。比較のために; Intel 構文の場合は、より明確になります (例: "lea edx, [edx+edx*2]")。