我想在MASM中編寫一個小程序。在一條線上,當我嘗試增加ECX時,出現這個錯誤......由於只有一個操作數,所以似乎沒有任何意義!「inc ecx」指令操作數必須是相同的大小?
下面是相關代碼:
mov ecx, eax
lea eax, DWORD PTR [ecx]
lea ecx, BYTE PTR [eax+4]
inc ecx
在開始的時候,EAX是一個字符串的只是長度,在此爲0x05。
那麼,有沒有人知道爲什麼會發生這種情況?謝謝!
我想在MASM中編寫一個小程序。在一條線上,當我嘗試增加ECX時,出現這個錯誤......由於只有一個操作數,所以似乎沒有任何意義!「inc ecx」指令操作數必須是相同的大小?
下面是相關代碼:
mov ecx, eax
lea eax, DWORD PTR [ecx]
lea ecx, BYTE PTR [eax+4]
inc ecx
在開始的時候,EAX是一個字符串的只是長度,在此爲0x05。
那麼,有沒有人知道爲什麼會發生這種情況?謝謝!
實際上,你可以替換的最後兩行(你給)有:
lea ecx, BYTE PTR [eax+5]
LEA
得到一個操作數的地址,所以BYTE PTR [eax+4]
那也只是價值eax+4
,它被保存在ecx
。由於您之後正在增加,因此您可以將這兩個添加項合併爲一個,因此您可以改爲使用BYTE PTR [eax+5]
。
好吧,顯然我的masm32被竊聽了。我刪除了該行,現在它給了我同樣的錯誤 - 在一個空行上! –
有可能是一個流浪Unicode字符的地方。嘗試重新輸入這幾行,看看是否能解決這個問題。 –
BYTE PTR
使得在這方面沒有多大意義,而且可以安全地取出(它不會引起我的任何錯誤,雖然)。 LEA
計算有效地址,也可用於執行一些通用算術。
什麼代碼片段的確是這樣的:
ecx = eax
eax = ecx
ecx = eax + 4
ecx++
這本來是取而代之的是一個單一的指令:
lea ecx,[eax+5]
爲什麼是你的第二線LEA,而不是一個簡單的MOV? – supercat
那麼,我正在做一個破解,並簡單地從它的算法中複製指令。我剛剛開始學習彙編,我不太清楚MOV和LEA之間的區別。 –
思考MOV'作爲是C當量爲'X = y'所述的'和'LEA'是'X =&y'(注意它它得到y',而不是*值*'Y的的'的*地址* ') –