9

我现在正在练习混合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不支持汇编语言编译,这种情况应该怎么做。谢谢!

4

1 回答 1

9

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

您的选择:

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

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

于 2013-01-12T09:34:34.273 回答