2013-06-30 105 views
0

我想在MASM中編寫一個小程序。在一條線上,當我嘗試增加ECX時,出現這個錯誤......由於只有一個操作數,所以似乎沒有任何意義!「inc ecx」指令操作數必須是相同的大小?

下面是相關代碼:

mov ecx, eax 
lea eax, DWORD PTR [ecx] 
lea ecx, BYTE PTR [eax+4] 
inc ecx 

在開始的時候,EAX是一個字符串的只是長度,在此爲0x05。

那麼,有沒有人知道爲什麼會發生這種情況?謝謝!

+0

爲什麼是你的第二線LEA,而不是一個簡單的MOV? – supercat

+0

那麼,我正在做一個破解,並簡單地從它的算法中複製指令。我剛剛開始學習彙編,我不太清楚MOV和LEA之間的區別。 –

+0

思考MOV'作爲是C當量爲'X = y'所述的'和'LEA'是'X =&y'(注意它它得到y',而不是*值*'Y的的'的*地址* ') –

回答

1

實際上,你可以替換的最後兩行(你給)有:

lea ecx, BYTE PTR [eax+5] 

LEA得到一個操作數的地址,所以BYTE PTR [eax+4]那也只是價值eax+4,它被保存在ecx 。由於您之後正在增加,因此您可以將這兩個添加項合併爲一個,因此您可以改爲使用BYTE PTR [eax+5]

+0

好吧,顯然我的masm32被竊聽了。我刪除了該行,現在它給了我同樣的錯誤 - 在一個空行上! –

+0

有可能是一個流浪Unicode字符的地方。嘗試重新輸入這幾行,看看是否能解決這個問題。 –

0

BYTE PTR使得在這方面沒有多大意義,而且可以安全地取出(它不會引起我的任何錯誤,雖然)。 LEA計算有效地址,也可用於執行一些通用算術。

什麼代碼片段的確是這樣的:

ecx = eax 
eax = ecx 
ecx = eax + 4 
ecx++ 

這本來是取而代之的是一個單一的指令:

lea ecx,[eax+5] 
相關問題