2011-09-03 42 views
3

有人可以解釋下面兩個之間的區別是什麼?我發現它有點難以理解尋址模式背後的概念大會尋址模式

mov ax, [bx + di + 10] 
mov ax, [bx + di] + 10 

非常感謝!

回答

3

你打成這個MASM32但也不指令是合法的x86。除非你正在做16位編程,在這種情況下,你應該清楚。

mov ax, [bx+di+10] 

在x86中不合法,因爲它使用16位尋址。然而,以下是允許的,:

mov ax, [ebx+edi+10] 

這意味着採取EBX的值,將它添加到EDI的價值,並添加10到該值。然後將最終值作爲指針處理。取該地址指向的word(2個字節),並將值賦給ax。

mov ax, [bx+di]+10 

是不合法的(16位尋址)。如果你做的事:

mov ax, [ebx+edi]+10 

那也沒有因爲mov允許不允許[ebx+edi]

-4

假設BX = 10,二= 10。

在情況1中,

mov ax, [30]

在存儲器位置30中的值將被複制到AX寄存器

在情況2中,

mov ax, [20]+10

內存位置20的值,可以說X,加上10h到X+10h,將被複制到AX寄存器。

+7

後,一個額外的輸入你*肯定*了'MOV'指令可以做加法? –

+0

謝謝!那麼,對於第二個,10被添加到'[bi + di]'的*值*中?首先,複製值的位置偏移了+10?這是正確的嗎? – Yuki

+0

另外,'mov ax,disp [bx] [di]'是什麼意思? – Yuki

3

沒有區別!

你可以用調試器檢查...

mov ax, [bx + di + 10] 
mov ax, [bx + di] + 10 

編譯; boath指令:8B443B0A

所以,斧頭需要從地址加載16位值:BX + DI + 10