none
請問x86_x64中,要如何在.c檔中嵌入inline asm? RRS feed

  • 問題

  • Hi, All,

    請教要如何在MSVS的環境中,編譯過如下的函式?

    1 static inline int64_t cpu_get_host_ticks(void)
    2 {
    3     uint32_t low,high;
    4     int64_t val;
    5     asm volatile("rdtsc" : "=a" (low), "=d" (high));
    6     val = high;
    7     val <<= 32;
    8     val |= low;
    9     return val;
    10}

    錯誤訊息 : 

    error C2065: 'asm': 未宣告的識別項
    error C2143: 語法錯誤: 遺漏 ';' (在 'volatile' 之前)

    但若試著修改第5行如下 : 

    static inline int64_t cpu_get_host_ticks(void)
    {
        uint32_t low,high;
        int64_t val;

        __asm
        {
           rdtsc
           mov dword ptr [low],eax
           mov dword ptr [high],edx
        }

        val = high;
        val <<= 32;
        val |= low;
        return val;
    }

    則出現如下錯誤訊息 : 

    error C4235: 使用了非標準的擴充: 這種架構不支援 '__asm' 關鍵字
    error C2065: 'rdtsc': 未宣告的識別項

    .....

    請問該如何能將上述的inline assembly code編譯通過? 

    2019年12月12日 上午 03:32

所有回覆