私は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
。しかし、この命令のフラグ結果は、次の命令で掃除され、間違っています。少なくとも私はそう思う。
明らかに私は間違っています。誰かがこの逆アセンブラの断片を説明できますか?
デバッグヘルプ(「なぜこのコードは機能していないのですか?)」には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf