1

このアセンブリ命令の意味がわかりません。その効果と理由は?

imull $16, (%eax, %edx,4)

レジスタの初期値は

%eax= 0x100x
%edx= 0x3
4

2 に答える 2

9

AT&T スタイルのアセンブリ命令、特にアドレス指定部分を解釈する方法を理解しようとしていると思います。この部分が何をするのかを理解するのに助けが必要ではないことは確かですimull $16- それは符号付き乗算を実行するだけで、単語の最後のl略です。long

(%eax, %edx, 4)はアドレス指定の形式であり、ベース アドレス、一定量の要素のオフセット、および要素の数に各要素のサイズを掛けるためのスケール/乗数があります(base, offset, offset scale/multiplier)

最終的には(base + (offset * multiplier)になるので、この場合は次のようになります。

(%eax + (%edx * 4))
(0x100 + (0x3 * 4))
(0x100 + 0xC)
(0x10C)

したがって、この命令は、アドレスのロング ワードの値で のimull $16, (%eax, %edx,4)符号付き乗算を実行します。160x10C

于 2012-02-27T00:50:15.160 に答える
1

この命令の結果はdword、アドレスに格納されている0x10cものに16を掛けたものになります(または、必要に応じて、左に4ビットシフトします)。結果はそのアドレスにも書き込まれます。

于 2012-02-27T00:07:38.403 に答える