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

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

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
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节附录
2007-8-18 02:06
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上兄弟点拨
经验证后如下:

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

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