Указатели и индексы в сборке Intel 8086 - PullRequest
1 голос
/ 02 августа 2010

У меня есть указатель на массив, DI.

Можно ли перейти к значению, указанному как DI, так и другим указателем?

например:

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

И, на связанной ноте, есть ли однострочный код операции для замены значений двух регистров?(В моем случае BX и BP?)

Ответы [ 2 ]

4 голосов
/ 02 августа 2010

Для 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, вам понадобится больше логики, чем это.

1 голос
/ 02 августа 2010

DI не указатель, это индекс.

Вы можете ROR BX, 8 повернуть младший / старший байт регистра.

...