我有一個指向數組DI的指針。Intel 8086彙編中的指針和索引
是否有可能轉到由DI和另一個指針指向的值?
e.g:
mov bl,1
mov bh,10
inc [di+bl]
inc [di+bh]
而且,在一個相關的說明,是否有單行操作碼來交換兩個寄存器的值? (在我的情況下,BX和BP?)
我有一個指向數組DI的指針。Intel 8086彙編中的指針和索引
是否有可能轉到由DI和另一個指針指向的值?
e.g:
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位常數的位移。
(來源:Intel Developer's Manual volume 2A,第38頁)
與提供的示例中的問題是,bl
和bh
是8位寄存器,並且不能用作基礎指針。但是,如果將bx
設置爲所需值,則inc [di+bx]
(具有指針的合適大小說明符)是有效的。
至於交換「的寄存器的高和低位,」的ror bx, 8
J-16 SDiZ's建議是細用於交換bl
和bh
(和IIRC,它是這樣做的最佳方式)。但是,如果您想要(比如說)bl
的位0與bl
的位7交換,則需要更多的邏輯。
DI不是一個指針,它是一個索引。
您可以通過ROR BX, 8
旋轉寄存器的低位/高位字節。
有沒有辦法交換兩個寄存器呢?說,BX和BP? – 2010-08-02 01:15:17
'XCHG'指令(例如'XCHG BX,BP')。來源再次是英特爾手冊鏈接在我的答案(實際上是第2B卷)。我建議在組裝開發時使用這些功能。他們仍然擁有16位信息,以及32位,64位和其他所有擴展。 – Zooba 2010-08-03 00:36:34