0

これは簡単な質問ですが、Google で信頼できる回答が見つかりません。

この指示の意味:

movl %eax, (%esi, %ecx, 4)

レジスタの値を、指しeaxているメモリの値に移動しますか?(%esi, %ecx, 4)

(%esi, %ecx, 4)配列用です。したがって、これは Array[Xs + 4i] を意味します。ここで、Xs は配列のメモリ内の開始点であり、i は整数配列内の単なるオフセットです。

4

2 に答える 2

4

まったく正しい。これは AT&T の構文なので、ソースが最初に来て、次に宛先になります。したがって、eaxレジスタの内容をメモリ位置に格納しますesi + 4*ecx

これを配列と考えると、 に基づく 4 バイト オブジェクトの配列の th エントリに格納eaxされます。ecxesi

于 2011-09-22T16:49:33.033 に答える
2

はい、まさにその通りです。AT&T 構文では、メモリ アドレッシングは次のように記述されます。

offset(base, index, multiplier)

offsetは からのオフセットを指定する符号付き定数basebaseは開始位置indexのレジスタ、 は を掛けた後、配列の開始位置からどれだけ後を探すかを指定するレジスタで、1、2、4 multiplier、または 8 のいずれかです。

offsetbase、およびの少なくとも 1 つを指定する必要がありますindexindexなしで使用するには、そのbase前にコンマ ( ) を付ける必要があります(, index)。を指定しない場合multiplier、デフォルトで 1 になります。

Intel 構文では、これは次のように記述されます。

[base + index*multiplier + offset]

これは単純な数学の問題なので、理解しやすいです。

于 2011-09-22T16:53:56.627 に答える