检查 value 是否在 diapason 反汇编中
Check if value is in diapason disassembly
我正在使用C语言的RH850控制器和编译器greenHills。在这样的范围内检查:
if ((x>=2) && (x<=5))
y=1
它是用Osize选项编译的。编译后看起来像这样:
zxb r7
addi -2,r7,r1
cmp 3,r1
bnh .L1295
.L1295
是y=1
的标签(这个y=1
用于其他变化,在其他一些条件下也是如此)。两条指令影响相同的标志。
校验(x>=2)
是用这段代码实现的:addi -2,r7,r1
。但是这个指令的标志结果,将被下一个清除并且不正确。至少我是这么认为的。
显然我错了。有人可以解释这个反汇编程序片段吗?
正在对支票进行如下改造:
x >= 2 && x <= 5
= (x - 2) >= (2 - 2) && (x - 2) <= (5 - 2)
= (x - 2) >= 0 && (x - 2) <= 3
代码将 r1
,即 x - 2
,与 3
和 "branches if not higher" 进行比较,表示 0, 1, 2, or 3
中的 r1
(或 x
in 2, 3, 4, or 5
) 将分支到集合 y = 1
.
我正在使用C语言的RH850控制器和编译器greenHills。在这样的范围内检查:
if ((x>=2) && (x<=5))
y=1
它是用Osize选项编译的。编译后看起来像这样:
zxb r7
addi -2,r7,r1
cmp 3,r1
bnh .L1295
.L1295
是y=1
的标签(这个y=1
用于其他变化,在其他一些条件下也是如此)。两条指令影响相同的标志。
校验(x>=2)
是用这段代码实现的:addi -2,r7,r1
。但是这个指令的标志结果,将被下一个清除并且不正确。至少我是这么认为的。
显然我错了。有人可以解释这个反汇编程序片段吗?
正在对支票进行如下改造:
x >= 2 && x <= 5
= (x - 2) >= (2 - 2) && (x - 2) <= (5 - 2)
= (x - 2) >= 0 && (x - 2) <= 3
代码将 r1
,即 x - 2
,与 3
和 "branches if not higher" 进行比较,表示 0, 1, 2, or 3
中的 r1
(或 x
in 2, 3, 4, or 5
) 将分支到集合 y = 1
.