在c++(Visual Studio 2010)中使用asm插入时,当我尝试将short类型的16位变量移动到32位EAX寄存器中时,出现“不兼容类型”错误。但是,如果我使用16位AX寄存器,则一切正常。该错误背后的逻辑是什么?谢谢!

#include <iostream>

int main()
{
   short sVar;

   std::cout << "sVar=";
   std::cin >> sVar;

   __asm
   {
      MOV AX, sVar;
      SHL AX, 1;
      MOV sVar, AX;
   }
   std::cout << sVar << "\n";

   return 0;
}

最佳答案

逻辑很简单-eax是32位,而short是16位,因此您不能将它们复制到另一个,因为它们的大小不同。 ax是16位的,因此可以将short复制到那里没有问题。然后,您可以使用movzxmovsx将16位值扩展为32位(具有零或符号扩展名)。

关于c++ - 在C++中使用__asm将short类型的变量移动到EAX中(VS 2010),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10074082/

10-11 18:51