2009-11-15 41 views
1

MOV [1234H], AX表示將AX的值複製到內存中的1234十六進制地址。 所以,請糾正我,如果我說的是錯誤的,[]運算符作爲指針,對嗎?MOV [EBX],AX - 指向寄存器的指針?

這就是說,我無法理解下面的說明:MOV [EBX], AX爲什麼使用[]? EBX是處理器內部的通用寄存器,而不是存儲單元,所以沒有指向它的指針,對吧?

P.S.我在masm32下編程。

感謝

回答

5

寄存器EBX在這裏保存一個值,這是一個地址。 MOV [EBX], AX表示:取寄存器AX中存儲的值;將其寫入存儲在EBX中的地址。

4

我相信,在你的問題的情況下EBX擁有一個地址,機器做的商店。

4

[]的含義即是多「看地址......」,所以[1234H]意味着看地址爲0x1234,並[EBX]看看存儲在EBX地址。像C/C++中的*運算符一樣,如果您熟悉這一點。

2

小心說明像

MOV [EBX], AX 

由於AX是一個16位寄存器,它可能會產生顯著的性能損失,除非是EBX保存地址,不對齊。

0

括號表示間接的級別。
mov bx,ax表示將ax放入bx或直接寄存器,直接使用寄存器存儲值 mov [bx],ax表示寄存器間接,取寄存器中的值並將其用作地址存儲值。 mov ax,1234h表示立即數,在AX中放入1234h mov [1234h],ax與上述[bx]具有相同的間接級別,括號內的內容包含存儲結果的地址。

我在我的x86語法上生鏽了,但是如果x86有這個,你會看到類似於 mov [bx + cx]的ax,那就意味着添加bx和cx並使用它作爲地址來存儲值斧頭。

+0

爲了消除x86語法,16位CX寄存器不能用作地址寄存器。有效的16位地址寄存器是:bx,si,di,bp,sp。只有所有的32位寄存器都可以用作地址寄存器。 – 2014-04-09 08:15:31