| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5316 人关注过本帖
标题:关于C++for循环反汇编的问题,请大神指教
只看楼主 加入收藏
anann
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-6-15
收藏
 问题点数:0 回复次数:19 
关于C++for循环反汇编的问题,请大神指教
原博客的网址http://blog.
我想弄明白这个博客里面的意思,但是我在VC里面经过测试没有发现++的先后顺序的差别,但是,我就想去学反汇编,听说反汇编要汇编基础,我现在在学王爽的汇编语言,请问学完后我可以看懂这段代码吗
i++情况

; 9    :  int c;
; 10   :  for(int i=0;i<=50;i++)

 mov DWORD PTR _i$20035[ebp], 0
 jmp SHORT $LN3@wmain
$LN2@wmain:
 mov eax, DWORD PTR _i$20035[ebp]
 add eax, 1
 mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
 cmp DWORD PTR _i$20035[ebp], 50  ; 00000032H
 jg SHORT $LN1@wmain

; 11   :   c=c+i;

 cmp BYTE PTR $T25811[ebp], 0
 jne SHORT $LN6@wmain
 push OFFSET $LN7@wmain
 call __RTC_UninitUse
 add esp, 4

 

++i情况

; 9    :  int c;
; 10   :  for(int i=0;i<=50;++i)

 mov DWORD PTR _i$20035[ebp], 0
 jmp SHORT $LN3@wmain
$LN2@wmain:
 mov eax, DWORD PTR _i$20035[ebp]
 add eax, 1
 mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
 cmp DWORD PTR _i$20035[ebp], 50  ; 00000032H
 jg SHORT $LN1@wmain

; 11   :   c=c+i;

 cmp BYTE PTR $T25811[ebp], 0
 jne SHORT $LN6@wmain
 push OFFSET $LN7@wmain
 call __RTC_UninitUse
 add esp, 4
$LN6@wmain:
 mov eax, DWORD PTR _c$[ebp]
 add eax, DWORD PTR _i$20035[ebp]
 mov BYTE PTR $T25811[ebp], 1
 mov DWORD PTR _c$[ebp], eax
 jmp SHORT $LN2@wmain
$LN1@wmain:
搜索更多相关主题的帖子: 博客 
2015-06-23 11:55
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我想弄明白这个博客里面的意思,但是我在VC里面经过测试没有发现++的先后顺序的差别


我没看博客

i++和++i的区别C语言里说的很明白 一个是先取值后递增 一个是先递增后取值

但是,我就想去学反汇编,听说反汇编要汇编基础,我现在在学王爽的汇编语言,请问学完后我可以看懂这段代码吗


下面的汇编代码是编译器生成的罢(?) 看着很乱的。。。

i++情况

; 9    :  int c;
; 10   :  for(int i=0;i<=50;i++)

mov DWORD PTR _i$20035[ebp], 0
jmp SHORT $LN3@wmain
$LN2@wmain:
mov eax, DWORD PTR _i$20035[ebp]
add eax, 1
mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
cmp DWORD PTR _i$20035[ebp], 50  ; 00000032H
jg SHORT $LN1@wmain



; 11   :   c=c+i;

cmp BYTE PTR $T25811[ebp], 0
jne SHORT $LN6@wmain
push OFFSET $LN7@wmain
call __RTC_UninitUse
add esp, 4



++i情况

; 9    :  int c;
; 10   :  for(int i=0;i<=50;++i)

mov DWORD PTR _i$20035[ebp], 0
jmp SHORT $LN3@wmain
$LN2@wmain:
mov eax, DWORD PTR _i$20035[ebp]
add eax, 1
mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
cmp DWORD PTR _i$20035[ebp], 50  ; 00000032H
jg SHORT $LN1@wmain

; 11   :   c=c+i;

cmp BYTE PTR $T25811[ebp], 0
jne SHORT $LN6@wmain
push OFFSET $LN7@wmain
call __RTC_UninitUse
add esp, 4
$LN6@wmain:
mov eax, DWORD PTR _c$[ebp]
add eax, DWORD PTR _i$20035[ebp]
mov BYTE PTR $T25811[ebp], 1
mov DWORD PTR _c$[ebp], eax
jmp SHORT $LN2@wmain
$LN1@wmain:


不用懂汇编 你比较一下就会发现其实是一样的

因为你这里 ++i或者i++都是在循环里面计数的 两种写法其实没区别的

有比较大区别的时候是C++里面 当运算符重载后 对于一些比较复杂的类型 先递增后取值可能比先取值后递增效率高 我估计你看的那个文章里面写的也是类似的东西 但这个差别实在是太小太小了 深究这点区别实在没意思 对于实际的程序 连0.1%的影响都没有
2015-06-23 14:06
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
在这2个循环里面看不出区别,如果有赋值操作的话可以看出区别。
看完王爽的汇编语言可以看懂这些。
了解汇编语言对于了解机器底层还是有帮助的。
2015-06-23 16:34
anann
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-6-15
收藏
得分:0 
回复 2楼 zklhp
但是我就想要弄明白反汇编,看看反汇编出的代码里面是否真的有差异,差异在哪,对不理解的东西,始终有一种想弄明白的心理,不是么

2015-06-23 21:01
anann
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-6-15
收藏
得分:0 
回复 3楼 边小白
我也觉得有一点退化
2015-06-23 21:01
anann
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-6-15
收藏
得分:0 
回复 4楼 取名字
看完王爽的汇编语言后,我应该再看些什么书能对这个问题有用呢?
2015-06-23 21:02
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
反汇编中看到有不懂的指令,百度一下,应该都能找到比较详细的解释。
如果你觉得看书比较系统的话,可以看一下《IBM—PC汇编语言程序》,涉及到API函数的话,可以看一下《Windows环境下32位汇编语言程序设计》。
个人见解。
2015-06-23 23:16
anann
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-6-15
收藏
得分:0 
回复 8楼 取名字
<<Windows环境下32位汇编语言程序设计>>这本书可能我程度不够,看到实模式,什么模式就晕
那我先看完王爽的<<汇编语言>>,如果还是不会反汇编,就再看一下<<IBM—PC汇编语言程序>>?
2015-06-25 14:08
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11774
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用边小白在2015-6-26 06:26:15的发言:

我不知道谁是王爽,我就只百度。比如,我已经知道实模式是兼容原16位机的模式,是32位CPU默认启动模式。

知道百度就会知道王爽的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-26 06:48
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用hu9jj在2015-6-26 06:48:46的发言:

 
知道百度就会知道王爽的。
http://baike.baidu.com/subview/695408/9807976.htm

也是个有故事的人 只不过什么故事我也不知道
2015-06-26 22:03
快速回复:关于C++for循环反汇编的问题,请大神指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015749 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved