これは簡単な質問ですが、Google で信頼できる回答が見つかりません。
この指示の意味:
movl %eax, (%esi, %ecx, 4)
レジスタの値を、指しeax
ているメモリの値に移動しますか?(%esi, %ecx, 4)
(%esi, %ecx, 4)
配列用です。したがって、これは Array[Xs + 4i] を意味します。ここで、Xs は配列のメモリ内の開始点であり、i は整数配列内の単なるオフセットです。
まったく正しい。これは AT&T の構文なので、ソースが最初に来て、次に宛先になります。したがって、eax
レジスタの内容をメモリ位置に格納しますesi + 4*ecx
。
これを配列と考えると、 に基づく 4 バイト オブジェクトの配列の th エントリに格納eax
されます。ecx
esi
はい、まさにその通りです。AT&T 構文では、メモリ アドレッシングは次のように記述されます。
offset(base, index, multiplier)
offset
は からのオフセットを指定する符号付き定数base
、base
は開始位置index
のレジスタ、 は を掛けた後、配列の開始位置からどれだけ後を探すかを指定するレジスタで、1、2、4 multiplier
、または 8 のいずれかです。
offset
、base
、およびの少なくとも 1 つを指定する必要がありますindex
。index
なしで使用するには、そのbase
前にコンマ ( ) を付ける必要があります(, index)
。を指定しない場合multiplier
、デフォルトで 1 になります。
Intel 構文では、これは次のように記述されます。
[base + index*multiplier + offset]
これは単純な数学の問題なので、理解しやすいです。