画面スクロール量の計算(加算命令で引き算)
By 神居 - Posted: 2011/01/05 Last updated: 2011/01/06
- Leave a Comment
同じ値を±の符号を入れ替えて計算したい場合があります。例えば画面のスクロール量を計算するようなことがあります。押されたキーがPF8キーなら表示中データを前方へスクロールさせ、PF7キーなら同じ量を後方へスクロールさせるような場合です。
そのような場合、すぐに思いつくのがADD命令とSUBTRACT命令の使い分けです。
LH R0,SCRAMONT LOAD SCREEN SCROLL AMOUNT CLC 0(3,R1),=CL3'UP.' BACKWARD SCROLL ? BE UPSCROLL YES, A R0,NEXTROW NO, ADD SCROLL AMOUNT + FOR FORWARD SCROLLING B SETROWNO UPSCROLL DS 0H S R0,NEXTROW SUBTRACT SCROLL AMOUNT + FOR BACKWARD SCROLLING SETROWNO DS 0H ST R0,NEXTROW SAVE THE 1ST ROW OF SCROLLING
プログラムとしては正しいですが、符号だけが異なる同じ値の加減算であれば、±の符号を入れ替える方が少しスマートになります。引き算は補数の加算で実現できます。
LH R0,SCRAMONT LOAD SCREEN SCROLL AMOUNT CLC 0(3,R1),=CL3'UP.' BACKWARD SCROLL ? BNE *+4+2 NO, LCR R0,R0 YES, SET NEGATIVE VALUE A R0,NEXTROW ADD SCROLL AMOUNT + FOR NEXT SCROLLING ST R0,NEXTROW SAVE THE 1ST ROW OF SCROLLING
2の補数はLCR命令で求めます。GR0に入っているのが正の整数と決まっていればLNR命令でも同じことですが、補数と言うことでLCRを使ってます。
アセンブラーに限らず、引き算は負の数の足し算と同じ、というようにいろいろ視点を変える発想ができると柔軟なプログラミングに繋がります。
Posted in MVS実践アセンブラー・プログラミング • • Top Of Page