私はいくつかのコードを調べていて、私を当惑させる2行を見つけました:
add -0x4(%esi,%ebx,4),%eax
cmp %eax,(%esi,%ebx,4)
私は標準に慣れており、add src,dst
これらcmp x1,x2
の行が実際に何をしているのかよくわかりません。
GCCでコンパイルされていると思います
Base + (Index * Scale) + Displacement アドレッシング モードを使用しています。少なくとも私はそう思う。私は AT&T の構文に詳しくありません。Intelの構文は次のようになると思います:
add eax,[esi + ebx*4 - 4]
cmp [esi + ebx*4],eax
これは、整数の配列 (4 バイト値) にインデックスを付けているように見えます。次のように、ある配列要素の値を合計に加算することを C で想像してください。
int a[100];
int i = 10;
int total = 0;
total += a[i-1];
ここでesi
、配列のアドレスをebx
保持し、 の値i
をeax
保持し、値 33 を保持します。次のようになります。
add eax,[esi + ebx*4 - 4]
eax
比較命令は、結果 ( 内) が配列内の次の値と等しいかどうかをテストしています。C の例では、これは と比較することと同じtotal
ですa[i]
。