首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Visual Studio使用xchg ax、ax

为什么Visual Studio使用xchg ax、ax
EN

Stack Overflow用户
提问于 2010-01-26 06:10:47
回答 5查看 16K关注 0票数 34

我正在查看我的程序的混乱之处(因为它崩溃了),并注意到许多

代码语言:javascript
复制
xchg    ax, ax

我用谷歌搜索了一下,发现它本质上是一个nop,但是为什么visual studio要做xchg而不是noop呢?

该应用程序是由visual studio编译的C# .NET3.5 64位应用程序。

EN

回答 5

Stack Overflow用户

发布于 2010-01-26 06:14:09

xchg ax,axnop实际上是相同的指令,它们映射到相同的操作码(0x90iirc)。那很好,xchg ax,ax是个禁忌。为什么要将额外的操作码编码浪费在不做任何事情的指令上?

令人怀疑的是为什么你会看到打印的两个助记符。我猜这只是你的反汇编中的一个缺陷,没有二进制的区别。

票数 10
EN

Stack Overflow用户

发布于 2012-01-09 20:13:07

实际上,xchg ax,ax就是微软反汇编“6690”的方式。66是操作数大小覆盖,因此它应该在ax而不是eax上操作。但是,CPU仍然将其作为nop执行。这里使用66前缀使指令的大小为两个字节,通常用于对齐目的。

票数 7
EN

Stack Overflow用户

发布于 2010-01-26 10:58:24

MSVC通常会将NOP放在编译后的代码中,用于调试构建。这允许编辑并继续工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2136043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档