2010-08-02 65 views
1

我有一個指向數組DI的指針。Intel 8086彙編中的指針和索引

是否有可能轉到由DI和另一個指針指向的值?

e.g:

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

而且,在一個相關的說明,是否有單行操作碼來交換兩個寄存器的值? (在我的情況下,BX和BP?)

回答

4

對於16位程序,唯一支持的尋址形式是:

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

每個這些可以包括任一8位或16位常數的位移。

(來源:Intel Developer's Manual volume 2A,第38頁)

與提供的示例中的問題是,blbh是8位寄存器,並且不能用作基礎指針。但是,如果將bx設置爲所需值,則inc [di+bx](具有指針的合適大小說明符)是有效的。


至於交換「的寄存器的高和低位,」的ror bx, 8J-16 SDiZ's建議是細用於交換blbh(和IIRC,它是這樣做的最佳方式)。但是,如果您想要(比如說)bl的位0與bl的位7交換,則需要更多的邏輯。

+0

有沒有辦法交換兩個寄存器呢?說,BX和BP? – 2010-08-02 01:15:17

+1

'XCHG'指令(例如'XCHG BX,BP')。來源再次是英特爾手冊鏈接在我的答案(實際上是第2B卷)。我建議在組裝開發時使用這些功能。他們仍然擁有16位信息,以及32位,64位和其他所有擴展。 – Zooba 2010-08-03 00:36:34

1

DI不是一個指針,它是一個索引。

您可以通過ROR BX, 8旋轉寄存器的低位/高位字節。