[英]Calling a procedure by pointer from variable in Intel 8086 Assembly
[英]Pointers and Indexes in Intel 8086 Assembly
我有一个指向数组的指针,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位与bl
7位进行交换,则需要更多的逻辑。
DI不是指针,而是索引。
您可以ROR BX, 8
旋转寄存器的低/高字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.