5.分岐命令

  

CASLでは分岐命令は、比較命令と組み合わせてIF構造を作ります。
無条件分岐命令のほかフラグレジスタの値によって分岐する条件分岐があります。

 

(1)JPL命令 フラグレジスタが正であれば分岐する命令

記述方法

ラベル

JPL

アドレス[,x]

フラグレジスタの値が正の時アドレスへ分岐します。

プログラム例.
(DATA1とDATA2の中身を比較しDATA1>DATA2なら終了、DATA1≦DATA2なら加算処理)

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]

フラグレジスタの値が負の時アドレスへ分岐します。

プログラム例.
(DATA1とDATA2の中身を比較しDATA1<DATA2なら終了、DATA1≧DATA2なら減算処理)

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]

フラグレジスタの値が零でない時アドレスへ分岐します。

プログラム例.
(DATA1とDATA2の中身を比較しDATA1<>DATA2なら終了、DATA1=DATA2なら加算処理)

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]

フラグレジスタの値が零の時アドレスへ分岐します。

プログラム例.
(DATA1とDATA2の中身を比較しDATA1=DATA2なら終了、DATA1<>DATA2なら加算処理)

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

 

  メニューへ戻る

 

 

 

 

---

トップページWhatsNewCASL2000CASL入門コーナーメール