【対象機種】
adviceXross, adviceLUNA II, adviceLUNA
【質問】
アセンブラレベルでのステップで、以下の命令をステップすると正しくStep実行が行われずに、
該当の命令から進めない状態となってしまいます。どのような原因が考えられますか?
10 | 0x00000110 cmp r2, #&0
11 | 0x00000114 beq &114
【回答】
ICEの仕様により、アセンブラレベルでのステップ(instモードでのStep)で自コードに分岐するような
条件付き分岐命令は、ステップ実行を行うことができません。
【原因】
上記11行目の条件付き分岐命令では、10行目のcmp命令の結果に基づいて分岐先が決定されます。
結果が真であれば0x114番地に分岐し、偽であれば0x118番地に分岐しますが、
0x114番地をinstモードでステップした場合は、10行目の結果が偽であった場合も11行目から進まない状態となります。
instモードステップのデバッガ内部動作は、現在のPC値の命令を解析して分岐先にOCDブレークを設定
して実行する動作となりますが、
OCDブレークは命令が実行される前にブレークが発生するため、分岐条件が判定される前にブレークが発生します。
したがって、分岐条件が真の場合も偽の場合も命令は実行されずにブレークのみがヒットする状態となり、
該当の命令から進めない状態となります。
【解決策】
分岐先の命令までGo toすることで回避を行ってください。
逆ASMウィンドウから、分岐先のアドレスにカーソルを合わせ、右クリックして[対象まで実行]を選択します。