首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查值是否在反汇编中

检查值是否在反汇编中
EN

Stack Overflow用户
提问于 2017-02-16 02:16:01
回答 1查看 57关注 0票数 0

我使用的是C语言的RH850控件和编译器greenHills。在范围检查中如下所示:

代码语言:javascript
复制
if ((x>=2) && (x<=5))
    y=1

它是使用Osize选项编译的。在编译时,它看起来是这样的:

代码语言:javascript
复制
zxb r7
addi -2,r7,r1
cmp 3,r1
bnh .L1295

.L1295y=1的标签(此y=1还用于其他更改,在某些其他条件下也是如此)。这两个指令影响相同的标志。

check (x>=2)使用以下代码实现:addi -2,r7,r1。但是这条指令的标志结果,将被下一条指令清除,并且存在错误。至少,我认为是如此。

显然我错了。有人能解释一下这个反汇编程序片段吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 02:32:07

它按如下方式转换检查:

代码语言:javascript
复制
  x >= 2 && x <= 5
= (x - 2) >= (2 - 2) && (x - 2) <= (5 - 2)
= (x - 2) >= 0 && (x - 2) <= 3

这段代码将r1 (即x - 2 )与3进行比较,“如果不是更高则分支”,意思是0, 1, 2, or 3中的r1 (或2, 3, 4, or 5中的x )将分支以设置y = 1

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

https://stackoverflow.com/questions/42257128

复制
相关文章

相似问题

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