配列 DI へのポインタがあります。
DI と別のポインターの両方が指す値に移動することは可能ですか?
例えば:
mov bl,1
mov bh,10
inc [di+bl]
inc [di+bh]
また、関連するメモとして、2 つのレジスタの値を交換する 1 行のオペコードはありますか? (私の場合はBXとBP?)
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
交換bl
にbh
適しています (IIRC では、これが最適な方法です)。bl
ただし、(たとえば) のビット 0 を のビット 7と交換する場合bl
は、それ以上のロジックが必要になります。
DI はポインターではなく、インデックスです。
ROR BX, 8
レジスタの下位/上位バイトをローテーションできます。