首页
社区
课程
招聘
[旧帖] [求助]C的条件表达式 0.00雪花
2007-8-17 19:25 4096

[旧帖] [求助]C的条件表达式 0.00雪花

2007-8-17 19:25
4096
请教一个问题,有空的前辈帮忙
微软的编译器
  neg eax
  sbb eax,eax
  and eax,XXXXXX
这种类型的指令指令序列是C中什么样的条件判断生成的?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
冲天剑 31 2007-8-18 02:06
2
0
neg eax        ;如果 eax 不等于 0 置CF,否则清CF
  sbb eax,eax  ;如果CF 置位则让eax= -1(0FFFFFFFFh),否则让eax = 0
  and eax,XXXXXX

因此这段指令序列可以表示为C的形式:
eax = (eax == 0? 0: XXXXXX)
当然高级语言源程序中不可能有eax这种东西,可以根据程序上下文消去。

我最近的一点作业也碰到了这种情况,我的文章里有简略说明,顺便打个广告:
http://bbs.pediy.com/showthread.php?t=49531
看第3节附录
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
whtyy 1 2007-8-18 10:01
3
0
谢谢楼上兄弟点拨
经验证后如下:

对于C中的?表达式
r = (condition)?(exp1):(exp2)

微软编译器,未开优化情况下编译结果如下
mov   eax,condition
neg   eax,
sbb   eax,eax
and   eax, (exp1-exp2)
add   eax,exp2
mov  r,eax
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
kangaroo 6 2007-8-18 10:41
4
0
if(...)
一行代码
else
一行代码
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
whtyy 1 2007-8-18 12:36
5
0
汗....这个问题是属于"入门级"的问题??
游客
登录 | 注册 方可回帖
返回