このアセンブリ命令の意味がわかりません。その効果と理由は?
imull $16, (%eax, %edx,4)
レジスタの初期値は
%eax= 0x100x
%edx= 0x3
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)
符号付き乗算を実行します。16
0x10C
この命令の結果はdword
、アドレスに格納されている0x10c
ものに16を掛けたものになります(または、必要に応じて、左に4ビットシフトします)。結果はそのアドレスにも書き込まれます。