データレジスタDを永遠と加算し続けた経験あるでしょうか。
私は個数カウントで加算し続けることがあるのですが、実際に最終的にどのような動作になるかというものを知りませんでした。
データレジスタDが最終値まで行くと、それ以降は加算されないかと思っておりましたら、オーバーフローすると0へ戻っていきます。
データレジスタDを符号有で演算すると、最終値から最終値のマイナス側になり、-1を目指して加算されるのです。
最終的には-1に加算されるので0に戻るというリングカウンタのような性質をもっていましたので驚きました。
今回はデータレジスタDのオーバーフロー リングカウンタをGX Works3を用いて紹介します。
広告
データレジスタDオーバーフロー リングカウンタ
データレジスタDオーバーフロー リングカウンタ状態
Point.データレジスタD 16bitの+側限界へ到達すると-になり最終的に0になる
上記動画よりデータレジスタDを+していくと+側の限界値まで行き、その後-側になります。
マイナス側になると-32767から-1になるまで加算されます。
最終的に0に戻り、数値が+側に戻ります。
データレジスタDオーバーフロー リングカウンタプログラム
Point.符号無し演算でも同様に0へ戻る
符号無し演算+_Uでも同様に-側が表示されないだけで65535までいくと0に戻ります。
符号無し演算に変えたからといって0に戻らないわけではないので注意しましょう。
まとめ
・データレジスタDを加算していくとオーバーフローする
・オーバーフローすると0に戻る
・符号無し演算でも同様に0へ戻る