1

我有一个指向数组的指针,DI。

是否可以转到 DI 和另一个指针指向的值?

例如:

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

而且,在相关的说明中,是否有单行操作码来交换两个寄存器的值?(就我而言,BX 和 BP?)

4

2 回答 2

4

对于 16 位程序,唯一支持的寻址形式是:

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

其中的每一个都可以包括一个 8 位或 16 位的常量位移。

(来源:英特尔开发人员手册第 2A 卷,第 38 页)

提供的示例的问题是blbh是八位寄存器,不能用作基指针。但是,如果您设置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 回答