C++ 一些内联程序集没有';不能在64位模式下工作?
与32位模式相比,64位模式编译me的技术优势是什么?我们是在谈论我的应用程序能够使用的RAM吗?我能使用的CPU寄存器的大小 我问这个问题是因为我在读这个问题: 一个家伙无法编译内联汇编指令C++ 一些内联程序集没有';不能在64位模式下工作?,c++,assembly,x86,x86-64,C++,Assembly,X86,X86 64,与32位模式相比,64位模式编译me的技术优势是什么?我们是在谈论我的应用程序能够使用的RAM吗?我能使用的CPU寄存器的大小 我问这个问题是因为我在读这个问题: 一个家伙无法编译内联汇编指令POP,因为他是在64位模式下编译的,而且POP只能在32位寄存器上工作(至少,我是这样读答案的) 如果您在64位模式下编译,我简直不敢相信您不能使用POPassembly命令 我的主要问题是-如果您选择64位编译-这是否意味着您不能使用“常规”内联汇编指令?push和pop在64位模式下不能有32位操作
POP
,因为他是在64位模式下编译的,而且POP
只能在32位寄存器上工作(至少,我是这样读答案的)
如果您在64位模式下编译,我简直不敢相信您不能使用POP
assembly命令
我的主要问题是-如果您选择64位编译-这是否意味着您不能使用“常规”内联汇编指令?
push
和pop
在64位模式下不能有32位操作数,只能有16位或64位,这不是说pop
只能在32位寄存器上工作。一般来说,许多代码在32位和64位模式下的工作原理相同,但一些很少使用的指令(十进制数学,与分段有关的指令)已从64位模式中完全删除。最相关的优点是更通用的寄存器、更大的地址空间,保证SSE的存在。您可以在64位模式下使用POP
汇编指令,但尤其是POP ebp
不能在64位模式下编码。另一方面,POP-rbp
(64位版本的ebp)应该可以正常工作。@JorgeNúñez谢谢,这更有意义!所以他打错了收银机@user997112是的,harold在他的回答中给出了一个更详细的原因,所以我们现在看到了不使用内联汇编的一个原因。它根本不便于携带。