配列のアドレス (関数へのポインターとして渡される) を esi レジスターに取得しました。配列の特定のセルにアクセスするにはどうすればよいですか? すなわち:
my_array[a + b * c]
c
定数です。
次のように直接移動することもできます。
MOV EDX, [ESI + 4*EBX]
静的配列の場合、実際には一度に2つのレジスタを使用してインデックスを付けることができますが、アドレッシングモードでは配列のベースアドレスを32ビットの変位として使用します。これは、位置に依存しないコードでのみ機能します。
MOV EDX, my_array[ECX + 4*EBX]
2つの異なるレジスタを使用する代わりに、同じレジスタを2回使用して、3(ebx + ebx*2
)、5、または9の倍率をシミュレートできます。