Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c+中的u asm将short类型的变量移动到EAX中+;(VS 2010) 在C++中使用ASM插入(VisualStudio 2010)时,当我试图将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; } #包括 int main() { 短sVar; std::cout>sVar; __asm { MOV-AX,sVar; SHL-AX,1; MOV-sVar,AX; } std::cout_C++_Visual Studio 2010_Assembly - Fatal编程技术网 sVar; __asm { MOV-AX,sVar; SHL-AX,1; MOV-sVar,AX; } std::cout,c++,visual-studio-2010,assembly,C++,Visual Studio 2010,Assembly" /> sVar; __asm { MOV-AX,sVar; SHL-AX,1; MOV-sVar,AX; } std::cout,c++,visual-studio-2010,assembly,C++,Visual Studio 2010,Assembly" />

使用c+中的u asm将short类型的变量移动到EAX中+;(VS 2010) 在C++中使用ASM插入(VisualStudio 2010)时,当我试图将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; } #包括 int main() { 短sVar; std::cout>sVar; __asm { MOV-AX,sVar; SHL-AX,1; MOV-sVar,AX; } std::cout

使用c+中的u asm将short类型的变量移动到EAX中+;(VS 2010) 在C++中使用ASM插入(VisualStudio 2010)时,当我试图将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; } #包括 int main() { 短sVar; std::cout>sVar; __asm { MOV-AX,sVar; SHL-AX,1; MOV-sVar,AX; } std::cout,c++,visual-studio-2010,assembly,C++,Visual Studio 2010,Assembly,逻辑很简单-eax是32位的,short是16位的,因此不能将一个复制到另一个,因为它们的大小不同。ax是16位的,所以short可以在没有问题的情况下复制。然后可以使用movzx或movsx将16位的值扩展到32位零或符号扩展。逻辑很简单-eax是32位,short是16位,因此不能将一个复制到另一个,因为它们的大小不同。ax是16位,所以short可以在没有问题的情况下复制。然后可以使用movzx或movsx来扩大16位bit值为32位,带零或符号扩展。EAX为32位,sVar(短)为16位

逻辑很简单-
eax
是32位的,
short
是16位的,因此不能将一个复制到另一个,因为它们的大小不同。
ax
是16位的,所以
short
可以在没有问题的情况下复制。然后可以使用
movzx
movsx
将16位的值扩展到32位零或符号扩展。

逻辑很简单-
eax
是32位,
short
是16位,因此不能将一个复制到另一个,因为它们的大小不同。
ax
是16位,所以
short
可以在没有问题的情况下复制。然后可以使用
movzx
movsx
来扩大16位bit值为32位,带零或符号扩展。

EAX为32位,sVar(短)为16位。在这种情况下,您需要查看MOVSX(带符号扩展移动)或MOVZX(带零扩展移动)。

EAX为32位,sVar(短)为16位。在这种情况下,您需要查看MOVSX(带符号扩展移动)或MOVZX(以零扩展移动)。

早期版本的程序集没有问题(如果我错了,请纠正我)。它是“内联程序集”吗-具体错误?谢谢!@Vis Viva:我想那些早期版本只会强制指向变量的指针,而你会读取在adjucent地址发生的任何事情。早期版本的汇编没有问题(如果我错了请纠正我)。它是“内联汇编”吗-具体错误?谢谢!@Vis Viva:我想那些早期版本只会强制指向变量的指针,而您将读取在adjucent地址发生的任何事情。