我有一个指向数组的指针DI。
是否可以转到DI和另一个指针指向的值?
e.g:
mov bl,1
mov bh,10
inc [di+bl]
inc [di+bh]
并且,在相关的说明中,是否有单行操作码来交换两个寄存器的值? (就我而言,BX和BP?)
答案 0 :(得分:4)
对于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]
(具有合适的指针大小说明符)有效。
至于交换“寄存器的高位和低位”,ror bx, 8
bl
的建议适用于交换bh
和bl
(和IIRC,它是这样做的最佳方式)。但是,如果要将(例如)bl
的第0位与{{1}}的第7位进行交换,则需要更多逻辑。
答案 1 :(得分:1)
DI不是指针,它是一个索引。
您可以ROR BX, 8
旋转寄存器的低/高字节。