Vis*_*iva 1 c++ assembly visual-studio-2010
在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;
}
Run Code Online (Sandbox Code Playgroud)
逻辑很简单 - eax是32位且short是16位,所以你不能将一个复制到另一个,因为它们的大小不同.ax是16位,所以short可以复制没有问题.然后,您可以使用movzx或movsx将16位值扩展为32位,使用零或符号扩展名.