1

配列 DI へのポインタがあります。

DI と別のポインターの両方が指す値に移動することは可能ですか?

例えば:

mov bl,1           
mov bh,10
inc [di+bl]
inc [di+bh]

また、関連するメモとして、2 つのレジスタの値を交換する 1 行のオペコードはありますか? (私の場合はBXとBP?)

4

2 に答える 2

4

16 ビット プログラムの場合、サポートされるアドレッシング形式は次のとおりです。

[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BP]
[BX]

これらのそれぞれには、8 ビットまたは 16 ビットの定数変位が含まれる場合があります。

(出典: Intel Developer's Manual volume 2A、38 ページ)

提供されている例の問題点は、blおよびbhが 8 ビット レジスタであり、ベース ポインターとして使用できないことです。ただし、bx目的の値に設定するとinc [di+bx](ポインターに適切なサイズ指定子を使用して) 有効になります。


「レジスタの上位ビットと下位ビット」の交換に関しては、J-16 SDiZ の提案はror bx, 8交換blbh適しています (IIRC では、これが最適な方法です)。blただし、(たとえば) のビット 0 を のビット 7と交換する場合blは、それ以上のロジックが必要になります。

于 2010-08-02T01:13:52.270 に答える
1

DI はポインターではなく、インデックスです。

ROR BX, 8レジスタの下位/上位バイトをローテーションできます。

于 2010-08-02T00:55:27.890 に答える