2012-12-26 45 views
2

我現在練習用C++代碼混合彙編代碼,我可以編譯爲Win32平臺的混合代碼沒有任何問題,因爲下面的代碼說明:爲什麼我無法使用VC2010編譯x64平臺的彙編代碼?

int main() 
{ 

    char alphabet = 'X'; 
    printf ("Type letter = "); 
    __asm 
    {        
     mov ah, 02 
     mov dl, [alphabet]  
     int 21h       
    } 


    printf ("\n"); 
    return (0); 
} 

然而,當我嘗試編譯上面的代碼x64平臺,它失敗了。我有錯誤信息如下:

error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture 

我用VC2010編譯,我想知道爲什麼VC2010不支持彙編語言編譯和我應該在這種情況下做的。謝謝!

+0

就像錯誤消息說... [MSVC不支持64位模式下的內聯彙編](http://msdn.microsoft.com/en-us/library/wbk4z78b.aspx)。 – DCoder

+1

這是16位程序集,在64位模式下無法正常工作。 –

回答

5

編譯器根本不支持64位代碼中的內聯彙編。

您的選擇:在單獨.ASM文件

  • 寫彙編代碼和組裝,並與該項目
  • 包括在你的程序的其他部分連接在一起預編譯的彙編代碼在一些陣列數據並執行它(您需要確保彙編代碼是可重定位的,也就是說,它可以在放置在任意位置時執行),並且您需要將數組下面的頁面的內存保護更改爲可執行文件)
  • 使用內在函數,如果它們足夠的話
  • 根本不使用程序集

而且正如之前所提到的,int 21h函數2在Windows程序中工作的機率恰好爲零。該API僅適用於DOS程序。