1

したがって、最初にedx=yを割り当てます。movl 12(%ebp) %edx.

なぜleal (%edx, %edx, 2) , %edx =edx = 3*y

4

2 に答える 2

5

LEA「ロード有効アドレス」の略です。(AT&T 構文では、32 ビット オペランドの場合は「leal」と綴られます。) 基本的には、括弧内のものを指定して計算したアドレスを取得し、メモリの読み取りまたは書き込みの代わりに、アドレス自体を宛先オペランドに割り当てます。

アドレス計算を行うためによく使用されますが、数値がアドレスであると見なして、特定の整数定数 (3、5、および 9) を乗算するためにもよく使用されます。(アドレス数字なので、難しいことはありません。)

于 2012-11-11T06:48:16.977 に答える
2

直訳すると「実効アドレスEDX+EDX*2をEDXにロードする」です。

80x86 には、比較的強力なアドレッシング モードがいくつかあります。たとえば、「movl (%edx, %edx, 2), %edx」は、「実効アドレス EDX + EDX << 1 の値を EDX にロードする」となります。LEA 命令を使用すると、この比較的強力なアドレス指定の回路を再利用して、他の目的に使用できます。

あなたの混乱の一部は、AT&T の構文が原因である可能性があります。アドレスの書き方が自然とはかけ離れています。比較のために; Intel 構文の場合は、より明確になります (例: "lea edx, [edx+edx*2]")。

于 2012-11-11T06:49:05.847 に答える