2015-02-08 17 views
1

據我所知,我還沒有看到任何人接觸到這一點,所以我使用了一個平面彙編器,如果我嘗試做這樣的事情「lea eax,測試」它不會工作,但如果我做這個「lea eax,[測試]」它的工作原理? 很多例子我遇到我看到人們能夠做到這一點沒有括號,但我不知道是否有可能做一個單位的彙編程序,因爲我不斷收到錯誤無效的操作數,也「測試」是一個DD(雙字)。(組裝32位)不能使用沒有括號的lea?

最後一件事lea eax,[testing]和mov eax,測試在我的平板彙編程序上是相同的。我用ollydbg調試器測試了eax寄存器,在這兩種情況下,eax等於地址00401006.所以在這種情況下,它們相當於正確的?

+1

在提出有關語法的問題時,包含您正在使用的彙編程序的名稱是極爲重要的。這裏的「正確答案」在x86彙編器之間差別很大。 Nasm/Yasm強制使用括號來進行內存訪問(其中包括LEA)。 – 2015-02-08 04:06:37

+1

不要聽起來太不清醒,但它被稱爲「扁平彙編1.71.22」我想這是正確的,也是語法是英特爾 – noob 2015-02-08 04:10:08

+1

據我所知FASM使用類似於我剛剛提到的語法。這意味着內存訪問總是需要括號。如果您只想在寄存器中使用標籤的地址,請使用不帶括號的MOV。 – 2015-02-08 04:13:40

回答

0

由於LEA與C中的*類似,它期望您將一個變量傳遞給它,而不是該變量的地址。在FASM中,當你寫「[a]」時,你正在接受變量「a」,而當你寫「a」時,你正在接受它的地址。所以,「lea eax,[a]」和「mov eax,a」的意思完全一樣。我希望這有幫助。