0

これらは 4 行のアセンブリ コードです。私はそれらを理解しようとしています。(インテルシンテックスです。)

    – mov eax, ebx
    – mov eax, [ebx]
    – mov eax, [ebx+ecx*X] (X=1, 2, 4, 8)
    – mov eax, [ebx+ecx*X+Y] (Y= one byte, 0-255 or 4 bytes, 0-2^32-1)

1) 最初の行は、ebx レジスターの値を eax レジスターにコピーします。2) 2 行目は、ebx レジスターの値を見つけ、それをメモリー・アドレスとしてティートし、そのメモリー・アドレスに移動します。そのメモリ アドレスの値を eax レジスタにコピーします。3) 3 行目は ebx レジスタの値を取得し、メモリ アドレスとして扱います。ecx*X を追加すると新しいアドレスが取得され、この新しいアドレスに移動して値を取得し、それを eax にコピーします。4) 4 行目がわかりません。

指示について理解したことが正しいかどうか、誰でも確認できますか? それらが正しくない場合は、親切に説明してください。4行目も解説。

前もって感謝します。

4

2 に答える 2

0

x86 でのオフセット計算の一般式は次のとおりです。

Offset = Base + (Index * Scale) + Displacement

あなたの例でebxは、 はベース、ecxはインデックス、Xはスケール、Yは変位です。(3) と (4) は同じであると考えることができます。ただし、(3) は (4) がY0 に等しいだけです。

于 2013-08-29T08:05:51.153 に答える
0

1-3)

あなたの仮定は私には正しいように見えます。

4) 4 行目がわかりません。

絶対オフセットが追加されていることを除いて、3 番目のものと同じです。例えば:

mov eax,[ebx+ecx*4+arrays]

arrays:
array1: dd 0,1,2,3
array2: dd 3,2,1,0

0に設定すると、 の要素がebx読み取られます。16 (4 * sizeof(dword)) に設定すると、 の要素を読み取ることになります。ecx:tharray1ebxecx:tharray2

于 2013-08-29T07:52:44.700 に答える