集団項目の中の連続した基本項目を転記している場合に、転記する順番を変更すると、転記結果が異なることがあるのはなぜですか。
例えばPIC9(2)で定義された項目に"0△"(△は1バイトの空白)が設定されている場合の転記結果が、
・集団項目の中の連続した基本項目の転記の場合は"0△"
・連続していない1つの基本項目の転記の場合は"00"
になります。
コンパイル時に、最適化を有効とする(-O1)オプションが既定のオプションとして指定されます。
このオプションの指定で有効となる最適化の1つに、「複数個のMOVE文をひとまとめのMOVE文にする」というものがあります。
これは連続するMOVE文の、送り出しの領域同士、受け取りの領域同士が一続きの(つながっている)場合に適用しますが、逆順の場合や、MOVE文とMOVE文の間に別の文がある場合は適用しません。
1つのMOVE文では、数字項目の中に空白があると数字のゼロに補正しますが、ひとまとめのMOVE文になると英数字転記になります。
英数字転記のため数字のゼロに補正せずに空白のまま転記された結果、転記後の値が異なります。
英数字転記でなく数字のゼロへの補正をするには、
・最適化を有効としないオプション(-O0)を指定する
・連続した領域の転記の文を続けて記述しない
の2つの方法があります。
【確認済みのバージョン】V1
【確認済みの対象OS】Windows
【カテゴリー】開発/設計(性能チューニング)