2009-10-24 122 views
26

你將不得不原諒我,我是x86組裝的新手,並且一般都是組裝。AT&T語法中(%eax)的含義?

所以我的問題是,我有類似:

addl %edx,(%eax) 

%EAX是一種具有指向某個整數寄存器。我們稱之爲xp

這是否意味着它說:*xp = *xp + %edx? (%edx是一個整數)

我只是困惑在哪裏addl將存儲結果。如果%eax是一個指向int的指針,那麼(%eax)應該是該int的實際值。那麼addl%edx+(%eax)的結果存入*xp?我真的很想有人向我解釋這個!

我真的很感謝任何幫助!

回答

50

是的,這條指令正在做你認爲它正在做的事情。

大多數x86算術指令需要兩個操作數:一個源和一個目標。在AT & T語法(此處使用)中,目標始終是正確的操作數。因此,與等的指示:在edxeax

addl %edx, %eax 

的值加在一起,並且將結果存儲在eax。然而,在你的例子中,(%eax)是一個內存操作數;這就是AT & T語法中的括號(例如NASM語法中的方括號)。

這意味着eax被視爲指針,所以右操作數取自eax指向的地址,結果存儲到相同的地址。

+0

+1不錯的簡單答案。 – 2009-10-24 23:48:39

+0

'(%eax)'是「寄存器間接」,如果你想[命名不同的尋址模式](https://stackoverflow.com/questions/46257018/do-terms-like-direct-indirect-addressing-mode-實際存在於intel-x86-man中)。 「內存間接」尋址是CPU從內存裝入地址,然後取消引用*(x86不支持內存間接尋址)。 https://en.wikipedia.org/wiki/Addressing_mode#Memory_indirect – 2017-09-18 03:56:03

相關問題