3

誰かが次の2つの違いを説明できますか? アドレッシング モードの背後にある概念を理解するのは少し難しいと思います

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

本当にありがとう!

4

3 に答える 3

3

違いはありません!

デバッガーで確認できます...

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

コンパイラはボート命令を次のようにコンパイルします: 8B443B0A

したがって、ax はアドレスから 16 ビット値をロードする必要があります: bx + di + 10

于 2011-09-03T09:48:13.467 に答える
3

この MASM32 というラベルを付けましたが、どちらの命令も x86 に対して正当ではありません。16 ビット プログラミングを行っている場合を除き、その場合はそのことを明確にする必要があります。

mov ax, [bx+di+10]

16 ビット アドレッシングを使用するため、x86 では使用できません。ただし、以下は許可されます。

mov ax, [ebx+edi+10]

つまり、ebx の値を取得し、それを edi の値に加算し、その値に 10 を加算します。次に、最終値をポインターとして扱います。そのwordアドレスが指す (2 バイト) を取得し、その値を ax に割り当てます。

mov ax, [bx+di]+10

同様に正当ではありません (16 ビット アドレス指定)。あなたがするなら:

mov ax, [ebx+edi]+10

movの後に追加の入力が許可されていないため、これも許可されていません[ebx+edi]

于 2011-09-03T09:59:20.890 に答える
-4

bx = 10、di=10と仮定します。

ケース1の場合

mov ax, [30]

メモリ位置30の値がAXレジスタにコピーされます

ケース2の場合

mov ax, [20]+10

メモリ位置20の値、たとえばXに10hを追加するとX+10h、AXレジスタにコピーされます。

于 2011-09-03T08:24:14.087 に答える