Для 16-битных программ единственными поддерживаемыми формами адресации являются:
[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BP]
[BX]
Каждая из них может включать 8- или 16-битное постоянное смещение.
(Источник: Руководство разработчика Intel, том 2A , стр. 38)
Проблема с предоставленным примером состоит в том, что bl
и bh
являются восьмибитными регистрами и не могут использоваться в качестве базового указателя.Однако, если вы установите bx
на желаемое значение, то inc [di+bx]
(с указателем подходящего размера для указателя) будет действительным.
Что касается замены "старших и младших битов регистра, J-16 SDiZ предложение ror bx, 8
отлично подходит для обмена bl
и bh
(и IIRC, это оптимальный способ сделать это).Однако если вы хотите заменить бит 0 (скажем) bl
на бит 7 в bl
, вам понадобится больше логики, чем это.