首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N=0与n=n-n之差

N=0与n=n-n之差
EN

Stack Overflow用户
提问于 2009-05-15 09:24:19
回答 8查看 597关注 0票数 3

当我阅读问题时,我记得曾经有人(很多年前)告诉我,从汇编程序的角度来看,这两种操作是非常不同的:

代码语言:javascript
复制
n = 0;

n = n - n;

这是真的吗,如果是的话,为什么是这样呢?

编辑:--正如一些答复所指出的,我认为这对于编译器优化到同一件事情是相当容易的。但我发现有趣的是,如果编译器有一种完全通用的方法,它们为什么会有所不同。

EN

回答 8

Stack Overflow用户

发布于 2009-05-15 09:31:31

编写您经常使用的汇编程序代码:

代码语言:javascript
复制
xor eax, eax

而不是

代码语言:javascript
复制
mov eax, 0

这是因为对于第一个语句,您只有操作码,没有涉及到的参数。您的CPU将在1 cylce (而不是2)中做到这一点。我认为您的情况类似(虽然使用sub)。

票数 11
EN

Stack Overflow用户

发布于 2009-05-15 09:31:24

编译器VC++ 6.0,没有优化:

代码语言:javascript
复制
4:        n = 0;
0040102F   mov         dword ptr [ebp-4],0
5:
6:        n = n - n;
00401036   mov         eax,dword ptr [ebp-4]
00401039   sub         eax,dword ptr [ebp-4]
0040103C   mov         dword ptr [ebp-4],eax
票数 7
EN

Stack Overflow用户

发布于 2009-05-15 09:27:49

优化编译器将为这两个程序集生成相同的汇编代码。

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

https://stackoverflow.com/questions/867727

复制
相关文章

相似问题

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