Pointers 英特尔8086汇编中的指针和索引

Pointers 英特尔8086汇编中的指针和索引,pointers,assembly,intel,indexing,x86-16,Pointers,Assembly,Intel,Indexing,X86 16,我有一个指向数组DI的指针 是否可以转到DI和另一个指针指向的值 e、 g: 另外,在一个相关的注释中,是否有一个单行操作码来交换两个寄存器的值?在我的例子中,BX和BP?DI不是指针,而是索引 您可以通过ROR BX,8来旋转寄存器的低位/高位字节。DI不是指针,而是索引 您可以使用ROR BX,8来旋转寄存器的低位/高位字节。对于16位程序,唯一支持的寻址形式是: [BX+SI] [BX+DI] [BP+SI] [BP+DI] [SI] [DI] [BP] [BX] 其中每一个可能包括8位

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

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

e、 g:


另外,在一个相关的注释中,是否有一个单行操作码来交换两个寄存器的值?在我的例子中,BX和BP?DI不是指针,而是索引


您可以通过ROR BX,8来旋转寄存器的低位/高位字节。

DI不是指针,而是索引


您可以使用ROR BX,8来旋转寄存器的低位/高位字节。

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

[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BP]
[BX]
其中每一个可能包括8位或16位恒定位移

资料来源:第38页

所提供示例的问题在于bl和bh是八位寄存器,不能用作基指针。但是,如果您将bx设置为所需的值,则使用合适的指针大小说明符的inc[di+bx]是有效的


至于交换寄存器的高位和低位,建议使用ror bx,8来交换bl、bh和IIRC,这是最好的方法。但是,如果要将bl的第0位与bl的第7位交换,则需要更多的逻辑。

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

[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BP]
[BX]
其中每一个可能包括8位或16位恒定位移

资料来源:第38页

所提供示例的问题在于bl和bh是八位寄存器,不能用作基指针。但是,如果您将bx设置为所需的值,则使用合适的指针大小说明符的inc[di+bx]是有效的


至于交换寄存器的高位和低位,建议使用ror bx,8来交换bl、bh和IIRC,这是最好的方法。然而,如果你想用bl的第7位交换bl的第0位,你需要更多的逻辑。

有办法交换两个寄存器吗?例如,BX和BP?XCHG指令,如XCHG BX,BP。来源同样是我的答案2B卷中链接的英特尔手册。我建议在进行汇编开发时使用这些工具。它们还有16位信息,还有32位、64位以及此后的所有其他扩展。那么有办法交换两个寄存器吗?例如,BX和BP?XCHG指令,如XCHG BX,BP。来源同样是我的答案2B卷中链接的英特尔手册。我建议在进行汇编开发时使用这些工具。它们仍然拥有16位信息,以及32位、64位和此后的所有其他扩展。