5.分岐命令
CASLでは分岐命令は、比較命令と組み合わせてIF構造を作ります。 |
|||
(1)JPL命令 フラグレジスタが正であれば分岐する命令 |
|||
記述方法 |
|||
ラベル |
JPL |
アドレス[,x] |
|
フラグレジスタの値が正の時アドレスへ分岐します。 プログラム例. |
|||
PRG_JPL |
START |
|
|
|
LD |
GR0,DATA1 ;レジスタへデータを読み込む |
|
|
CPA |
GR0,DATA2 ;GR0へDATA2の中身を比較 |
|
|
JPL |
JMP ;CPAの結果が正ならJMPへ |
|
|
ADDA |
GR0,DATA2 ;加算 |
|
|
ST |
GR0,ANS ;加算結果をANSに格納 |
|
JMP |
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA1 |
DC |
1 ;データを定義 |
|
DATA2 |
DC |
2 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
(2)JMI命令 フラグレジスタが負であれば分岐する命令 |
|||
記述方法 |
|||
ラベル |
JMI |
アドレス[,x] |
|
フラグレジスタの値が負の時アドレスへ分岐します。 プログラム例. |
|||
PRG_JMI |
START |
|
|
|
LD |
GR0,DATA1 ;レジスタへデータを読み込む |
|
|
CPA |
GR0,DATA2 ;GR0へDATA2の中身を比較 |
|
|
JMI |
JMP ;CPAの結果が負ならJMPへ |
|
|
SUBA |
GR0,DATA2 ;減算 |
|
|
ST |
GR0,ANS ;加算結果をANSに格納 |
|
JMP |
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA1 |
DC |
1 ;データを定義 |
|
DATA2 |
DC |
2 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
(3)JNZ命令 フラグレジスタが零でなければ分岐する命令 |
|||
記述方法 |
|||
ラベル |
JNZ |
アドレス[,x] |
|
フラグレジスタの値が零でない時アドレスへ分岐します。 プログラム例. |
|||
PRG_JNZ |
START |
|
|
|
LD |
GR0,DATA1 ;レジスタへデータを読み込む |
|
|
CPA |
GR0,DATA2 ;GR0へDATA2の中身を比較 |
|
|
JNZ |
JMP ;CPAの結果が零でないならJMPへ |
|
|
ADDA |
GR0,DATA2 ;加算 |
|
|
ST |
GR0,ANS ;加算結果をANSに格納 |
|
JMP |
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA1 |
DC |
1 ;データを定義 |
|
DATA2 |
DC |
2 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
(4)JZE命令 フラグレジスタが正であれば分岐する命令 |
|||
記述方法 |
|||
ラベル |
JZE |
アドレス[,x] |
|
フラグレジスタの値が零の時アドレスへ分岐します。 プログラム例. |
|||
PRG_JZE |
START |
|
|
|
LD |
GR0,DATA1 ;レジスタへデータを読み込む |
|
|
CPA |
GR0,DATA2 ;GR0へDATA2の中身を比較 |
|
|
JZE |
JMP ;CPAの結果が零ならJMPへ |
|
|
ADDA |
GR0,DATA2 ;加算 |
|
|
ST |
GR0,ANS ;加算結果をANSに格納 |
|
JMP |
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA1 |
DC |
1 ;データを定義 |
|
DATA2 |
DC |
2 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
(5)JOV命令 フラグレジスタがオーバーフローであれば分岐する命令 |
|||
記述方法 |
|||
ラベル |
JPL |
アドレス[,x] |
|
フラグレジスタの値が正の時アドレスへ分岐します。 プログラム例. |
|||
PRG_JOV |
START |
|
|
|
LD |
GR0,DATA1 ;レジスタへデータを読み込む |
|
|
ADDA |
GR0,DATA2 ;GR0へDATA2の中身を加算 |
|
|
JOV |
JMP ;加算の結果がオーバーフローならJMPへ |
|
|
ST |
GR0,ANS ;加算結果をANSに格納 |
|
JMP |
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA1 |
DC |
#FFFF ;データを定義 |
|
DATA2 |
DC |
1 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
(6)JUMP命令 無条件に分岐する命令 |
|||
記述方法 |
|||
ラベル |
JUMP |
アドレス[,x] |
|
無条件にアドレスへ分岐します。 プログラム例.(3×2の演算をするプログラム) |
|||
PRG_JUMP |
START |
|
|
|
LAD |
GR1,0 ;GR1に0をセット |
|
LOOP |
CPA |
GR1,LIMIT ;GR1とLIMITの中身を比較 |
|
|
JPL |
OWARI ;OWARIへ |
|
|
JZE |
OWARI ;OWARIへ |
|
|
ADDA |
GR0,DATA |
|
|
LAD |
GR1,1,GR1 ;カウントアップ |
|
|
JUMP |
LOOP |
|
JMP |
ST |
GR0,ANS |
|
|
RET |
;プログラム終了 ※ここがジャンプ先 |
|
DATA |
DC |
3 ;データを定義 |
|
LIMIT |
DC |
2 ;データを定義 |
|
ANS |
DS |
1 |
|
|
END |
|
|
|
|
|
|