[英]Visual-C++ inline assembler compiled incorrectly
最近,我向社區詢問了兩個偏移量的差異Visual-C ++內聯匯編程序兩個偏移量的差異,並很快得到了答復,非常感謝。 現在我遇到了另一個問題,那就是更糟。
我有一條指令
..naked...
__asm{
...
mov eax, dword ptr [ebx + offset data1]
...
}
真正的問題是它被編譯為
mov eax, [offset data1]
此行上沒有編譯器警告(/ WAll模式),但是代碼已更改並且更改了很多-想象一下,它完全拋出了ebx +部分! 默默。 是編譯器錯誤還是功能? 也許我必須指定一些其他標志?
問題僅在於偏移量,因為
mov eax, dword ptr [ebx + 0xconst]
正確編譯。
是的,我可以解決代碼
mov eax, offset data1
add eax, ebx
mov eax, [eax]
但是那時有很多代碼需要更改。 困擾我的是沒有任何警告。
最后,我在MSDN論壇上找到了答案。 如果僅使用mov eax [ebx + data1location],而不是mov eax [ebx + offset data1location],則會正確編譯它。 但是,“偏移”是MASM語法的合法關鍵字,MS C ++編譯器應接受。 但是隨后“ ebx +”被無聲地丟棄了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.