2017-06-04 19 views
-1

我正在學習大會,我不確定這裏的小東西。 所以我有這段代碼在這裏裝配中的「inc」到底在這裏工作的確切程度如何?

mov DWORD PTR [ebp-4],0X0 
cmp DWORD PTR [ebp-4],0X9 
. 
. 
. 
lea eax,[ebp-4] 
inc DWORD PTR [eax] 
... 

,我不知道到底爲什麼我要在這裏使用「LEA」和「EAX」。如果我理解正確,[ebp-4]指向int(4字節),值爲0.我可以直接增加它而不使用「eax」reigster嗎? 另外,顯然我可以直接比較[ebp-4]中的值和值「9」,那麼爲什麼我不能以相同的方式增加它?

感謝您的每一個提示。

+2

是的,你可以把它寫成'inc dword ptr [ebp-4]'。也許'eax'稍後需要地址,所以這樣寫就很有用。 – Jester

+0

這裏沒有比較。你必須看看稍後會用到什麼 –

+1

沒有足夠的上下文,你應該發佈整個事情。 –

回答

1

簡單:

lea eax,[ebp-4]  ; eax = ebp-4 
inc DWORD PTR [eax] ;decrease dword at location ebp-4 by one. 

如果你這樣寫:

inc DWORD PTR [ebp-4] 

它會做同樣的事情。
這裏沒有必要使用EAX,你可以在任何地方使用複雜尋址,而無需花費任何代價(除了可能的指令長度)。

也許代碼重複使用eax很多,或者您正在尋找未優化的代碼。