我正在查看我的程序的混乱之处(因为它崩溃了),并注意到许多
xchg ax, ax我用谷歌搜索了一下,发现它本质上是一个nop,但是为什么visual studio要做xchg而不是noop呢?
该应用程序是由visual studio编译的C# .NET3.5 64位应用程序。
发布于 2010-01-26 06:14:09
xchg ax,ax和nop实际上是相同的指令,它们映射到相同的操作码(0x90iirc)。那很好,xchg ax,ax是个禁忌。为什么要将额外的操作码编码浪费在不做任何事情的指令上?
令人怀疑的是为什么你会看到打印的两个助记符。我猜这只是你的反汇编中的一个缺陷,没有二进制的区别。
发布于 2012-01-09 20:13:07
实际上,xchg ax,ax就是微软反汇编“6690”的方式。66是操作数大小覆盖,因此它应该在ax而不是eax上操作。但是,CPU仍然将其作为nop执行。这里使用66前缀使指令的大小为两个字节,通常用于对齐目的。
发布于 2010-01-26 10:58:24
MSVC通常会将NOP放在编译后的代码中,用于调试构建。这允许编辑并继续工作。
https://stackoverflow.com/questions/2136043
复制相似问题