2012-12-26 49 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程序。