2012-11-22 162 views
2

最近我向社區詢問了兩個偏移量差異Visual-C++ inline assembler difference of two offsets,並很快得到了答覆,非常感謝。 現在我已經進入其他問題,這是更糟的。Visual-C++內聯彙編程序編譯不正確

我有一個像

..naked... 
    __asm{ 
    ... 
    mov eax, dword ptr [ebx + offset data1] 
    ... 
    } 

真正的問題的指示是,它被編譯爲

mov eax, [offset data1] 

此線路上沒有編譯器警告(/牆模式),但代碼改了又改很多 - 想象一下,它會拋出ebx +的一部分!默默。 它是一個編譯器錯誤或功能?也許我必須指定一些額外的標誌?

問題是與僅偏移,由於

mov eax, dword ptr [ebx + 0xconst] 

正確編譯。

是的,我能得到周圍代碼

mov eax, offset data1 
    add eax, ebx 
    mov eax, [eax] 

但是有很多的代碼進行再變。困擾我的是沒有任何警告;

回答

0

最後,我在MSDN論壇上找到了答案。 如果您只使用mov eax,[ebx + data1location]而不是mov eax,[ebx + offset data1location],則編譯正確。但是,'offset'是MAS C語法的合法關鍵字,應該被MS C++編譯器接受。但隨後「ebx +」悄悄地被拋棄了。