为什么我不能用VC2010编译x64平台的汇编代码?

时间:2012-12-26 09:49:39

标签: visual-studio-2010 assembly

我现在正在练习用c ++代码混合的汇编代码,我可以编译win32平台的混合代码,没有任何问题,如下面的代码所示:

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不支持汇编语言编译以及在这种情况下我应该做些什么。谢谢!

1 个答案:

答案 0 :(得分:6)

编译器不支持64位代码中的内联汇编。

您的选择:

  • 在单独的.asm文件中编写汇编代码,并将它们与项目的其余部分组合在一起
  • 在程序中包含预编译的汇编代码作为某个数组中的数据并执行它(您需要确保汇编代码是可重定位的,也就是说,它可以在放置在任意位置时执行,而您将需要将阵列下面的页面的内存保护更改为可执行文件。
  • 如果足够,则使用内在函数
  • 根本不使用汇编

正如已经提到的那样,在Windows程序中工作的int 21h函数2的机会正好为零。该API仅适用于DOS程序。