-1

私はいくつかのコードを調べていて、私を当惑させる2行を見つけました:

add    -0x4(%esi,%ebx,4),%eax
cmp    %eax,(%esi,%ebx,4)

私は標準に慣れており、add src,dstこれらcmp x1,x2の行が実際に何をしているのかよくわかりません。

GCCでコンパイルされていると思います

4

1 に答える 1

2

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保持し、 の値ieax保持し、値 33 を保持します。次のようになります。

add eax,[esi + ebx*4 - 4]

eax比較命令は、結果 ( 内) が配列内の次の値と等しいかどうかをテストしています。C の例では、これは と比較することと同じtotalですa[i]

于 2012-04-15T04:00:03.057 に答える