我知道dword ptr是一個size指示符,它指示正在被移動的位置的大小,並且我知道mov eax,eax是nop代碼的一種形式,但這是幹什麼的?mov eax,dword ptr [eax]是做什麼的?
我認爲它將eax的地址與十六進制值交換內部,但我不太確定,甚至不知道爲什麼會發生這種情況。
我知道dword ptr是一個size指示符,它指示正在被移動的位置的大小,並且我知道mov eax,eax是nop代碼的一種形式,但這是幹什麼的?mov eax,dword ptr [eax]是做什麼的?
我認爲它將eax的地址與十六進制值交換內部,但我不太確定,甚至不知道爲什麼會發生這種情況。
指令:
mov eax, eax
可能是almost- nop
代碼(除設置標誌等),但不是你有什麼在這裏。您正在從內存加載(如[]
「內容」字符所示)。
它加載eax
與當前由eax
指向所述內容的存儲器(一個32位雙字在這種情況下)。
也許一個圖形圖像將幫助:
Before:
eax: 0x12345678
memory @ 0x12345674: 0xeeeeeeee
8: 0xffffffff
After:
eax: 0xffffffff
memory @ 0x12345674: 0xeeeeeeee
8: 0xffffffff
它使用EAX最初指向的DWORD值加載EAX。
在C組術語其解引用最初在EAX舉行如下價值:「EAX = * EAX」
+1 _「提領」 _指針,它是我認爲最簡單的正確答案 – xmojmr 2014-09-05 15:20:36
dword ptr [eax]
- 指向的內存,其地址爲EAX,因此該語句複製32位從內存值到eax
哦,我居然不知道[]的意思內容。那麼是否可以在沒有括號的情況下執行'dword ptr eax'? – user2893243 2014-09-04 06:03:07
@ user2893243,這是沒有道理的。 'eax'是一個_definite_ 32位值,而您可能希望從內存中加載一個單字節,一個字,一個dword或(至少x64)四字(對於'rax'而不是'eax')。 – paxdiablo 2014-09-04 06:05:16
好的,所以如果我想做'word ptr eax',那首先就沒有意義了,我只需要做'ax'。順便說一句,你知道任何好的書籍組裝? – user2893243 2014-09-04 06:07:55