2014-09-04 282 views
1

我知道dword ptr是一個size指示符,它指示正在被移動的位置的大小,並且我知道mov eax,eax是nop代碼的一種形式,但這是幹什麼的?mov eax,dword ptr [eax]是做什麼的?

認爲它將eax的地址與十六進制值交換內部,但我不太確定,甚至不知道爲什麼會發生這種情況。

回答

3

指令:

mov eax, eax 

可能是almost- nop代碼(除設置標誌等),但不是你有什麼在這裏。您正在從內存加載(如[]「內容」字符所示)。

它加載eax與當前由eax指向所述內容的存儲器(一個32位雙字在這種情況下)。

也許一個圖形圖像將幫助:

Before: 
    eax:     0x12345678 
    memory @ 0x12345674: 0xeeeeeeee 
         8: 0xffffffff 
After: 
    eax:     0xffffffff 
    memory @ 0x12345674: 0xeeeeeeee 
         8: 0xffffffff 
+0

哦,我居然不知道[]的意思內容。那麼是否可以在沒有括號的情況下執行'dword ptr eax'? – user2893243 2014-09-04 06:03:07

+0

@ user2893243,這是沒有道理的。 'eax'是一個_definite_ 32位值,而您可能希望從內存中加載一個單字節,一個字,一個dword或(至少x64)四字(對於'rax'而不是'eax')。 – paxdiablo 2014-09-04 06:05:16

+0

好的,所以如果我想做'word ptr eax',那首先就沒有意義了,我只需要做'ax'。順便說一句,你知道任何好的書籍組裝? – user2893243 2014-09-04 06:07:55

2

它使用EAX最初指向的DWORD值加載EAX。

在C組術語其解引用最初在EAX舉行如下價值:「EAX = * EAX」

+0

+1 _「提領」 _指針,它是我認爲最簡單的正確答案 – xmojmr 2014-09-05 15:20:36

1

dword ptr [eax] - 指向的內存,其地址爲EAX,因此該語句複製32位從內存值到eax

相關問題