在 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
可以毫无问题地复制到那里。然后,您可以使用 movzx
或 movsx
通过零或符号扩展将 16 位值扩展为 32 位。
关于c++ - 在 C++ 中使用 __asm 将 short 类型的变量移动到 EAX(VS 2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074082/