Ich verwende RH850 Controler und Compiler greenHills in C-Sprache. Im Bereich prüfen wie folgt:Überprüfen Sie, ob der Wert in Diapason Disassembly ist
if ((x>=2) && (x<=5))
y=1
Es ist mit Osize-Option kompiliert. Wenn es kompiliert wird, schien es wie folgt aus:
zxb r7
addi -2,r7,r1
cmp 3,r1
bnh .L1295
.L1295
das Etikett von y=1
ist (Diese y=1
für andere Änderungen verwendet wird, auch auf einigen anderen Bedingungen). Beide Anweisungen betrafen die gleichen Flags.
Der Check (x>=2)
wird mit diesem Code realisiert: addi -2,r7,r1
. Aber Flag Ergebnis dieser Anweisung, wird von nächsten gereinigt und es ist falsch. Zumindest glaube ich das.
Offensichtlich liege ich falsch. Kann jemand dieses Disassembler-Fragment erklären?
Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der in der Frage selbst reproduziert werden muss. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels. – Olaf