我有一个指向数组的指针,DI。
是否可以转到 DI 和另一个指针指向的值?
例如:
mov bl,1
mov bh,10
inc [di+bl]
inc [di+bh]
而且,在相关的说明中,是否有单行操作码来交换两个寄存器的值?(就我而言,BX 和 BP?)
对于 16 位程序,唯一支持的寻址形式是:
[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BP]
[BX]
其中的每一个都可以包括一个 8 位或 16 位的常量位移。
(来源:英特尔开发人员手册第 2A 卷,第 38 页)
提供的示例的问题是bl
和bh
是八位寄存器,不能用作基指针。但是,如果您设置bx
为所需的值,那么inc [di+bx]
(使用合适的指针大小说明符)是有效的。
至于交换“寄存器的高位和低位”,J-16 SDiZ 的建议ror bx, 8
很适合交换bl
和bh
(和 IIRC,这是这样做的最佳方式)。但是,如果您想将(例如)bl
的第 0 位与 的第 7 位交换,则bl
需要更多的逻辑。
DI 不是指针,而是索引。
您可以ROR BX, 8
旋转寄存器的低/高字节。