簡體   English   中英

Visual C ++內聯匯編器編譯不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM