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

fee*_*ree 4 assembly visual-studio-2010

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

int main()
{

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


  printf ("\n");
  return (0);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译x64平台的上述代码时,它失败了.我得到的错误信息如下:

error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture
Run Code Online (Sandbox Code Playgroud)

我使用VC2010进行编译,我想知道为什么VC2010不支持汇编语言编译以及在这种情况下应该做什么.谢谢!

Ale*_*nze 6

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

你的选择:

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

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